From d7836db45f80158bb48712e0dae65ef32bdc1da7 Mon Sep 17 00:00:00 2001 From: iamboss Date: Sun, 24 May 2026 14:06:51 +0800 Subject: [PATCH] update XML IO pattern. --- App/Hi.WpfPlus.dll | Bin 71168 -> 71168 bytes App/HiCbtr.dll | Bin 127488 -> 128000 bytes App/HiDisp.dll | Bin 11493376 -> 11493376 bytes App/HiGeom.dll | Bin 431104 -> 432128 bytes App/HiLicense.dll | Bin 84480 -> 84480 bytes App/HiMech.dll | Bin 1184256 -> 1198592 bytes App/HiNC-2025-win-desktop.deps.json | 150 +- App/HiNC-2025-win-desktop.dll | Bin 893440 -> 893440 bytes App/HiNC-2025-win-desktop.exe | Bin 215552 -> 215552 bytes App/HiNC-2025-win-desktop.pdb | Bin 336904 -> 336908 bytes App/HiNc-Resource.dll | Bin 56320 -> 56320 bytes App/HiNc.dll | Bin 402944 -> 404480 bytes App/HiUniNc.dll | Bin 187392 -> 187392 bytes App/en/HiGeom.resources.dll | Bin 4608 -> 4608 bytes App/en/HiMech.resources.dll | Bin 4608 -> 4608 bytes .../api/Hi.Cbtr.CubeTreeFile.html | 34 + .../Hi.Collision.AnchoredCollidablePair.html | 34 + .../api/Hi.Collision.CollisionIndexPair.html | 34 + .../api/Hi.Coloring.DictionaryColorGuide.html | 33 + ...i.Coloring.DiscreteQuantityColorGuide.html | 34 + .../api/Hi.Coloring.FilteredColorGuide.html | 33 + .../api/Hi.Coloring.FuncRangeColorGuide.html | 33 + .../api/Hi.Coloring.PlainColorGuide.html | 34 + .../api/Hi.Coloring.QuantityColorGuide.html | 33 + .../api/Hi.Coloring.RangeColorRule.html | 34 + .../api/Hi.Coloring.RgbSeed.html | 34 + .../api/Hi.Common.BlockingTimer.html | 34 + .../api/Hi.Common.IndexSegment.html | 34 + ...ommon.IntegerKeyDictionaryConverter-1.html | 34 + ....Common.IntegerKeyDictionaryConverter.html | 34 + .../api/Hi.Common.RoutineBlocker.html | 34 + ....XmlUtils.XFactory.XGeneratorDelegate.html | 22 +- ...mlUtils.XFactory.XmlExceptionDelegate.html | 4 +- .../api/Hi.Common.XmlUtils.XFactory.html | 194 +- .../HiAPI-docsite/api/Hi.Common.XmlUtils.html | 6 +- .../api/Hi.Disp.Flag.CoordinateDrawing.html | 34 + .../HiAPI-docsite/api/Hi.Geom.Box2d.html | 34 + .../HiAPI-docsite/api/Hi.Geom.Box3d.html | 34 + .../HiAPI-docsite/api/Hi.Geom.Cylindroid.html | 34 + .../api/Hi.Geom.ExtendedCylinder.html | 32 + .../api/Hi.Geom.GeomCombination.html | 34 + .../HiAPI-docsite/api/Hi.Geom.PairZr.html | 34 + .../Hi.Geom.Resolution.PolarResolution2d.html | 34 + .../HiAPI-docsite/api/Hi.Geom.StlFile.html | 34 + .../api/Hi.Geom.TransformationGeom.html | 33 + .../api/Hi.HiNcKits.HiNcHost.html | 36 + .../api/Hi.HiNcKits.PlayerDivConfig.html | 34 + .../api/Hi.HiNcKits.ProxyConfig.html | 34 + .../api/Hi.HiNcKits.UserConfig.html | 34 + .../api/Hi.Machining.FreeformRemover.html | 33 + ...ningEquipmentUtils.MachiningEquipment.html | 33 + ...tils.MachiningEquipmentCollisionIndex.html | 34 + ...ingEquipmentCollisionIndexPairsSource.html | 36 + .../api/Hi.Machining.MachiningToolHouse.html | 34 + ...Hi.MachiningProcs.LocalProjectService.html | 36 + ...chiningProcs.MachiningActRunnerConfig.html | 33 + .../Hi.MachiningProcs.MachiningProject.html | 35 + .../api/Hi.Mapping.TimeMapping.html | 34 + .../api/Hi.Mappings.FileTimeSection.html | 34 + .../api/Hi.Mech.GeneralMechanism.html | 33 + .../api/Hi.Mech.Topo.DynamicFreeform.html | 34 + .../api/Hi.Mech.Topo.DynamicRotation.html | 34 + .../api/Hi.Mech.Topo.DynamicTranslation.html | 34 + .../api/Hi.Mech.Topo.GeneralTransform.html | 33 + .../api/Hi.Mech.Topo.NoTransform.html | 33 + .../api/Hi.Mech.Topo.StackTransformer.html | 34 + .../api/Hi.Mech.Topo.StaticFreeform.html | 34 + .../api/Hi.Mech.Topo.StaticRotation.html | 34 + .../api/Hi.Mech.Topo.StaticTranslation.html | 34 + .../api/Hi.Mech.Topo.TransformerUtil.html | 69 +- .../api/Hi.Milling.Apts.BallApt.html | 34 + .../api/Hi.Milling.Apts.BullNoseApt.html | 34 + .../api/Hi.Milling.Apts.ColumnApt.html | 34 + .../api/Hi.Milling.Apts.ConeApt.html | 34 + .../api/Hi.Milling.Apts.ExactColumnApt.html | 34 + .../api/Hi.Milling.Apts.GeneralApt.html | 32 + .../api/Hi.Milling.Apts.TaperApt.html | 34 + .../api/Hi.Milling.Cutters.AptProfile.html | 33 + .../Hi.Milling.Cutters.ConstRatioProfile.html | 34 + ...Milling.Cutters.CustomSpinningProfile.html | 34 + ...ng.Cutters.FluteDependentRatioProfile.html | 33 + .../api/Hi.Milling.Cutters.MillingCutter.html | 33 + ...g.FluteContours.ConstHelixSideContour.html | 33 + ...Hi.Milling.FluteContours.FluteContour.html | 33 + ...Milling.FluteContours.FreeContourTray.html | 34 + ...ing.FluteContours.FreeformSideContour.html | 34 + ...g.FluteContours.ShiftedWorkingContour.html | 33 + ...ling.FluteContours.SlideBottomContour.html | 34 + ...ling.FluteContours.UniformContourTray.html | 34 + .../Hi.Milling.MillingTools.MillingTool.html | 33 + .../api/Hi.Milling.SpindleCapability.html | 34 + ...eMillingParas.LocalProfileMillingPara.html | 34 + ...ileMillingParas.ProfileMillingParaMap.html | 33 + ...ingParas.MultiFormRakeFaceCuttingPara.html | 33 + ...aceCuttingParas.RakeFaceCuttingPara2d.html | 44 +- ...aceCuttingParas.RakeFaceCuttingPara3d.html | 60 +- ...ceCuttingParas.RakeFaceCuttingParaMap.html | 33 + .../api/Hi.MillingProcs.MillingGuide.html | 34 + ...i.MillingStepUtils.ClStripChartConfig.html | 34 + ...llingStepUtils.ClStripChartItemConfig.html | 34 + ...lingStepUtils.ForceCycleLineDivConfig.html | 34 + ...Utils.SpindleMomentCycleLineDivConfig.html | 34 + .../Hi.MillingStepUtils.TimeChartYConfig.html | 34 + .../api/Hi.NcMech.Fixtures.Fixture.html | 34 + ...Fixtures.FixtureEditorDisplayeeConfig.html | 34 + .../Hi.NcMech.Holders.CylindroidHolder.html | 34 + .../api/Hi.NcMech.Holders.FreeformHolder.html | 34 + .../api/Hi.NcMech.Solids.Solid.html | 33 + .../api/Hi.NcMech.Topo.NcRotation.html | 34 + .../api/Hi.NcMech.Topo.NcTranslation.html | 34 + .../api/Hi.NcMech.Workpieces.Workpiece.html | 33 + ...pieces.WorkpieceEditorDisplayeeConfig.html | 34 + ...i.NcMech.Xyzabc.CodeXyzabcMachineTool.html | 33 + ...cMech.Xyzabc.CodeXyzabcMachineToolUri.html | 33 + ...cMech.Xyzabc.GeneralXyzabcMachineTool.html | 33 + .../api/Hi.NcOpt.CuttingVelocityOptLimit.html | 34 + .../Hi.NcOpt.FixedFeedPerCycleOptLimit.html | 33 + .../Hi.NcOpt.FixedFeedPerToothOptLimit.html | 33 + .../api/Hi.NcOpt.MillingCutterOptOption.html | 33 + .../api/Hi.NcOpt.NcOptOption.html | 34 + .../HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html | 34 + .../Hi.NcOpt.ShapeBasedCutterOptLimit.html | 33 + ...arsers.Dependencys.CncBrandDependency.html | 34 + ...ys.Fanuc.FanucGotoIterationDependency.html | 34 + ...Dependencys.Fanuc.FanucParameterTable.html | 34 + ...cys.Fanuc.FanucPositionVariableLookup.html | 34 + ...s.Fanuc.FanucToolOffsetVariableLookup.html | 38 +- ...cys.Fanuc.RetainedCommonVariableTable.html | 34 + .../api/Hi.NcParsers.Dependencys.Fanuc.html | 2 +- ...rs.Dependencys.Generic.FallbackConfig.html | 34 + ...dencys.Generic.GenericBlockSkipConfig.html | 34 + ...ependencys.Generic.IsoCoordinateTable.html | 34 + ...dencys.Generic.SubProgramFolderConfig.html | 34 + ...s.Dependencys.Generic.ToolOffsetTable.html | 34 + ...s.Dependencys.Generic.ToolingMcConfig.html | 34 + ...s.Heidenhain.HeidenhainParameterTable.html | 34 + ...sers.Dependencys.HeidenhainDatumTable.html | 34 + ...Dependencys.Siemens.SiemensFrameTable.html | 34 + ...encys.Siemens.SiemensMachineDataTable.html | 34 + ...pendencys.Syntec.SyntecParameterTable.html | 34 + ...ystemWired.FileIndexCounterDependency.html | 34 + ...ys.SystemWired.NcKinematicsDependency.html | 34 + ...s.SystemWired.ProjectFolderDependency.html | 34 + ...encys.SystemWired.SegmenterDependency.html | 34 + ...ystemWired.SyntaxPieceLayerDependency.html | 34 + ...yntaxs.Evaluation.LocalVariableLookup.html | 34 + ...axs.Evaluation.VolatileVariableLookup.html | 34 + ...aluationSyntaxs.Fanuc.FanucGotoSyntax.html | 36 +- ...uationSyntaxs.Fanuc.FanucIfThenSyntax.html | 34 + ...Fanuc.FanucLocalVariableReadingSyntax.html | 34 + ...ionSyntaxs.Fanuc.FanucMacroCallSyntax.html | 40 +- ...onSyntaxs.Fanuc.FanucModalMacroSyntax.html | 34 + ...anuc.FanucSystemControlVariableSyntax.html | 34 + .../Hi.NcParsers.EvaluationSyntaxs.Fanuc.html | 6 +- ...rsers.EvaluationSyntaxs.LabelScanUtil.html | 6 +- ...ers.EvaluationSyntaxs.MacroInlineUtil.html | 2 +- ...s.RetainedCommonVariableReadingSyntax.html | 34 + ...valuationSyntaxs.SubProgramCallSyntax.html | 34 + ...luationSyntaxs.SubProgramReturnSyntax.html | 34 + ...uationSyntaxs.VariableEvaluatorSyntax.html | 34 + ...Syntaxs.VolatileVariableReadingSyntax.html | 34 + .../api/Hi.NcParsers.EvaluationSyntaxs.html | 2 +- ...arsers.Initializers.HomeMcInitializer.html | 34 + ...arsers.Initializers.StaticInitializer.html | 34 + ...rsers.InspectionSyntaxs.CleanupSyntax.html | 34 + ...ctionSyntaxs.ProgramXyzBackfillSyntax.html | 34 + ...sers.InspectionSyntaxs.SnapshotSyntax.html | 34 + ...spectionSyntaxs.UnconsumedCheckSyntax.html | 33 + .../api/Hi.NcParsers.Keywords.FanucGoto.html | 4 +- .../Hi.NcParsers.Keywords.FanucIfThen.html | 4 +- .../Hi.NcParsers.Keywords.FanucMacroCall.html | 4 +- .../api/Hi.NcParsers.Keywords.MacroFrame.html | 4 +- ...i.NcParsers.Keywords.SubProgramReturn.html | 2 +- .../api/Hi.NcParsers.Keywords.html | 8 +- ...Parsers.LogicSyntaxs.BackBoringSyntax.html | 34 + ...cParsers.LogicSyntaxs.BareG28Behavior.html | 4 +- ...arsers.LogicSyntaxs.BoringCycleSyntax.html | 34 + ...LogicSyntaxs.CannedCycleResolveSyntax.html | 34 + ...ers.LogicSyntaxs.CircularMotionSyntax.html | 34 + ....NcParsers.LogicSyntaxs.CoolantSyntax.html | 34 + ...sers.LogicSyntaxs.DrillingCycleSyntax.html | 34 + ...LogicSyntaxs.FanucPathSmoothingSyntax.html | 33 + ...NcParsers.LogicSyntaxs.FeedrateSyntax.html | 34 + ...Parsers.LogicSyntaxs.FineBoringSyntax.html | 34 + ...cParsers.LogicSyntaxs.G43p4RtcpSyntax.html | 34 + ...ogicSyntaxs.G53p1RotaryPositionSyntax.html | 34 + ...hain.HeidenhainCoordinateOffsetSyntax.html | 34 + ...LogicSyntaxs.HighSpeedPeckCycleSyntax.html | 34 + ...LogicSyntaxs.IncrementalResolveSyntax.html | 34 + ...ogicSyntaxs.IsoCoordinateOffsetSyntax.html | 34 + ...ers.LogicSyntaxs.IsoG68RotationSyntax.html | 34 + ...rsers.LogicSyntaxs.IsoG68p2TiltSyntax.html | 34 + ...yntaxs.IsoLocalCoordinateOffsetSyntax.html | 34 + ...rsers.LogicSyntaxs.LinearMotionSyntax.html | 34 + ...LogicSyntaxs.MachineCoordSelectSyntax.html | 34 + ...rs.LogicSyntaxs.McAbcCyclicPathSyntax.html | 34 + ...Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html | 34 + ...s.LogicSyntaxs.McAbcXyzFallbackSyntax.html | 34 + ...Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html | 34 + ....LogicSyntaxs.PeckDrillingCycleSyntax.html | 34 + ...ogicSyntaxs.PivotTransformationSyntax.html | 34 + ...arsers.LogicSyntaxs.PlaneSelectSyntax.html | 34 + ...arsers.LogicSyntaxs.PositioningSyntax.html | 34 + ...rs.LogicSyntaxs.ProgramEndCleanSyntax.html | 34 + ...Parsers.LogicSyntaxs.ProgramEndSyntax.html | 34 + ...arsers.LogicSyntaxs.ProgramStopSyntax.html | 34 + ...Parsers.LogicSyntaxs.ProgramXyzSyntax.html | 34 + ...rs.LogicSyntaxs.ReferenceReturnSyntax.html | 42 +- ...Siemens.SiemensCoordinateOffsetSyntax.html | 34 + ...rsers.LogicSyntaxs.SpindleSpeedSyntax.html | 34 + ...rsers.LogicSyntaxs.TappingCycleSyntax.html | 34 + ...Parsers.LogicSyntaxs.ToolChangeSyntax.html | 34 + ...s.LogicSyntaxs.ToolHeightOffsetSyntax.html | 34 + ...NcParsers.LogicSyntaxs.UnitModeSyntax.html | 34 + .../api/Hi.NcParsers.LogicSyntaxs.html | 6 +- ...arsers.ParsingSyntaxs.BlockSkipSyntax.html | 34 + ...axs.CommentSyntaxs.QuoteCommentSyntax.html | 34 + ...taxs.CommentSyntaxs.TailCommentSyntax.html | 34 + ...Parsers.ParsingSyntaxs.CsScriptSyntax.html | 34 + ...gSyntaxs.Fanuc.FanucGotoParsingSyntax.html | 34 + ...yntaxs.Fanuc.FanucIfThenParsingSyntax.html | 34 + ...yntaxs.Fanuc.FanucProgramNumberSyntax.html | 34 + ...i.NcParsers.ParsingSyntaxs.FlagSyntax.html | 34 + ...rs.ParsingSyntaxs.FloatTagValueSyntax.html | 34 + ...arsers.ParsingSyntaxs.HeadIndexSyntax.html | 34 + ...fSyntaxs.HeidenhainDatumSettingSyntax.html | 34 + ...DefSyntaxs.HeidenhainDatumShiftSyntax.html | 34 + ...xs.Heidenhain.HeidenhainBlkFormSyntax.html | 34 + ...ntaxs.Heidenhain.HeidenhainCallSyntax.html | 34 + ...xs.Heidenhain.HeidenhainCyclDefSyntax.html | 34 + ...idenhain.HeidenhainFnAssignmentSyntax.html | 34 + ...gSyntaxs.Heidenhain.HeidenhainLSyntax.html | 34 + ...yntaxs.Heidenhain.HeidenhainLblSyntax.html | 34 + ...taxs.Heidenhain.HeidenhainPlaneSyntax.html | 34 + ...xs.Heidenhain.HeidenhainProgramSyntax.html | 34 + ...s.Heidenhain.HeidenhainToolCallSyntax.html | 34 + ....ParsingSyntaxs.IntegerTagValueSyntax.html | 34 + ...rsingSyntaxs.NamedVarAssignmentSyntax.html | 34 + ...ers.ParsingSyntaxs.NumberedFlagSyntax.html | 34 + ...arsingSyntaxs.ParameterizedFlagSyntax.html | 34 + ...gSyntaxs.ShrinkIfNoDecimalPointSyntax.html | 33 + ...rs.ParsingSyntaxs.TagAssignmentSyntax.html | 34 + ...Parsers.ParsingSyntaxs.TagValueSyntax.html | 34 + ...ers.ParsingSyntaxs.TapeBoundarySyntax.html | 34 + ...ers.PostLogicSyntaxs.ModalCarrySyntax.html | 34 + ...LogicSyntaxs.RadiusCompensationSyntax.html | 34 + ...arsers.Segmenters.HeidenhainSegmenter.html | 34 + ...s.Segmenters.InlineDelimiterSegmenter.html | 34 + ...arsers.Segmenters.SingleLineSegmenter.html | 34 + ...sers.Semantics.ClLinearMotionSemantic.html | 34 + ...sers.Semantics.CompoundMotionSemantic.html | 34 + ...i.NcParsers.Semantics.CoolantSemantic.html | 34 + ...rsers.Semantics.CsScriptBeginSemantic.html | 34 + ...Parsers.Semantics.CsScriptEndSemantic.html | 34 + ...mantics.MachineCoordinateStepSemantic.html | 34 + ...Parsers.Semantics.McArcMotionSemantic.html | 34 + ...sers.Semantics.McLinearMotionSemantic.html | 34 + ...arsers.Semantics.SpindleSpeedSemantic.html | 34 + ...rs.Semantics.StrokeLimitCheckSemantic.html | 34 + ...cParsers.Semantics.ToolChangeSemantic.html | 34 + .../api/Hi.NcParsers.SoftNcRunner.html | 36 + .../Hi.NcParsers.Syntaxs.BundleSyntax.html | 34 + ...Numerical.FilePlayers.CsvRunnerConfig.html | 34 + .../api/Hi.Numerical.HardNcEnv.html | 34 + .../api/Hi.Numerical.HardNcLine.html | 2 +- ...FeedPerCycleMachiningMotionResolution.html | 33 + ...FeedPerToothMachiningMotionResolution.html | 33 + ...nUtils.FixedMachiningMotionResolution.html | 33 + .../Hi.Numerical.MillingToolOffsetTable.html | 34 + ...i.Numerical.MillingToolOffsetTableRow.html | 34 + ...ical.StepSelectionUtils.BoundSelector.html | 34 + ....StepSelectionUtils.BoundSelectorHost.html | 34 + ....StepSelectionUtils.BoundSelectorPair.html | 34 + ...nUtils.BoundSelectorStepSectionBundle.html | 34 + ...ical.StepSelectionUtils.DistanceShift.html | 34 + ...umerical.StepSelectionUtils.TimeShift.html | 34 + .../Hi.Numerical.Xyzabc.CodeXyzabcChain.html | 33 + ...i.Numerical.Xyzabc.GeneralXyzabcChain.html | 33 + .../api/Hi.Physics.CoatingMaterial.html | 33 + .../api/Hi.Physics.CoolantHeatCondition.html | 34 + .../api/Hi.Physics.CutterMaterial.html | 33 + .../api/Hi.Physics.StructureMaterial.html | 33 + .../api/Hi.Physics.ThermalLayer1D.html | 33 + .../api/Hi.Physics.WorkpieceMaterial.html | 33 + .../Hi.SessionCommands.EnablingWrapper.html | 34 + .../Hi.SessionCommands.GeomDiffCommand.html | 34 + .../api/Hi.SessionCommands.ListCommand.html | 35 + ...ands.MachiningMotionResolutionCommand.html | 35 + .../api/Hi.SessionCommands.NcCodeCommand.html | 34 + .../api/Hi.SessionCommands.NcFileCommand.html | 34 + .../Hi.SessionCommands.NcFileListCommand.html | 34 + ...Hi.SessionCommands.NcOptOptionCommand.html | 34 + ...essionCommands.OptimizeToFilesCommand.html | 34 + ....SessionCommands.PostExecutionCommand.html | 34 + .../Hi.SessionCommands.PreSettingCommand.html | 34 + ...sionCommands.RecordRuntimeGeomCommand.html | 34 + .../api/Hi.SessionCommands.ScriptCommand.html | 34 + ....SessionCommands.SimpleSessionCommand.html | 35 + ...Commands.WriteRuntimeGeomToStlCommand.html | 34 + ...SessionCommands.WriteShotFilesCommand.html | 34 + ...SessionCommands.WriteStepFilesCommand.html | 34 + .../HiMachining.Milling.ClMillingDevice.html | 33 + ...HiNc.Grpcs.MachiningProjectGrpcServer.html | 34 + .../fundamentals/common/xml-io.html | 87 +- App/wwwroot/HiAPI-docsite/index.json | 572 +-- App/wwwroot/HiAPI-docsite/manifest.json | 22 +- .../HiAPI-docsite/release-note/index.html | 4 + ...mple.MachineTool.DemoBuildMachineTool.html | 44 +- App/wwwroot/HiAPI-docsite/xrefmap.yml | 3553 ++++++++++++++++- 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 314 files changed, 13376 insertions(+), 573 deletions(-) diff --git a/App/Hi.WpfPlus.dll b/App/Hi.WpfPlus.dll index f05cdce2106fa759474c78f800ceb9c0541ad554..73be70f0c4f9c07b021eab2aca39ed18b3f265d8 100644 GIT binary patch delta 325 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 Cb=ENe diff --git a/App/HiDisp.dll b/App/HiDisp.dll index c05a32c6f3ea813beef089e7c8a29f16edcab1b3..a443cfc5ec57e79b43e589681d3edaf7695e974f 100644 GIT binary patch delta 120044 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 delta 120214 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 diff --git a/App/HiGeom.dll b/App/HiGeom.dll index 38e96acf5b24aa95e794d8ac40e68735809a0d36..58f3a96f95b66064da5339237b80c9316e7b6935 100644 GIT binary patch literal 432128 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

r?xHn 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

;4_e+3)NCHsNZ*91 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%0D69cy;Mvof}FBL-eIJQf5{Ljko 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 diff --git a/App/HiMech.dll b/App/HiMech.dll index bd6106926d733c3812a11f9ed2d0c45577084cf9..29b1f1311fe5bdc67f5f2e2cd508d8d031992ba0 100644 GIT binary patch literal 1198592 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

S;OkT^_p35oLMDE_Jw@5UR*+~nURoM6^1t2 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Μ+(t)N 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

  • Bm_xLKUhdzT5Aob^m4%rUg$<`v1DB=~Qui)N~0 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

    OvNy9+qkEIAXkbssd{fkP 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 z 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

    cW;08okm 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%0A9C3Q5%$CLW=;sNzN(m(2#We9~JK7|)! zQ5S8v6EX>K-=?X$I4L~uH~vBm>ksTzoKT_0*XB$!X{@D0S$7+~ptG@7a-Ns;6F2Ct zH3M#=mjv`cpCZYg$7@Wp*Ewjfhz`T;+KSXy-jH5nuv7L}xmM;EN&XOI&y`D=h~Ocj zT<*un%SP~|{w7*T>KEyOZ(PHy)_Tw7Fix&Bd2( z$*#Yto?aj4JIaStBuOxYk5`FrR)cTs+2Cl*1xM3FN@FwR!0x$b*nHMZInih`UbRhm zas=SUt7aP*uL>v4YGhiY3B@x{$CxwrY)CrxtR)?Lwv~vgJyByWBx=lAqQ+b+QL`8l zHKTc;S+qnzW=l>|6q5U`Q~r_D7;w0Bv&VqwgL?9HtE@%^KSn~_G2@=u#Yt6>~|2p7yO+l2YKU5bj8?~$nsjBvwP`BBj0a4VY6y@Y*u56v1ij1(1y63^+_5CErdYp88AkCv$zbk2P-B0Fkbcd*t6ci@v2lt zONYkDyjSZ-|74O%`=-)dz)`_E>6xI<{7i6k;R0T-ykX5tP5FGM?E2;-PL~dlTk}P z0$m|VC{y!i#71y=J(lEI=>vjyG@02_lpRS>_i6bnz-|t;#w;}qIMXa(3`bekV98Ef z84L;%vZL6F(5VkrNy&unAPA%Pwy=hYq);2m#iX&C70fRlPFr%hJ9EDF**FcAIXisw z|5M&a$vX&y;ETMCIrNx+apxbecQ}{BZl2WNchOw`r85JgC+QpYU$*p(ItP-BRfy2R zD0Qta-X5l)wO#*~YIo&wUyP5(U@uZDZ463QGvb1u+JlR+6Reyx=V6E86g< zLzd+d3$?CEV^Nr#ap7=gg~J&X4&y~?lNvTRRd!AiGb`dKkLug8K`__YpoW`>8%L#+ zLFWiNchI%&KwP<_Dci}|7HOL<7$iX<_pvR@I4}nZJ}8LBw!oZuYDn>f7xEMX-fk_l z^gd`&CM>^6@cNtDL(DKh!Kz*n$g35=xi%K%@^Gd4n@o&;W+m;2C0PlOv#rKcvaRXY z>@bLvc7&CFXZb+-rh(op-d@l`FAz723Qy`a3dbR+O)d5O@-|LerKy#{Dx=cIX$QZd zb&rPa9wxN@rZ6kg0AR;YW9@P^A%>z(#z7P*A+`gB)i8omnxlX#w&+RIuLz9+4i_FY z*6TGj#(cNMCN+*GjaNd8LMF{H<__!eN&u?1>u(Evq0_b`<0q1dK~S!N6v-wTKbMTZ zlY$+hj4Z+2>A*)w?LkWD?1W7a5*sJ6}s6ZKh9sV~-t5hawu+d%Mw&1qYhVtn*ijP>fS+nFf_t`-E5iz9}rI$){R z=1`m8N7^k1LE85clP9@_F^(h_jjkGkv`pOMmfoGLQ=q@AEMK#%zb`3Mf1lq%bSe%v zq2S`V1Cdj|;&9;q02_}sPD7zBu~xsr7RZh~`~4Em0$RM4Y+!U_S51R#mIvR~B6_*q z;C&^(gf0lS?JGCLmAj*LN{9e7fx1lSy5_^yAKi~BPfoVhKh?B_$q%JhwD+AHik8n< z2Xb+(4(FjNm|wP#`UaVUN~F&dy{dyAg{HJ(z%Ckg;$w`leKwuC-)W&;SJlmZW33M! zsjs-e3h*U99U)d&8<#3|_2aZXen&9`PRh?6kIIm&98lpYrua3&P>;EoD!piy^ zg~>{v`wm;FEfvF}I8 zC|%0`wV^}eYm|*H1fAA%wAdTYVzpt$>OZaLXz{L~%t;D3$8Gfqr8PSIJWyH1H9888 z3LS=X6j36Zm|89UQshIbSYw*(%Y_~Tml35B$hk3;@`$*nan;vfN^W3fwY zp39ZD0NjgsUm*6mT>o}nd{u;S9@mN>l}U8P zL4g_3M?fA?CE~NyDK;9I64e=Ua?q^X)zs6{ac zt0BjNRh^vJNvtYU*ZRYje6pzOV|LWuwb6XuSz`V2O0Bxaa&IgQpsl34b)v%)wfg25 z3oWjKLT*DTA+IAZ+Fkj$Wf`McZqol735|w&BDyg1Onr>MP@q!N;?l)5eA{ zKq1sZR~i*YXG|f2qnA0F#R(S54&zn3tT;nqd$$Nusvd-L(AeL1ax;Dzd)njRhU#pO z7hLuCmrH?`O;;qTRc4?_n z29p--wS!K$B+8$lKlA4uxo><9mECkjy5ETUf-d-dPBf>ES#C(~kIUD$=wZHbvhTT@ z8P2`ZGozM-N}aj`xG+6iA4a)X)Uuo_`XQMs`q4wz$Nbvn)m+J>KX6W_|=& zk|%UNm=PB;e%@TaScikef^9Qp^FhQ`5tJF-r=gp^){%SQbI7Ib6HRe6LnUQ66RV=m zNb0Ypyr}*ffC#oNU-RCIDcasy>qDj#>&dO(=*X@6JZQMGgYW3>eqr~Be?un&kt*H( zjUZgdIX|Hpotf5UUI-56-<(3Tf$dLJ3Vut)=`!gVUm2f)wIl8lxy4}6eIkCdcb0hz zpl7j$r92qN6^(CIZwqnFoy#9a+j|MU@IU7M5}l75H}UP04%wPXGW)mrWx03ICg-xL z1*03pd5gaLu|E97cLmn8KJ${^-ToDyus5IYfz`vOobGMS6Ar6UT7Q#$_B^A{OnerO z1vgEv#_iH$&o>H7;o-Yta+@EtJgLh{l(g3JDnEFBruuwp#j3xFDJ&C1(vlgy3)t#E2_;sE?rUjb%JWV_Pb8h8Bc%RGUxK*M*y?Mf;Io_?3juh_mhWU_Y z!>SD}d-nA-O04^HJDlb%vO@9;F&KaF7*c}fIA4;%-4prKC3xFJ#v{73#j`ELsxbq} zaeF@Ab5kuQmsM1cTUbM-3Zb+XG`5pRp{hJsV=b*f#WY7Kzif^_af4o0>uT3dE_i>T z6h)ogD9xRKk`s{GH7|juN;Ei`i`|)93}uTz(r6sWi1|{wqp+1ha6e z7np_ieO4XS@1ZMh3upcR}>bTqCm?ye5OLipO4hQI50YXUdc~(Zq9AaEz;vZxW%5EVFGWt zB0~`~bb4h2zplYf<~jCHIZyd%GmJlGtxC{4)SYIjy_Rgl{$=JYnE)(-@|?B#z5!)h zZ!m-_`26y}%RQ8PfOBs{JpXg<2b^Ym7D@S)9Jeb#SFw)reT5#Y#Eeu}gj=R7fvUD9 zLn`py_I&xbE$9C`%@9PLgIC z?d>H!>ku4?_0}TR8|TfcM|xFuoyTY=AaFRWagUZd6rjsIM!6_Oi%`N%#D#+Uxt_#> zg(XM$=&CeOAw(I7DACQV*z?Rd=`A1CI`QacJ+|f_ z*Ysv|N7r_;Ka~3(*;A6kGR8hQb(50p)Z_VN2L~(v%Bp&V^pEqeH-$6Pg-X2l&MhR_ zk$Z|etp{^YQuGe~ZKIO!YMx8E0Z40h*ogLlavr{|J?B<(Jw{%|jTOHO00JXX;2QfE zgCs8;m7qs*yZ(E%-5IAkVsvgLC&4_4Q6SxCokiFU;J;GwhJivcQ^dkzmZ{S5JbGfO zSC&Rg(Wr0K>X#C!vNyD_#p09uPCr`UkhvOd1v)!+SeP-N)@GRSCsUK^Wb*s7^cSIs zY*J#D+$j=IvZEGAh2nRKo3$(cK3swH^s<5{;Z5rvEUEF}W!La(7O-TFA#4x~EU)>jk+#`I_ zrVu`JlFQv*SQuo5L6zq23oEB-0QC-(bu!xK8M=3aU9dt&TE~6H#&2$%Bf+0ia;#7E zvv4fA%#>EQd00O~)b6+~r@I8G&PyzYDSx-Gq*ER#?c9#4#LcrD<8T-A#xyT- z{MQDwYi~4^5=qTCcZcg@@3X3`WXz^9lc-XfX@D6p3}>Ces$T;e4!kJu>Y#LOpKwZn z*W$u3tma4j+mCA`$FiDbU~`*c#?2+;BfKeQd_*!_D$xd+yNwBa-1Xhu+S~^C)Vkc4 zg|2oE;Hp}9hF8AFU^FreL8!$H^Wa%!oXOIJkekwbWSi<2k^%q=x_K?={&mOqxj@P( z#rF(olh5ey9*79DQbO-#_)fdUAfx}&eFkT#yxf?h=Wol|29hqoaas)8Xfb{T%+yk| z?2JlwzT9~)MnOZJk#n@5o09D1%YNyE!5qgm>#xZ^n8>v#o85__* zq1#ejft1l0U1?19Mgh_Ny~3SdkS!FIDK2+|UE!LN7Y za$`_r(_$y; zVU7QnSHlRsAN7P5>hEtW+~z%yB^q}Jsu9VAB}5C6HLVYqZg zYTL`}jk3gY^y4^C!7j5i=IV8Mv10VLux#^OpO*_%{o<0)%bV72gAKlf(kBa@8)d$j zUAEe8+>%OcIwpSY^-2jKDqG7IY_tR*eOkI(ez6Tq% z)k0UMkXR8>`M|7(}2Wg9ruvQnQ@Zb%}(n@+HKXdh_?1gt!c!B+yc%@)(ZX#6^0Vr{fa|Fc2lW<8G7DJ7?yTRNb|mM0@ocRx zp8*1E&6M$M&{|_08_y=GnS%pzcGT(Ex{Y^DpG3SkP0ux zzAR&uS-4$aG1r=>q*pskZBmq|&`HL!WXXK_sI~1CpIa)s!2{%$XaU5dl4orE*`kNRd`P9=H+)JL2Xn!I}Z%{icY+WH52V-S{$~z?>5+% z&#CnDaU&OTOyMA%E9?s6X<4;z%jq)nq%IF+w~f_HS|3I}QZm*i0LT!0Ol8dJhIL5Y z3Dq+2^=sUFnb{JIn$CQ^z^Z?!uzGAjSHZU>3g~TPQC3@aJ#;bCj3QT@YL3CYDHcc< z4BWbIZ!$OP>W(b0UAwHL-mvV-g%=qNg|vKefcdEuDF#5#%kP#ShKuh*vHdPP7anBm zhr})6+Fi*Dkl2{1ZKfy@_%W9&5_!$*J8_^=nhuYIKjin%>0#&T#29LMW}tEDC34A_$ktf;R9c4we4on( zwE@8#t5?HWdf)`$%kPTd-_wH0%a;n=x+jJ5Ni$FghF1T@B|)z}`i$+g2LNr`8b6Ncv?O537&mp{7QUm~hsggdra|bIldzjm`mU80$ zv-<*#I8tm($AweW&uf~BTnV#iRc`k1`Pe?&qFkNVTqFjO261Onn)Qpgx$P0QwQ1km zj~R&FF>o78JQb;1+1TO^l4xU`hDfXRNFCN3L@ts)?ubpaJ?mFIOjo#DstAuyJB%k% zgbBspt%wl(6*a{*t=2BPucexo7v+M5nT2`1AGE(Xm8M*xr#Y8YF@ap2x45{7VFLQP zhQvQ$mI;kQ0H>Nu5Ly2qd}q(QAuqrEi$p=5Ec3*JfeaXJf!fU$AJ&pXG*Wq zq-=y!SnUZ@&FUZQNO1j{m>u+EJ1nmSvs6(>bq$Y;#l6g>TN~W*J(S}Y>87rStV{RE zxy|edFVLHJK89b*cUlINap4E_<_q}u=ei!VrEjfw7M}p~`-xxVwg-peia~Lu^J&bz zoqx*`V&^j~0aPB!{gAZUC3(O~ylop5KWA+H1uD>zq*V3d<9L3Ar|bI^?prCl^|iqf z>*wckMbGzq&eoMaC}L>cfaPK>*L`C1Kx}J8aFL7|YjgHm=dZ8%>+5<+ityTy`+5$u zhh8#!5V9Vpz1I6{qra@A^)ZQ+w9$*-=z$x_NxqGgW#yW0L-c*a1Hb97P_-4k0Z_>B z4d4L~z1GAKi+|8-dC+Tl(Br=8Kz`Hf{3h8b;z195&;uXzsvnGTR`r9xXFwVR8{PLc zui%rzB61fcEPJiu3|SdeKI`Xt7=Zp%>Zpq6WPz``2-p?`yfr6ZH7w z^s6XOBAsox&tZMn>N3j%d)ni?JJwJU<7w={inIXjxcCtT>=CIP`(OU#qa|y4z8xly zF2ikKt+alP*|E))C#h_ReYpE!Us~oC*|5#t&tT^7k28fhP8rCzW}qrUDP6&)qw3^g2gbq;2><^OQF5d{@`3sYk&bhGy-LO8o_IEq?hv5*udJb zm~jjwWQ9*UQ<0N8D2kuB=h#ju_G3F$a< zUGnMH32lf!pB&RsNj+oCTQQY{^;x|7NCtQ1g#CsD5Y3{v*;F}JS1#YQf#uP^ zAKG(ZNZ(w2^3aPTLkIV-VN>6}m-JPk@JU$Pz(P~l?M{J`!MymvSmlcQT06MEwb01{ z8e3Z&JG@fcNigL$PLqi2jYsWzVj*3p=D1jZR&MCXt!>*+^Eu%7-kNw7$XA7B&LsOx zAu1DT&vN^{uoIpzUeq1cZtK^U4;a{7==~gNrA4%4lzyUX$TuRQqI*Ne%{<7%nJHL2 z_A@6=YbKO5eu7y74QFgx5HdC|nha?3^cR(bY_G*AX?an{z$Zhx|-TCB!ABO!U`mDRtT-Yf(cGOO+wqfZNYwE^uakxen zcPWO`I=FrQjDyK~>Q2T^!VL_`Z-kRoc8W$2NOGmj)S+G5j8PL zyKP{5hKQsL)?|k$O3w3R^XX6E6&|E6I}wfo1G3qPIVcrRagBHSM2^zOI|IBrPYlu} z6qFMFj$wDaGjEML7ZQy#VfPCeK`z*>jz?|WgiYPS2{YOYjKG+ zd`lBcoo*htPv6PwXVZ#!S)Dn;poVpo_{=Q;7x)q}8XrI%Q~-3^0l~G61~GpG5spd%_}h9tp=?q!Dr>-41p}%vY|YIs6-gHQ^*7=qX>3Ww8_GT-1iE- ztvXCv=(syU5=35rDGs+Fi(APddV{>WSH%qAV;n8%8T*~pWs{3;-s2Dkw7Ac^0#V5?wz#DifZ!BIx25JTN;AGI_Fer8 zM|;4RU~jej^O{WoUVH3wjR{maj9fH8n(1$a_0PWj7*mE9nW#R;hM+@`m!`lk*k)SI zQ}x07J#1-vfK5X>+;@QK#a_bpS-M@h&T~tk)&IIQmwTqLOh9LT|3;qCq7N@5#R_na z=avtK(=LdLHXh2>5wo$xP<4RpsmfJ>D@ef{?_Gic!tlZVi)bt;vCgS$$UL020?99| zu@VaG8g%eWdDBhDdkJN((ic-pO(h-0`YAGwv{%Z}=1>~^8=Ld(=J`YLH*6SGm=@`T z*9RX4m2TwH*nSM3OayUj^5-M`;Xj^HlguAeU}O<)x_E(_N2ucY+@C6eHljaoNmS=^ z2B04leV%<`+SaX3<|H_+L{K8mHqpW3gUR^HWPDXJ&Pltq$@qH59ckK^wFvMZ7QgXL z^sENX_@==^_dp4&#dxphD=r`^`$ME{gyQ>oOF;I^HeTv!JQ3koFR{v5DliXYEiCNf z9F+>_!scfcZsIdV%q2<{KJ{cLX~+A`zNZ%SyTG%%O3kAhVzNO`M*9Xm*&tlNJtV`^ zp-*juGFN(HFtO4Tue8MSkQfh%C6RQLcYKv7(Y{?TjRPTVSKmdrK;x|uLtg;u zs1O%w!4+ZW3=iGb4VCkvmRQlIw4zN`(I&45iqMrQeM;>Wt+k4DsUHnoyHvx4I8~HZ zwkcM&KI%{X0*G;LBwz}yxj6J;!!?9k(;$fTD6R}k5A|BtTdnK8*7cg=gTh#zHWXNS zov?Q7Eqbt%G}p-;0esj-4|rOxvs;f64{h-r-wenQ8oKiz&<7SkZ)_!2Gi*jr-(lt$ z?_Y3tp~S_gmXr}8-9EU3V%(YQ$S(jz7J+BM0*=w7He%Uv#qz;FW}+7F;4HU}Z;Nj~Co9ts`;UjP9jUDCEaC7s_CIfS$I%b$YF~XONH?PL zc4a*4!II!iuE^4Qh=GMIQ7GQhaEX5mE56mHmY%0?}V@%Nw{_}Yp>o^|vojmk=CS~lu8!h@LN{glatV+2N&IF}R=&ym- zRI>>E;IWRCG!7$&Pi4{&Pwnbjbf*ep(Bf1$Q^rtVF(klGr9ta5#%PLg z&usl4!)Wf!Nze~7*#xm}mh^t$fONKtOGKfa($q5Fo@|RMwxWtUUq>@AG%waPNTZ!X zy=?^ARdXQ$ESHd?#*ES%a|=t&P`2XyJ`Nl=omt&7ym$D;UBfRvcPM)NAW!w6yhbi94XJe;o~|=t3KE%DMUG3 z_!%5T#OX7&q&G>cnk0j16+r2<5|`a_V}8F&NRhBHBD^Q?sant!oys1vD2>lOT39A#(IFaZ48Cm3Cf-S#@bZ#!~8Ovq8&39oaCul%SPM zh5e%Q|KRT9&g*(y>g3UjCeyh}5AC4pe6`Huzhh3;Ik}9L2v%s?#N~<(Tho#Fi{cnw z<>R@m4?FctnD)ubz8E16MzP8GyMdvloQ>4XCnr{EJ~^(f6XO>UU)&uYScZ0;1V$le zWE669GDjSf0l}|)SGuC)+=v9JqwO9vD7keH8Xm+zWWg%5#f0&tU(NEdcB%coFO`&X zKT>x-`}ZL1e{J&UoaRy1BX@*H|2RWU?Z0g8ysUO!?VQ6-*7;xbIH|{fugCwT9vRli zRPqlk`G-pWksiMdOKLV`e$Gd8AyxQHo^RM=E40&dMWy@95-3L8A=rM=70X35(SS5& zvA}$L+!E{;sHP~RlnLp76YRQkv0*F5hHhJda6YL!D9jp+BNP?oV5%UfB@_B?vJwyK zNq?zf6WywyqD!ka&a^ODJCy#S$e8F&1;qrD@Sw*f6ZUDfiCz=tMZ7I?knaX^P>{7v zjtn`-Ta4sjo)$UC+ad?~A|nQ*Ab<%}8~U?^;bo?>P)RW8@p8Mkwz+PP%MwKh!=@Y9u-xE*&&fQKg6RQoaOze`0wVmUP z+|F0^IK$&E+r=%*MwWF3caAk65E(X{1#^T-d9d?+CN`a~pi7z{o>=ZV6t}taccR$; zowh~g-!)@z09t}-YiZu@jYbiVMc~34+$}BJ(x5oRoBvz0gAzL%1Lg8bnM0oPPqhoh zmXW=4Jv8f9v=!Q>)LBTr9Ii?X_1~N#qxLyqS+&nXvTC0NM77U6_I-r3eZtw+c4f;_ zj4Af5eT3Z37`~o51%@aKoHJ}ICCwxo*0%qe5wo>Ofz(REG98axujwg-jq%of~^nEI3{f(bmx@kescujV&r13hg zp2nLF>+Ak{OV`S^a%&!-R_9E=Y5Yug5iqQUMc||q>EURp1N}=8pNfip8==S5p3^HR za^gI?lCelykikAa!}B}D8jfrrYq$0ULq8eDF)hWT_Nu`*bD1V4d>RS#>H|qcTKM#b z@>H*yr+QVMkfZi0_waD{{N-e}$d83qKKV>u9y4|;^UNi=DS#(AdDdPP@Wk@0&Uf|OXX<26CLNaj`ApD0BSyW};)oA=P9m<9YvsYRI^}DB^+)Vlcr3@tXbt0hpHUbuh zSphZE0xCn}om}o)jp#xI`Q-B3S@W|Vzu`&E{oM1dNy5bC*y;=T8vnw>zT4W+LPg_O z#sBhC{k{Di`L1XzH$DL9U#AGU5U_AT-vyCP{5OnQPt!ux1@w)6?f2^7v&?9W;Y%fR z?|z*{`-uzv`DBYKuy|Jsuk~$6D8Ml` zVjuABY2Kj^9R{)HqPvQ;76 zLWFliv(G#a#Ua>yG#zMOLF1RU!SYNuH#v1IOfqY7Wsi0{+(ZUOWNf2pthn)ZOC&dkgGg=;I}fYr!eyHJw#}`e z;o1=`LPX-O9WkaIKZ;GH?(pKJRyW>8hq5sc0-D2C7}W}w!@^;67;a}MdeqwawzX}T zLj*mK9OBZdUHe|zy=!pmOM7+=?_;JxLsvyJnkv&LY->l6O!}UDw-@Tl(0(;o%=~w@_Q9EMX;+T8)DIHmSVH zP1=7j=^sm(Imy>n&Po0G6jU8q2DwJJzx|Wklbck^dQH%{D;^Zo*R?i`&76dvae|f) zH!Iba*qxi@dpzya&8S0ElaCuzk2{EuFNG>6H%oidxT(&EPZ!JS8=Z!L z6HiJGn}q<1((`divy3DX1lu{DFTzy9n0`5j8rfqwsKjmyNLKRLt1 zr8zNxD;7-23;ttVfN&cd^85y;@QS-AZ%BLQbJGsxw2eKfKVSgN3kUTF3HFQnnIHmVI;3M7IBtV}uc#^XJu^@OSw1}i>}Y%HndZML)}dmbZ_Gs;43 z>Pu?1WcE7RMA);7B|W5*wTH2uri6ejzXqb1{+W9?YM+T$%^7cnM1R7xKqfNV$mY2{ zE1@or4ab@T`!R09gPw!J|#~B z`WWD0F)M~?=-iNuAOI#|oNRYRS6|B*QoEM6ZfP(}#3FmOSP576`|v17b5(UhD@(8$ z#T*z5=*bqo;Mir}=7nu>k3NJ)j-B_&J{}$m$Y}Jq-Y;Zibc#GH5M^@R96SgjFgy#Yv#tVLWRN_J~^d$ zUT|xFG9!|hLZ0xP<%4G2{B57-o}A)48sra$uWW)pSv5XX6n503VfQnQujx1P!H5 zUN;D}`~}o3e`%J2BQ;F!HG5T zh?Eu<%z3dOh_^ZJA+|JTB^Xe(Bf1CPlJjH&=x!(1$yd563l;>^4@-*0$zSpd+`O(XfAHa4T1I9vpmf_paf=@cma;dXB5lF3X&dOr9|1YVxvo_hn&h z(&o;Smkl{5DB4hNljup!k0(#EE!Y|>&7IbSS997Sn!FC`1?_kMaq_x%!MKZv=JfKM zEJ{X1*;jKq($@w$Y})Z{PQG9Rtd}a#TloL2*vTi1LeJ_xI3e}~cP%i|__6t|rHW3T z2&(Ah2^%ISOwEZK%qLHf-gJLCv>($;;EOQQhR%m_Nap3ZL$t#TX*8vf6D1fD%2P*{n6NzPHmd~hFrmb@TIp62V(L*31BW546JcdPjp9|-B|(aToN z<=|_roWx)#uo|zm#1eP*4%l7{@`?uvGBHTFr~TxPRf}0#AU8UNP_6tDre>coK6b*( z@UeaZb4W7fd~5PV+_W)y!Xz6RguxSP{!=gRwi#PsnXQ31)k)D)IYZrvV&`TsT3r6X zmL31kJ#T- zHV#;L4au9T+c0~ZFhDIR=cOgu6QmL_-SfILCrb{T#q%tY;ya&AjU-ch|3iWOCt5^G ztaNdw-$++o)xLCNyMIUr& zX>79^^=SP9ZP04;txToT9US1vq7g*c{9;L1#a@DaIKPCwkm62Ag<>+*&9A~H-NhRA z1Qv_XU2zGw7&!2TI==obQ3?{(-6MJ&)MKw6y%IaV$?g5 z!QF1Ia}TpJ>kIeU=~8z}a!m~iW0VL4rf%3KLAi7k&4P@I>!!F(^@|gH8X}wl;N^<| z4zgze(AuYFjqoCER;Us+DyF)vys2(cJWmDLw~?Fw1h1P~Zo3VG+t-hRN8Dv;3IoUzNpx$PwVjw0IE7}iQ%}3 zrepd)I4A;FIb^!UxX=H&u9OM&v<);bpE$7^{;Wl9!?kpKrYExKQ7_lG@fBD#E3LhS z%KVx_mzarW?U}{@6pLYu3uLSPo{GLt6E?)CRaT}qk(MHWX+wxEWj1QEp1>v{5S?zR zUD44mE%2650rJMeQdJszGr|#iN|Toxekq7?&Uyxxf(CHQ3S{R>GYCh`_canVS)|<8 zP2-XymC4Ot_UYb;=CpEU(6^GSG2B4G1Q)iM#iCfaA?sbF+O zucM{CA|{TZ%}kX<=p0S3ZFkCHv!~`X7cU!O+1$Ek>cJFAW7A?-)o=$s0HxLPE7MiVz_K`v`-TW0h z017?Et$U`{sxA7jsg_>umR9pj2hsidezLjrB9im70{A6h6a$47zt0Nc3NmMwafXvv+9zxA>-1eY_KUw z7VKYvYyR3U9Smcgh0KA4SPrHh?EF{$&|AH2Y^G(pj|kI24(j!8EQ=4 zJ+8g;kbsK|DmHtgaZjs21)afu5^4)QXDxv&&mfY*&<3fC#lq@2$8>se*SQtY9raJeAV7X=qk0^lk`TAr|j}kj=`V_JsiEM$w$<&EIh61M{L3~6+niRENPHh zW^}eYXuLL~p`!!x)Y-K0*f?#i z%tD#W9pLyjyO)?t`T&`{ZZ(HjJ25b1HMNW*HaJ33pF>4z2pLfm%n)Z2QicV8R#iZ- zvjGrnj)-8}-8OY1GEGkeQq5ugbt+)z-j3YBV|xya3=hVA@FRn_=#n>}zsc@M5^S>R znPSUL&(wLsCl2$dnqgNPJVv!9K6P5O>Jx#}T7PP8;AgZsWnVF$dM`A9)$iJ?W^0f` zn~6v|%0&OY)ZsMM_$2Lt#wW2`n!{;ebGQfEn7WuuUDD+UW?6&E0aUb3tuk9*(6c%f zbt>$4mrSRUBa-YPnq?#_htf|RRtu&sx6E19OSmng919s11O3Kl&&HAo_mbscFam~J zFKCzvP5jn^&U?^#*ONx?mSGv1#aNo!^0H(uBmML_=tH8Vr0qp2>abyT!VKQkDMyDS zip(@rrwuw&zkrLvijjWROIAhoQq+Mig|!qo^d+-VR4-YUcW=(ZR@`LjLLi*>SKyIs zq3{_gn<>D==$DwYY0e$8=pCgy?UtrzxQYsO=Wm>gzxs~rJlp)sX%X!Kce;g-8und$AhmJ1di^!`gN-g^gJ9i$6kGGq_zd2J@ZOmIUd3bNZlR zV3oG7pgy#qm@C>;`E(q_>^NY>1cG4#4Z+BL-rTlAQJu1M-qSKFUEsdfa+t9WK5}4$ zPi8qMeVjo)l$kNQ~#V{CLgQS`79^5m??})PKyw(5qhQ=*MQv; z;MJJO0JnyRz#gWK8)G`l-WJ2=hj(bNxuu8@2XEfUM@HkRkJ9DGSUgwocczMVI6-Gp zh^C+iN5paPOoN-i0IKFenRwgM0x^W)1i;qS$<${zTQ>|R2Aj1j>fx!d1kn069@8dU zL?zUPlE`W=%Z?^sLvFE%Y3G5{hnbgf1g%yhg#2cx^<6AhPOYZ)uUD~lOuANskfBU} zOB3zIVXY`T!p3!Y=isEUtae^PTP4g0T zn`}eQv~6;l-jW#+)p_gat(lk67YoDDi|sUEjsVJHol(WMYnkDOvQcotD*y@Yme z_COO+<{}BK!o(Brr^JKZPYXfd<3+t?H ztTnQ-1Q!H?gX0+flfL%>l&MMmK(1SA*)FPK!B*=a8~~t(!`9RT zg)g^SikzWerT5>;nBeMyH}mF}O+U{Bpw+5_)+#EBZ#lhLw5mV1BmCQ80NO=7LtIKD1GMxcDU$!Re#X_z_B@I-#A?eYa1k zPq<-#RIetJBgxze8!2`G19)ez^KmvdkFeB#6^|(vCS9P85$*q*9`j})+)T#$YAnUU zMO@y^9+&k{HEKzco@4h4je^6Nqi+zq%X|PJtwFN{@rE;=>5QeFkD2Bzllr_3tTOVZ zWoMTu9Xc=Rd?te$sjs-awtkpHSY)qGOa$`GyfCe8LdoF448%0>EUd2TiJISV|oeBhEFsMau zP$aL@DTE(7gnqt*7ADhYTY03PQj_4|ea@HrHGq)P1!&d&l;`}CMZE+s$Z--eXQ+Ee zi_9=ec9pQS*NQYup%t`37E3*`TL8XUxSdnU!bLz%z*EFmd=pDD!=ydF%B4mzk0BUT z28`bNWriwBP`fyS?#+8=d4cO%`SWJc9RHPMXLjML(YvzJp{)?%pT;L~@KMdi%%v!J zj&&Rp5LQ7d+yiTU_)hFY>#=u=`ncBgJF1g?n8pQwoQ262a;z`y==1b1WGimLk?I1r z9clVK5$6Rkq}^Te@z5M@`aN%*UL{h9;qh{lE|J<$Fi_T>XwP&}Yp<>PouZ{JSSRI; z1g763vA!ZfO_v_Yb{h3d?;rjAjst^gZ%Aj|Mu2q)csE`R$*^XYd|sEfI=AIotlhTu zx3nM&CV#4k|9u7XsZa6w&+4HGk`Zi)<;Bu8FMSM_m%59_DS`D9)(^gyHq9)Nm87W7 zGAe}Q%f|i!6PFMYL)YYF`ZIM1TT2!|+&E0R|IBgr86JYIj>ALp`5;ZVtk3q;RAtNWUF$4-50c@nbO?M@b znV&to_4gikbdcQgdc?GP5?C^+q|F zu*7y`+tD67%RduOhjM6v0})V&In7#?gvo!PDq`ANR#5Kd0u^c>O+8_Hxt zPWG?K-ep+6dq#JQsLW!eUEV5jlO1-oBs$n`Q=(+%lz4*`3c5Bt~dNAXQ*yJBCL03T&elxEDRB(Gh!4 z{I5C+UD$SQp4MUYb!M@fIj3M!)Ypk}q}tSnyhqIl9X$1+H1&{D&zQlnJ`}8bGuv(G zVaHP!Y3P}gmfJfTD@g{a+0OEoYp3_Awws6UwVmg7%e)L~GdtD7neC3onVrF`HM7%p zbMlQFQbbx%q=(qYU}knk6z4fun7XwhNG9urneBY3jVLPzW&<{Td+Z24ogMq=AJzd1 zzI}OSkE_QF3;T{1qeHPH<@^oR%=qV&$Y>jtGu6x-Tq-ElVF$gMv;z-{H_sdld|1)j zjnm4JW)g-KA#S=CN4L5$qNyZ4z+TrGp@dllQxJ~7shawb@>S=1MLZ46!!e6eaJLes z#E@&yFUt4it^DgeKqg03k|vJ`*=ZIk7^ud3b#%aX*RiKZwc0Y0Ibz#(#y~m3&=}$K zO*AUygpQ<G)W zhD9;Pas;A&BQ(Xi(9YB~@~3?8ks*xcnMOtjfO>Kb0?rI;-$W$+41=!Dx5S0JU0h&6 z$cfd&j<_S(7D0eFj*)AP+@8jyAu&bNUS>|lv}y^GHICJjv3$;)im5vDYB_g`Ywk)V zxF{`5@@REA4Obtg9_u@iA2>T`Y+f2ebnFD*8WPTM#r#T8sP0Bo1|dKfC`NZHT!37* z5yv%Nl8EQ{Ny{EehHM9j1(1f1GpggQM}&42g~B390y!v`wr)gsEObOB1BxPoyGAf? z*<~ZP-`w)x3U%t^g;r!pP7c6e5RE7e17c*rj69;8btGJZRFWc5G zs{+!6oGwRFzASWTwldpkD#fg@fN@-<&Dur*wfbZW5hsl`igfQirWwa>Qwn zohF{`O<}S`VN{)TYJ3ky9bFvnr}FwR4P#90%;>z^qdOZe#u&rZT054S=FX^s2oUwC zn2_?P9u<&!RKkB-&s;RrO)l!&C=kJ)|y!#RD9usePkP9DA?x!bPz?tREU0dRopyZ7+zOAlP3 zz~}5b{{sa3Hwt&9(f7uZ9_Iefuf7dhe`2RuCkTjJyfobY_7>YVZ3N|hn-~!Jz$+0 z@f~St2PA_);xcLQ>JiUx(U8MshM&x!2qJ!DSla;}Vsou5+TiwZMEt%aJ zCug%e{0fL88o#!~*N%O8%DH!KVXfFRyUTNZ&-bkhqB#apWt+{cwy*<`W86as42F@PGMkYZ=DSgiLFAz1EbcZmr+p9%!g zV%%gAX)vzGI1xskzeBc#m;}Av-BQ{|M`c)&L36aG3n!gBjgH5f1KW$8D~*2CkK&Jx zW^`>ct$HaOM!B&N=X$Y>FqF{HM{9nYwkiigCM=_}d)bE%W=A5+r|XnJ(=G}1me+=b zSBl&NVt4mStGp3}K1*<8D0+#QH)Lp2lUYrOd|VM~T)Tw{20+WBkH&b)pddstMl;i# ziqE`Q3BYZ}30~S;)lTwJU_`{MW&`N#;Ydk;WO(|qGU&TV9gv36P^YGz3OKMTUDL8CpNaDGlw^6vlcBqF2B9%7a{)Ys%$S0e*2c zRG1SZpr z1iYq=*fyitH=^na;VNZ59y^jJL*w#hXgqlPL=&f!vidW4WhldOswA4M>&*oY7g*%hWUJ!&Dgvqu5PkR3UL4s z^?Qvnj@UxgK*?r(VJ0aD*p8*{@66d;?GIqZJj+2d%; z3Z~%bq9Kq(wHf`@CJX*vmM=boBk21& zw46!?28+Gz-cJ?KgsG?itAoB#@n*6*YaKOv_Rl~~g^KKd#7?D!9<46tD->J-MVyJE zNMfxxW2ugp|Chb@0IMR|+D4n8AR;Pb77=pS?zQwXCLW>AT_Me#&*-_ z?U0#+X<+GSx;g!XYT;Yy^hW||=3x4r9?E{B*{?bMPCNf)N{&w^cM&D7B(qxMlNqp$uo!MS7^{$c5}*}?l-L2}6=V|`@+;_@ILx1nmr>v#2KOpg z$08zQ*Z2}zsteLQJRQrpD+%R?7q@xqdI<}d=CB9&+tIliHIN0l0DQB@&}Ek$pDDK{rF_yhQoQyKANE3~Fx#ponmFg|)8sW) z6@j~r%^g$7L;YR7_#PQGf*RI5AQn@cW}*j+4?!JC*^EpH$$jq6ZZZL> zU@sx1Y^5JaOCW<29GC+<9f?Q! zGs-A0QK5-LW#6RKqjX9=g0)1yGs+kwv_rn2LQ_ihQt(d-D>Ruljh%)TDu&M-YcFFt zZG$>2RrDi1;0bYDhHB_xus+;U-LaCEnqZ};J;>iRBxFcrXbpTZ+}nrVP$VB50(SZe zU8$cn^bnuXZbE7$vW^V}1SeVlp&$%qi#(?()A9t&t`fRQ{U;xjl~k}gv6J!`(-RYP zKp-5N#H)0qFDMU~_mW+zT#&s<&aT$LN7AH6B;5kJVw5>Sb?^%;9SKa0j8+PC;g)(U zEI>ssV0!rDl|vu7w3eRs*kBJ6oSCQy4l*DEt}A@L4wP9-dZ_{P7M6EU#(y@4(J@;G ze_AqZ8Rbp%oAmK%$@OZfSE-$Hklm1$fvAPAzeo$rO-q*OMJmZC^dqQWhtO@rT%ej` zO@@B~hA6g-iecC(O%x>379(qjg;%8)t&BzlxwCJ+s}CAM$(-s#y9)xA+R`2>lX=MT zEg`j`T6B3BE@N5H8XN&*gK=MNtTw-gmsD#|jr4LVyQedN5Tp* zvJ5n`4wCx?`^em7^t!E=+%*7eJ@HR0Ri#44))LCP2|_af&z>703-k*0uEvi|R3(6O zJwmEcuuN_QY=nAic*;ZBZ9?u>w+BVJ`^#|KU3DAC(Ps}C4UoI5Fd$OT)rU##*WvwS zPaBPv$$f%6zLY=%wRu0J6~)3rf<<_or3x_SI>SQ%SeU!F%tJLOmB-cE$0O8R-Bl(5 zg+?pi#7nqzGgx&Kija1beb?&O=vYB+-qo%++AiBL=RkZ_VN4iED4R8xV+jyOrRi~r8WHi)7RkFXDU__Tk2GL48Kot$6KOPJUqq87? zE1zJhYNV()ax0C!~M4~EHCO&I(yT9Ux~ z7wt6sww>=g)dnoVo3aX$PY9FgN)JgVD#~$E6U?aG4=Im#n-Qdv{3~_2t`d~WJ+}Hn zm~LvqfPYl|-$}$ef6<1uss~`z=9QYTvHfQ3enCibt^xn>S;4tkx{9aS%!rMqu$X$5i+?*FYPcvXoNL8c!}YG ze^H>Tn$UWHyL(tbm_Jk=50&&75-5{I}}CD@gprG=V9fADY@ECo`zP1a9|EcJMkxMotR zy`E}P8yHF`nWPrqoJFU~7=KTbL4Xs-lA;HN z0EQB^0l>I$tz0OItB zs@z`nL7^tfi%J;Lb)c)EQl%a&lLz=fmHN`B8uSFe{Nc&%UtE!!$AUcph6o_KxIyz7=g3QaO;$xErwWIh2YGmLCx_7!sa z7LbB}S{7yWcy0-|M=3P;#UTCajNZJ`!!ta6gaX)b#wx8}94ReMYN7%8u~3hJ0j<-6 zbLAO>sR1+J6)C>?M z1`_dk%e!=>T+|JFTGUNpK|gJITnw>%^cS{%`U<)}8b2x5@RP(6L$Dl>P)ne)DL2V; zMBz9D@w96zI#R(q^oTbbAPZ@LEa(+6MO*1V`G6H|r5kN^1Ogd0zCx%jC?hL4ZlsLX z;E>sEr>x9N#PoKW+?K6@F1S&*hSio)JwX7j|I0U=aXWAvTS!Ms~jq6$HPz<2-e>_ ztfwh=m_wB%7w~K%DddkD5^v*w2Tb_%H5Bfyf?@0)^5qn+2U4PC@(%9!j3{|9m*``4 z9G0sESm0Ep_#DwP!h-0Jc0F21u{*+rs9h1QpZ*cvGIa7EH#1le@WM2{^`)dGZ)wE5 z8ybP!P_N`6i9O-CWd3GQ5Ft^~ zk{U-VG%8ckM-Peiq+=#&EOfM0v`QE7Abu4K=obWr-}EhbkzV3Hq71eeoWwE;Qy$)C z6vM;YX@WXG%;=`hi@?*Z(EM_pr7wV7;7d(Id*m|2TaD6A`hFlpIs0s&9(KfI`-@lN#05Xi($dF#2q9$=wJn2_J)s7 z(NaJ0H7@HXKF2i*ZYazo%E0e9eANfsI!%-wUm28URm9WYVHy~%ip z!XMc22(v^z_=YG?9AH5H#NHlP45q^IDYVFeVg!lR_w++c2d0#>UcG0(Y|+3JDGHp5 z4`L%hH|0HE)5QT^x=m&42quq{Sf^!2>Lg?n0uKu0i(jds4p*@VK&63f^L3-!R7{j2R24Wlg45qecI|PK_X>q$<}b!<^*6 z+i?ILK>X1+88GoEkfBX-&j-z-HswVRVGR8=eY^3RRS5P-zq~=iwrEY@N zA^;29*QBlFKHlgamdZ#qP0K6A5A5ky1h z{L!cbd%!_z)Pb_SYGJg|RxZP9E^iT3hK^(4*{JjS)1vv&j52#R(&+Ov z!1;_a<+&tu6)vo87pZL*;tOesoEc@MOoBL^CD=^9R^N^z|W@tw49Aqxb_- zyGXh6Q1+3eFxrhjAobOQJ?bH~hlz>$st^!rIY3RU;3KVYP#w9bjy!bPCvq`vv}Oa7 zS03%Lumu9?MA>|hq`ksHxd*w@NGqh4S4b_d_%bD?NS_g7Wq^Fr(xhWa!=gv&RZM{rx(T)3{jG9gVWU7_(@zy$b+x}yW@0PGEK$Gc$M;w ze$p0xl;A-}NE1m6)02+$^pobY0mJH!q%bhWi7uqpW_V1k&6Qs?z#HOwkge1**Md<- zLZoz=uLwZVG$cy_!Ai*LDc|8|VKxM#k)KKdH=Z0uCsLXg9dQ8A57u6#y#xR*Z~$!bA(=@^ys(1G*66ZSF)dsgKbIozmHz)^REw|o zLQ6BSKNfM961Xzxy*pOC23=KtcW)~%fkIo!3Sx0^Du=+Vz7*o-`v^5b9u^`q8YT-> z#ZoQhq257WL4mIRDz819u7mvf(vab<{s_$ZzzrdDMf46~q!1&|ut4@rGb4{6S%^_! zP^eLWYaqUbU=$2j5-vsrM!3p7i~@qlc?W+65`ikk=GixZ(f4nL zg=Un8$Xv&})XG|vJF1OM(`?Z~#S~&Rsb+-hX`EQ?00*XB(iY;iq>d7yc9cF+N4kOX zCTZ)^O-vQUmC{F4Q|r=6VuF;%c?1i!BLfqTgw%#odT3HZmL5v$J0Jm|#z;h=2;)-t zdE__YXS|9;M9Ds)nwU@zkzi$cjgcW<+!csGqK@)%r%{8d;tqEFCZflhV}kr;?1x_@ zfu$fY6$;ing+iKL7SLrhh;txt%9CI%W#Cf-)%#>S*ccCvITN)Fdv1o~VC3rK zLtKF&p7@5V*MI=C zkg(u>UClbtPP!L{d*rYS2>VcN%<}Wy|iDP=e4<}T@&)QpRJ;F6KRC&u9<$gjreb77uH%I~( zg!=8JUs1F!iZT))Emc3Y70VM;>>#(B(if+%I83+Vx5AT0ZzeD|m8M{XmN~_;&#q&{ z*;fQp+o@?2;v}ksaOzTk+5Aq9&+@@MJX&rrf z85EakzN1C2a7b$f;Xf_7inXNpxB1x1N8_X#^f4qTh$`8I7Fs&=avsCFa`y!gZT5Mz z7|1z10h@j<`iCQJ^=8!mH;*w{!@j6yfG^09ItfZ(ZQv2ENGV-$o$!hwR(?>pW?)6e=QhTI>n;>3|kyVW&hG1zlybzC;csDs%R@pEC4!;m9Vn2WiK zh#Xi!&Ks~oDkWA4;s*qC2DnmrhgvXT<)2qd@uh-PNcF}OJB0{VGk_h5ls(cP z04`UNGbj$ActDa*S^!CUoFsRO3Sep_VXpLfLU?TGiFfqFa<}n-qL9w8Y$rg2+lY;R z4ZM`fDyejdeOLHP2}x!9a!yZtRYMYUq^oLV-|ziW9BpP$QfP(&$wHV6cj(ongt-J? zMoa247Eu|EY-#Fp5(PanSlT*%Y2?hM5*g+=WMj^bsH+(rA+qXXZ^8V3RDfZPGUGE$ z>4!OGGMG08Cv;Buvtkc-Q$B3P9%eTQ<>dFt=&20GWKfU>Yw;7@%t@wPq2GrZl{~TR zP$Di1R<8x>Wfyspb){APX@zR?yJUDM-_>AA>eLvdZAQ2Hzy(nxu)wn5*+m@bDlIg2 zx$;j)7GqC73^I#}zQ~ERTJo9H{c%a!YZ&9#ELBQlhV(l<=pfLIZpDA-RWJoTK z439K}J}!&RHy4*y$X;T+2L$CQ9e z_@8u*{&Q)Ld-z{VsDfYBts2_R@D4aV#j0dLfqK|i%Q<|EOc+T)1C>NsRqsp4dfs!ghB zVX5aPRWS7n8nl=wls8Q4_(QrQQj^u|S<796M+F5AiF8M<32Z$^;!ag=rJ2eI= zat%#J4Y3*&B$o{c4(>Q!CJ#ZOzTursO^|J5rB`Pt@;+q|NIDqo6B6w28Z`>1)#wo; zDuPxTTFKnKE9F|@(4?c$h)@p`0jnwtT1bYFxrWFD0m*x92L%O3$$h-MLyfwacJ74~ zfge5^e^gC~KVacAl8U&6`S^Q;7`X=p1pCV(jRJ7ZHP9y{z{oYw!zjc@N?Qpr3iXyL zEnOodDgBD25lAI>M>V3WjO0OXDD5f_2*Cw+cUXBravvDk)MmIV4nw1if;{;{FvVGwgeoI#?WgmBZL$ zSLu(Q5(MOSee)+>*g_9|^(S4oAT#%?KV=0*UtPqBbbZf|zqlSJ2(NztkM_my%TrB8 z-}PIn-vi|>Tx$#7)LG>paE5#fJcAAS%lO4#rTfx_?|)OKOcn5{Kf%k(x3!bA+dOAy z_hcVm|Azhh4ilCxU;O<8$}3y8WDCxYE<$8@WNjZGUmr&&=WEtB_7&r;9ZK!(olkgp zc#V^Xgz0#B`w35=moD|K{q7Ck+^MOQbOIBvY1 zXk+8_!QS5GcTbs5@1(>Ojj%9`GXCiK=;&xu`Gk;_0set+y}f)y>_tU-hPZpzZZYTZ zVKF*7R|6 zHj1ZCof02Dd?=ngc~ac8IZF(dhltkJ4&wOn4x*!j+dOI;&)15Ins_=aG+Yb~2@`{Z zCWrw6fvldClvMH1p+n;7)2GF|ckhZPPMkp95v)JJ$*Q8ePu0@X(`&`X#-5Ifj1t4q zF0~y!DTcw~=j+evn>jOGym|Acc=_^WF(o-ww6(Jrot#}(zPSHbEh8hNRziH@Y2ZMd zF=K|fXU|@7)9;(a5P7IbeF_W+5`h~rH#b*$9xypOxrpxW9xLxXxUDv4&YW7w$tkDf z;^M_4M~;d`MMdKF?b}7_4{h`;@WWtVwQ4nkN9G|Dy*#~F7UKB@3l`LxI(6#lq@*O^ z>$Ldv=~MCi`Saq!g$u=rQ4__`&@l8XLX3}3V6af1Fvh@-|H?;2_t^8m;pxefCj<69 z3{Us(-xnV}dL-`Lxl>G=ktT+RM=;z{e;9r-zCl63s~$bOr?z(+q=q8V-pFH}cJNaz9@zgxF%3BX}@)UjdOv}x}N4uwJ?ZrQSh z;q1nZ8{+ci%SDV4>rZ54)C-K&oS5j?mj1p0!poO0>3ISDt%m2U(3g|g%BD=2BF>sM zOPo1#ChL2AT*61-U|Vu>viY1jvo+D4iU;TbeHGA#Fn8|Ux~L}vb=;;tp`LPV=W*-+ zn%12%d5Uo9(xtDSt$c$13rCI|QA69E(Do{9Gcm@76DCX$HvYb`a#40%)*o^R^6W4K zW;}@#Nu+#Nj$Ob#Dnn)InU8q(u&lN)h2Bk3{*l~ifXx(}O72v;uPpX2cN^Dc30=E) z6D9pOSuEX~BkgdbJ$!|Rh%rw9w@FVqBW_4D@j$#!sbF0r-zna}N*ijGzf2t%?5TEm-iw`uL4it5!;KZc=pXz<|IEPnp+qcQ+5l$Mz16 zsM7&$*h4PS=0LKN$6 zgC~eH)6$vDrTYK;^H1^Ev18)Bd-udY{`dp@KU+k~w=^!}97J1N=YqfhxnWSCobftj zrX}P_DUOwDOy~-Xo)xn^ip|Ts2%D{a8R&#@!~}$mkIv4 zbLKHRrup94#kC+LL~a-o5(1h`5vEO@W(m1j8XFTUf{w&Rix#o5q;XueY84w38W-BA zEjA{opT?ZV;M}=$tbXDZR~I+Y&CR_aG&IyOEG$fboEIR2EfW)xN{Ln`r%pz{^F_#W z5p#mL8gm_=(`iq5BYaU?kiX*X+qcDaYuB;44g4rVXCa;`2oDc8jEIO3Fqa6J+bvU4 zQc4pO6UC`hr-}FO-V>icf6nUPuwjFUa_o5;Um6dpo92I-domQWm>$9Th1!5jDVR8M zq9O1tq@|?^knxt78%i;!u(^-=O!epG<%!p?Ul+G--6|#~B#M!dk!<{_4cds_h*t<- zwDCFF&(FUAcs9hQsvl!qN^>IG6Z7-)#TPGLFg~LBxwyC(G;)@W3yl%gOLINf8)!^u z<9rGEQV1YJvvjEGc?4Ig`I z1GH5Dx;G@+#~dnP-W!T}^c~et8_mf$7fDCBdi5%UpY$>s?|1LsF`EA!vLQY`{x92r zT)%?xY=}(&Eeg;JbTIcjfsQT${&MOAwL|!tJ$tsed-rbE4$%trh4iyxN#%X8RpHKM>@kY^rIMUsc=SZLY9c6 z;}Jb2K$nBgc@KDqM*kaGSy>7D_wVP`{csOmO<1#LjTT`31^qdQKB&f?#)jHJpNi4m z;`Ev6#zzkyQv;9vu)e>#0UR^l11;4CY`$pY8v0X#?GtEtAMjwYdiCn6G=Be+Kkz7< z>!AO(K|8ZiZ`iVB%k1CDfckRjz0bVU3HZHzSVDJQA*hnMh&Yo8# zHD&UDRNuezPy*(lc?%Y51^5RKcXD#uXKU~H33K2JcQ>y&ur=EjK7xI)blJaC6(_VEo*PEM-dtCyLOn|uBr)%|yc z_U)B;EGaR$3FK;mr>EC_2L~rMH@CRbnR<{_u9%Z@F{hSu9hBy7(m}~CB|Q}S8q=o;572o4m*WRlSJ@`H zJgoPsRU0&B%*go1AkaLwbm@{RkjaB51W(un{q!TvwaWRH&FfCEXPp28&C!0C&zN3^ z@fdGy&)Vnuot>TYGfz*S88OlEEeQ|VS(|?d$NKf_g&Q|-s3j+*bU>dM1_cJa^7WN; zSDK6YMtTM5Z1d*L7jq8fK*s+eromo!hVCqlfs>^F0T%>^4RGV=;Cj=`%ReA7G4-ck ze;xakynq}RFc)C{%4mRjI1)aQ0zOZ3J&p7z(xGWCU$S_qc;fg8=A$4#1L-fMzh!4- z!)}fg9h{uet{u~JxqZNOcV}mh!vX#iM$O8Yt2H@gD#OL5O`C+`x3APOpU)?J()>+& z&$s$D=?pWb&tSR`>0{(0A%6+!AEY~yzhUp*z2drc>qYRQIF9Ms7!xHPXg?nKu(xw5 z4hoR}B6Ig)?PLBGPMOeq|a~|XkS^^ zAUFsoq@U4vOpKZYpV0=Uw~$W3+b5lgYy;9^NFR%wI8n5*`(h7*9?D@q*@7lm`&n68 z!nt#2HQ!aKGDa@%vB=Um0Vuf+BuZ_`1sp8J4yWqjs)oM8qh5^lh1}=AlpK+FC;yg@PPS6 zgd9}SCD8)GLNIXt2!rp5Yz>ZoYJb(r)gs9)N61Y(*fp?e$^!xdY~9@482+jK^B2x( z!2Z}wIxXo@q^l7eq_4y75lKfpbLK45y=Xitk4a^GK%ZuO@$A_%hJW5Z$u7bH$q4x3 zzG{Elwr#?Ni{~{`QzvgGy9D+Xvwg^hAo?OYBKjiz6}}=ylf)x57Mxc&4CIHTHhKG} zPoH7^CmWyJM37(QK|w*bG8sZ^_#>V3!lm;XQ>IMa3>{A-7~tz-I{xd|ufc{CP87qllDO3VSo=G6><}(q zx~KtNc5_mqq;C=qmM&c;zJ2qS*&oEy)c^V5Y1muLKCa9ogbOw<6XdM@t5>dy^XATH zbjfLhVDR+tBAcyTE|=SSdwa9?p|cCnAvG}XYz7T7otNx^<;#{shyS{L=*?_wh(BoK zK3qN?swhzbo^IBs2U-Zj^(rZNUTIwNE-ZZG;E1naD=s z@|EyUvi|-1_iVnQu_bt!ui+cH#m9r>6>Xe8C7k$|gSTx#gR1r+J2hZCZ|1fR!2tc5 zjV0NIoc@Wf2q%vpKV~*B*`k=gnEghyNOpB(M3hQ~6CAWvh54+}Vl&b72DV3>xso>Xq1jyYYxUS#twwMA{y_Tj?^hL>~a&WlTyEMa58 z9{wGB*n>Kx=T-hA{R_H~2K?$hKnoiHhsuuU@DNT29~5iYw{IVl zjYJ>Yw`~{UCugz-_Am4O6AUEBX&%A;E_f#QTufa=;(-rB)pb<6Fwf@N; z*|bC-kO6h!R|rA7x2f;EeNG!RE(8nlD~-Ekt0w}6gin~y_5sJkAhW8H9sZyE5pTff zLot`O;K$h*mlwQkjuQ@p5{?R-|1o1mntSGo%v$g>3ol;0{7;(x>KW3}Fy5M=uYrJJ zCt&zU?GslE3C6L2{pb`H++^7z!3w1W7xX1Zu_PC4D!)Zb zocv$-n=@~|usm~RwdB;v=F`(=Hm4@fU;Llj@&9emH~*e3+`5^s78jdf;_c(N#Kq11 zg`2y_g%Ej|^MZMc^g=@-1kC0CZ7}}r`mbKQ&Ynq|sW5;~C&tOq_3rrbh&REnKzmyo z$B!}(pB)hqQ3HO@%Bqr{G3(!M4uRumNL>)eemEx7Kf(z8QFQrZDHf#1p2bZIFNsn zWK?C?D<4zNmz|ySTW{}x)rkqo-A|r4rM`Og+P?x@fL}oXz69u()!^G416nx(KSC+D zSO406mi&KY%aV;n{-sNoa^df|&SInFmn6HixcD`LpZtLrFI*DWtX?ZlKt7q1i{vLJ zSwytMa~^mfl=Q^ z?;$_I@#Dvte~9qT;ip(N!B4g-+3u%Kon$s6H^)DRpZx8RY0T!OzTJQDKs*3mA)C_yIYGn|6pJC5%4v!A zD)^Hoe+NIs9*jGh2*?La<90grf&2xPH$Em3%u)^k_c2jle7vPN3GoBv_)y*>@h|x) z{tABT8~L)xe?W15@^uBmhm5$IYThHbSwA@blfK74*{7zRI#b?D8pQ?3C&zsr)DJo) zm^l2*{{p_CF(A64bD|~c1NYI9tR)`<(bWBW_nAMN=%+INIsD{R*`-JF#r2B1Ec zm&J4sf}b`!CH;Jlf8;+3UAlCk+>|ut?}opb`4+>z!~v)ed@P8jcpvDP`atkk-ng8l zKF-RREgn5`jO8H^|8n~I7JkZM+PPyF!;>v?i?|*_d_nvn(f{}G6aKq*@6O;SU*yDz z@Y^HDfyRR9iEou@ijM{DsSiX`oUZs-5bS(@pfU?UQv^Hte29Mu{s*9cj{jrFjx+eF z9XrHYSge8Klh~*a&Q9Rpzo38ADfH^qi}DB3D*KCA{tS%;Haf0MQ#2L?JHJL_z~Lvj zsSk8snWl)xDYiuZGxDQlh<`c$IsDX)N}okP zh@WZm@bJh7?1q@9zJed)DfH^ui*l*~Kk`_R%YqoF%8$zXLgRoOF6LJwzw~M39a9XH zo}sbeG{t#?k4a^|pkw&_MaaDG;OF#DvVwG3Rjh_|Lg?l0?(X?1sVU##pWrv^BjKOL zZYUQAzJKZirzh$I9m6lhWF5&vis_Kdpu8XsKkYexSLO@q6CVp7Zy%QXL-PMC{G+a& zJ9jZXiga17qfCK=-=O5K)!q$azn}QDfNNnM8&Z<3dK!6efq?Bj`V@b@Kcj3|pXi5t)+Aqr&JQzR~c0N^o<=_WZ~H*kD8@$gPh-yEC!VIQ zq@;w!o=E4XSOBLblD~AU;tlWx=WV)1v_u={3xb{ZhmQmA2idELYv+SU|0Vpq54;~l zAAbiw#qMaMz7b8)dn-hDG+!`1s**0n>51r!Xotg3dy=z!HOhA#9}| z;-6sU8})-|3G$ZV`CIwJ@z3F>7%|u9L6fRDAmeMMmn+92G=k;L@Uf`e5671&sss!{0vuyc7CE_=gT1O8h&M;N@@=%p88Y#_5T86#2kx zJP3Y@9aA4T{Se#)Kj#^WbyLipu2KF!%_+pYNejWHp<;JiWOK>Z;2`9^)fI{<$P zKlDDq$H#~Ats^nFvD{=1H{bI<(K+!o#ac0suv{m~GvfS9^#3jVWCK&q0@oGDexVpH zje#m}LOB-S_JPw9^#e3`8Zp@V-{vsG-$8Le0r^R_K<7S~Bd!6?3JyE%3FrKr#({6t zFVabA9wXkM?XTb`{L^~|Wd8yNrju~}mf5Vt8?aaTI8^QjXzMlf;zjA{iVpDYs*%6p zul_I(F~28hqd90P75IJ3VXh269}DUOU8g;b3E2eX`yt+-JeA7yLw(x3X)~J(3GZYl z(fmfo)Q^eaXU5x%zsb%Br+M%b^sha5*Jl{);;P7D`zx@&yGHgT-i6cvJUzkh>jC3i z4l~~q%+xoc1L^~(DLN+kPkIr-OgSB7m&`(5U7XT3BHf(x0Kw1u5EFy>0(Ks@3fL5v zfj`f+YuD67JBYtO{|?T-yFfm8k})!6?rW z^jrn)m}4&Ag7GNfeW;9g>KpZi`oYJ5?`bR`e=E?p>(FQXHvPW24&~83dGhps6Xidw z3-b}Z10*2NN*6rhgz>lp*eT~lC1d&6(4MZ-IB@uJ?HQg)!?P^b1-tr(ZT&ZIKt>83 zI&=^=Y}n8QypafAe!$_a3_l&yhCY4(zOyl3m_fhOq<3NdpYTWa4`ih}Y`@tI@vE9MgL}G4l*t&IV zp`f7PKdt`%%5$(`1k9%-Z|lOJ?}U8CuF!kbNXPnb{E1>&9HuIa=j*1@z7PpabdDq@ z+9TPB?J1dw&R-)5iS~yDL5ubPN)10KCg7DUypx5$rh-sNd%Ww;_FDh%-}8QzQNPen zbeZ*=@SuSc6<#==INmrOSz;KLoHC3o)B(W8dd&}pQD>T3+Q7(9lu zw`juxQ-a_iU+*ah@xt)I1FRzRUX({H@xM9FP`CeMt7l6Fg@su^jvQOC@bZjVM;cUj zb=Bz9;BE0jqr)z`+Kn48zSO|KEbrs?2}1SR{>dE^TQ63+q?JY zmo^=L9&c@3vOY8O?mBqnVoTn=>vs9ptx0$0+s^Ay?^T$yx$Q5V;@%C5OGe2HEu(z)sX=eCjpP}C5W6lTgcE%+?U*CT1lWi{Vc(d&F_*rkR#EyFS`1w#I!+K3Rte(ql?ey z=tD(^(zea9Ijd9HYtF-mGVev#cW&SQwtJsGed7F}6S_o1-0*8q)y%M_dVTb6}J&u(}G(kuJrv4=eUxy zXQ$1xXj%C7Q{nrGnLdl|FZWqgYoPg+ZmUhz2Cw?9W2a6%`cC@rys@X3S6qar=c8e| z$DW88O+VFcsXw*o(6w!KY|qv^Y&?Hhy5W)g#XE*I&&bI+bg1IJpPye7sF=CkYQ*L= zUF(y$xOkxU$LM}m!ur0;yN$%h zP5qzm3)vY52+c|cPO08x`Jpz+TjDHR&$e-Ly8fZ0 zBqtIPgaGu-xt8AK{`JyNi609Kjc(@W$KE+MW?uDQZmRET)um6L=@&1K3W$xZ2+-2f zD%gAQV0m54{ukP`X`?4PX(xDesW$QoaPHDz=zx0hzdR|`taJU^wPpr-uaXC5*6h)} zd--F~rBC{)kj`mi=lRVA8mhcGQZu$zT*W2v(?&RfOE7U&oPYMrS5dE%0D=bsu5`Qm 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 N^|jI31{|Ee1of`lE delta 187055 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 f^0!9Bjfm!Lz2qM=5PuVwgLH`Lg>jwKpf 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 diff --git a/App/HiNc-Resource.dll b/App/HiNc-Resource.dll index f0c83614dc7db4eff86a06b99cd0cf7e860970db..763cb63f4490affc1098bb2c44a411204a9d74a1 100644 GIT binary patch delta 300 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%0A&;v!M@ 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അWg0}^bvVMGa3 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

    $D0OQzg|NUYckJ66<6t(STf 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

    o?9gbz8=QuN)*$W;*Hl%N~ViO6??13lx3m? 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 literal 402944 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

    WVyecQOx4JCu!*@BP3nS4o#0SyBE*Up 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%0AZdx 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

    179OCN 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

    W& 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⁢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

  • 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 R*Z2C*0{;I$|DQhs{|7re!EgWo diff --git a/App/HiUniNc.dll b/App/HiUniNc.dll index 1ff63e5b84bd92103abc41da7cf0e094ab69ab18..8b8744544ecfeacaa93c2fb4abae1f3f8ec18aa9 100644 GIT binary patch delta 84776 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 IcX&SfKR-y4TL1t6 delta 84296 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 +
    +
    Extension Methods
    +
    + + + + + + + +

    Remarks

    -

    Generator functions must be added to Generators to enable the factory to create objects from XML.

    +

    +Each XFactory instance owns its own Generators +registry. A process-wide Default singleton serves the common +case (single shared factory across the simulation pipeline); other instances +can be created for test isolation or parallel pipelines that need disjoint +registries. +

    +

    +Types that participate in XML round-trip expose a +public static void Reg(XFactory factory = null) method that adds +themselves (and chains Reg(factory) on dependents) to the given +factory's Generators. Boot roots (e.g. +LocalProjectService.Reg()) call the top-level Reg() once at +startup with the default factory. +

    +

    +The static Gen<T> / GenByChild<T> / +GenByFile<T> entry points always read from +Default. Callers that need to deserialize from a custom +factory's registry must look up the delegate via +factory.Generators[xname] directly. +

    @@ -156,6 +203,40 @@ Class XFactory + + +

    + Default + +

    + +

    Process-wide default factory used by the static Gen<T> +family. Reg-style methods register here when called with +no explicit factory argument.

    +
    +
    + +
    +
    public static XFactory Default { get; }
    +
    + + + + + +

    Property Value

    +
    +
    XFactory
    +
    +
    + + + + + + + +

    @@ -163,12 +244,13 @@ Class XFactory

    -

    Gets or sets the dictionary mapping XML element names to generator functions with relative file path.

    +

    XML-name → generator-function map for this factory instance. Populated +by each type's Reg(this) call.

    -
    public static Dictionary<string, XFactory.XGeneratorDelegate> Generators { get; set; }
    +
    public Dictionary<string, XFactory.XGeneratorDelegate> Generators { get; }
    @@ -199,8 +281,7 @@ Class XFactory -

    Generates an object of type T from the first child element of the provided XML element. -This overload discards the relative file path output.

    +

    Generates an object of type T from the first child element (discards relative file path).

    @@ -261,37 +342,29 @@ This overload discards the relative file path output.

    Parameters

    src XElement
    -

    The parent XML element containing the child to process

    -
    +
    baseDirectory string
    -

    The base directory for resolving paths

    -
    +
    relFile string
    -

    Output parameter that receives the relative file path if src is a file reference, or null otherwise

    -
    +
    progress IProgress<object>
    -

    Progress reporter for the XML parsing chain

    -
    +
    enableRebase bool
    -

    Whether to rebase the directory to the file's location

    -
    +
    res object[]
    -

    Additional parameters for generation

    -
    +

    Returns

    T
    -

    The generated object of type T, or null if src is null

    -
    +

    Type Parameters

    T
    -

    The type of object to generate

    -
    +
    @@ -321,34 +394,27 @@ This overload discards the relative file path output.

    Parameters

    baseDirectory string
    -

    The base directory for resolving paths

    -
    +
    relFile string
    -

    The relative file path to the XML file

    -
    +
    progress IProgress<object>
    -

    Progress reporter for the XML parsing chain

    -
    +
    enableRebase bool
    -

    Whether to rebase the directory to the file's location

    -
    +
    res object[]
    -

    Additional parameters for generation

    -
    +

    Returns

    T
    -

    The generated object of type T, or null if relFile is null

    -
    +

    Type Parameters

    T
    -

    The type of object to generate

    -
    +
    @@ -367,7 +433,7 @@ This overload discards the relative file path output.

    -

    Generates a FileRefSource<T> from the first child element of the provided XML element.

    +

    Generates a FileRefSource<T> from the first child element.

    @@ -517,8 +583,7 @@ This overload discards the relative file path output.

    -

    Generates an object of type T from an XML element. -This overload discards the relative file path output.

    +

    Generates an object of type T from an XML element (discards relative file path).

    @@ -529,34 +594,27 @@ This overload discards the relative file path output.

    Parameters

    src XElement
    -

    The source XML element

    -
    +
    baseDirectory string
    -

    The base directory for resolving paths

    -
    +
    progress IProgress<object>
    -

    Progress reporter for the XML parsing chain

    -
    +
    enableRebase bool
    -

    Whether to rebase the directory to the file's location

    -
    +
    res object[]
    -

    Additional parameters for generation

    -
    +

    Returns

    T
    -

    The generated object of type T

    -
    +

    Type Parameters

    T
    -

    The type of object to generate

    -
    +
    @@ -575,7 +633,7 @@ This overload discards the relative file path output.

    -

    Generates an object of type T from an XML element.

    +

    Generates an object of type T from an XML element using Default.

    @@ -586,37 +644,29 @@ This overload discards the relative file path output.

    Parameters

    src XElement
    -

    The source XML element

    -
    +
    baseDirectory string
    -

    The base directory for resolving paths

    -
    +
    relFile string
    -

    Output parameter that receives the relative file path if src is a file reference, or null otherwise

    -
    +
    progress IProgress<object>
    -

    Progress reporter for the XML parsing chain

    -
    +
    enableRebase bool
    -

    Whether to rebase the directory to the file's location

    -
    +
    res object[]
    -

    Additional parameters for generation

    -
    +

    Returns

    T
    -

    The generated object of type T

    -
    +

    Type Parameters

    T
    -

    The type of object to generate

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

    Factory class for generating objects from XML elements using registered generator functions.

    +

    Factory for generating objects from XML elements using registered generator +functions.

    @@ -141,7 +142,8 @@ Delegates
    XFactory.XGeneratorDelegate
    -

    Delegate for generating objects from XML elements with relative file path.

    +

    Delegate for generating an object from an XML element with relative +file path context.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.Flag.CoordinateDrawing.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.Flag.CoordinateDrawing.html index 1ef64249..28b86378 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.Flag.CoordinateDrawing.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.Flag.CoordinateDrawing.html @@ -631,6 +631,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box2d.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box2d.html index 83cf5e7c..de1e08ab 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box2d.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box2d.html @@ -1407,6 +1407,40 @@ The Ctor keeps Min + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box3d.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box3d.html index d0920894..22f103d7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box3d.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Box3d.html @@ -1999,6 +1999,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Cylindroid.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Cylindroid.html index cb0cc591..656abc9f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Cylindroid.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Cylindroid.html @@ -788,6 +788,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.ExtendedCylinder.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.ExtendedCylinder.html index 1389d037..ea467ad6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.ExtendedCylinder.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.ExtendedCylinder.html @@ -714,6 +714,38 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.GeomCombination.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.GeomCombination.html index 120ba68d..4e1dc2d0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.GeomCombination.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.GeomCombination.html @@ -559,6 +559,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.PairZr.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.PairZr.html index 6cd33175..3df9a5aa 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.PairZr.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.PairZr.html @@ -764,6 +764,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Resolution.PolarResolution2d.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Resolution.PolarResolution2d.html index d64466bf..ebc5c02c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Resolution.PolarResolution2d.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.Resolution.PolarResolution2d.html @@ -478,6 +478,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html index 332f36dd..69ee1677 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html @@ -644,6 +644,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html index 687f185a..e3dc46cc 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html @@ -632,6 +632,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.HiNcHost.html b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.HiNcHost.html index ca82e376..96250fae 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.HiNcHost.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.HiNcHost.html @@ -1288,6 +1288,42 @@ Host class for HiNC functionality that provides project management, path resolut + + +

    + Reg(XFactory) + +

    + +

    Bootstraps XML-factory registration for the HiNC host. Equivalent to +Reg(XFactory); entry +points that construct HiNcHost directly (without going +through LocalProjectService) should call +this once at startup. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.PlayerDivConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.PlayerDivConfig.html index 555d8212..b5b01e19 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.PlayerDivConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.PlayerDivConfig.html @@ -665,6 +665,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.ProxyConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.ProxyConfig.html index d5bde594..4b48e038 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.ProxyConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.ProxyConfig.html @@ -370,6 +370,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.UserConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.UserConfig.html index 1237a896..430c74e3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.UserConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.HiNcKits.UserConfig.html @@ -662,6 +662,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html index 06918e6c..3bb4054a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html @@ -1381,6 +1381,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 a6198ecf..21685237 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html @@ -1197,6 +1197,39 @@ This method should be called before performing collision detection.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html index a92d124d..32b9bb31 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html @@ -635,6 +635,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html index 46cef564..0220dc28 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html @@ -426,6 +426,42 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Static constructor that initializes XML serialization support.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + +

    Remarks

    +

    Registers the XML factory for deserializing MachiningEquipmentCollisionIndexPairsSource instances +and ensures required XML element names are initialized.

    +
    + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningToolHouse.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningToolHouse.html index dff19ca1..9a2a1ba7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningToolHouse.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningToolHouse.html @@ -468,6 +468,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.LocalProjectService.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.LocalProjectService.html index a34d8583..e1e01de6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.LocalProjectService.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.LocalProjectService.html @@ -2069,6 +2069,42 @@ cycle (they live in the SyntaxPiece JSON dataflow rather than in any + + +

    + Reg(XFactory) + +

    + +

    Bootstraps XML-factory registration for the simulation pipeline. +Entry points must call this once at startup before any project XML +is deserialized. Pass a custom XFactory for test +isolation, or null to populate Default. +Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html index fa7cf97d..081841b2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html @@ -636,6 +636,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningProject.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningProject.html index ab080be5..3ced9fb7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningProject.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningProject.html @@ -864,6 +864,41 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer (and its legacy aliases) with the +given XFactory (or Default when +factory is null), and chains Reg(factory) +on dependents so the registration graph is observable. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.TimeMapping.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.TimeMapping.html index 9cc02568..7c081b59 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.TimeMapping.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.TimeMapping.html @@ -858,6 +858,40 @@ This method is thread-safe and can be called concurrently.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mappings.FileTimeSection.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mappings.FileTimeSection.html index cd974032..000271a5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mappings.FileTimeSection.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mappings.FileTimeSection.html @@ -672,6 +672,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html index 02fe4d53..ed063549 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html @@ -663,6 +663,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicFreeform.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicFreeform.html index d38c24a7..b906bbce 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicFreeform.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicFreeform.html @@ -513,6 +513,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicRotation.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicRotation.html index 3d039f14..df6e6e9d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicRotation.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicRotation.html @@ -679,6 +679,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicTranslation.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicTranslation.html index c9276d17..3082dab8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicTranslation.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.DynamicTranslation.html @@ -611,6 +611,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.GeneralTransform.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.GeneralTransform.html index d2c5d879..4605e23b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.GeneralTransform.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.GeneralTransform.html @@ -639,6 +639,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.NoTransform.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.NoTransform.html index 477820f4..e33451f6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.NoTransform.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.NoTransform.html @@ -471,6 +471,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StackTransformer.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StackTransformer.html index 412fb06e..be08e40f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StackTransformer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StackTransformer.html @@ -737,6 +737,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticFreeform.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticFreeform.html index 0dea03ea..bb142534 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticFreeform.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticFreeform.html @@ -540,6 +540,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticRotation.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticRotation.html index f6c65186..f7b338d0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticRotation.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticRotation.html @@ -671,6 +671,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticTranslation.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticTranslation.html index 3fea8e23..45f242bd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticTranslation.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.StaticTranslation.html @@ -572,6 +572,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.TransformerUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.TransformerUtil.html index 74949dfa..46ce7e06 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.TransformerUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.TransformerUtil.html @@ -153,35 +153,6 @@ Class TransformerUtil

    - - -

    - Dummy() - -

    - -

    The function is for trigger the static constructor of this class. -The function is empty. -The static constructor register the class to the XFactory.

    -
    -
    - -
    -
    public static void Dummy()
    -
    - - - - - - - - - - - - -

    @@ -221,6 +192,46 @@ The static constructor register the class to the + +

    + Reg(XFactory) + +

    + +

    Registers every concrete ITransformer implementation with +the given XFactory: NoTransform, +StaticTranslation, StaticRotation, +StaticFreeform, DynamicTranslation, +DynamicRotation, DynamicFreeform, +StackTransformer, and GeneralTransform. +Composites that deserialize a Branch (whose +Transformer child can be any of the above) should chain this +from their own Reg(factory). Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BallApt.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BallApt.html index 337e514d..b8acdbe9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BallApt.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BallApt.html @@ -545,6 +545,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BullNoseApt.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BullNoseApt.html index 506f9c72..62e4a41d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BullNoseApt.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.BullNoseApt.html @@ -578,6 +578,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ColumnApt.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ColumnApt.html index ed6df74a..4d63274a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ColumnApt.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ColumnApt.html @@ -580,6 +580,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ConeApt.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ConeApt.html index 310a2d42..b5445435 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ConeApt.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ConeApt.html @@ -610,6 +610,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ExactColumnApt.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ExactColumnApt.html index dd8a3398..bf5b16a6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ExactColumnApt.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.ExactColumnApt.html @@ -545,6 +545,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.GeneralApt.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.GeneralApt.html index 115fa6f6..7d229b87 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.GeneralApt.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.GeneralApt.html @@ -1105,6 +1105,38 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.TaperApt.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.TaperApt.html index b3365afa..d81d68c5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.TaperApt.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Apts.TaperApt.html @@ -713,6 +713,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 0867da04..6751e4b4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.AptProfile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.AptProfile.html @@ -854,6 +854,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.ConstRatioProfile.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.ConstRatioProfile.html index 6a9b0d13..7721ddfe 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.ConstRatioProfile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.ConstRatioProfile.html @@ -657,6 +657,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 3e8a84be..497e5fdb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.CustomSpinningProfile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.CustomSpinningProfile.html @@ -636,6 +636,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.FluteDependentRatioProfile.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.FluteDependentRatioProfile.html index 0ef877cd..55dc6c35 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.FluteDependentRatioProfile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.FluteDependentRatioProfile.html @@ -657,6 +657,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 6e849e7a..d9e074f5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.MillingCutter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.MillingCutter.html @@ -2637,6 +2637,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ConstHelixSideContour.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ConstHelixSideContour.html index d3b0ff83..67590fdf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ConstHelixSideContour.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ConstHelixSideContour.html @@ -903,6 +903,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 6ec00994..0b057cb4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FluteContour.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FluteContour.html @@ -739,6 +739,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 061c21ae..5f7c68aa 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeContourTray.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeContourTray.html @@ -585,6 +585,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeformSideContour.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeformSideContour.html index 2b2ad067..01c21e2b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeformSideContour.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeformSideContour.html @@ -664,6 +664,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ShiftedWorkingContour.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ShiftedWorkingContour.html index f1acbd04..ba1eecb0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ShiftedWorkingContour.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.ShiftedWorkingContour.html @@ -747,6 +747,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    Operators

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.SlideBottomContour.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.SlideBottomContour.html index 05da056e..a7968bfe 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.SlideBottomContour.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.SlideBottomContour.html @@ -852,6 +852,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 9dcae947..482c6914 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.UniformContourTray.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.UniformContourTray.html @@ -611,6 +611,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 0b392a32..b2ae15c0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.MillingTools.MillingTool.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.MillingTools.MillingTool.html @@ -1312,6 +1312,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.SpindleCapability.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.SpindleCapability.html index e7b54f77..aed3193e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.SpindleCapability.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.SpindleCapability.html @@ -818,6 +818,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html index de45b118..dc35cd60 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html @@ -1437,6 +1437,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html index 4b33302e..5edcf944 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html @@ -1040,6 +1040,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html index 7af0ec53..ba5207e8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html @@ -717,6 +717,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html index f84d438e..a1428ca3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html @@ -595,7 +595,7 @@ Unit: N/mm.

    Gets or sets the shear coefficient along the rake face cross line (c). Direction is from outer to center on side cutting. -Unit: N/mm².

    +Unit: N/mm�.

    @@ -628,7 +628,7 @@ Unit: N/mm².

    Gets or sets the shear coefficient along the rake face normal direction (n). -Unit: N/mm².

    +Unit: N/mm�.

    @@ -1014,6 +1014,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    @@ -1048,9 +1082,9 @@ Since the folder can be moving with the configuration file.

    Remarks

    Index mapping: -0 - Kse (N/mm²) -1 - Ksc (N/mm²) -2 - Ksn (N/mm²) +0 - Kse (N/mm�) +1 - Ksc (N/mm�) +2 - Ksn (N/mm�) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm)

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html index 2bc1db5d..ca6f09a0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html @@ -247,7 +247,7 @@ Internal Use Only.

    Parameters

    shearEcn Vec3d
    -

    The shear coefficient vector in ECN coordinates (N/mm²).

    +

    The shear coefficient vector in ECN coordinates (N/mm�).

    ploughEcn Vec3d

    The plough coefficient vector in ECN coordinates (N/mm).

    @@ -319,13 +319,13 @@ Internal Use Only.

    Parameters

    kse double
    -

    The shear coefficient along the cutting edge direction (N/mm²).

    +

    The shear coefficient along the cutting edge direction (N/mm�).

    ksc double
    -

    The shear coefficient along the rake face cross line (N/mm²).

    +

    The shear coefficient along the rake face cross line (N/mm�).

    ksn double
    -

    The shear coefficient along the rake face normal direction (N/mm²).

    +

    The shear coefficient along the rake face normal direction (N/mm�).

    kpe double

    The plough coefficient along the cutting edge direction (N/mm).

    @@ -888,7 +888,7 @@ Unit: N/mm.

    Gets or sets the shear coefficient along the rake face cross line (c). Direction is from outer to center on side cutting. -Unit: N/mm².

    +Unit: N/mm�.

    @@ -922,7 +922,7 @@ Unit: N/mm².

    Gets or sets the shear coefficient along the cutting edge direction (e). Direction is from lower to upper on side cutting. -Unit: N/mm².

    +Unit: N/mm�.

    @@ -955,7 +955,7 @@ Unit: N/mm².

    Gets or sets the shear coefficient along the rake face normal direction (n). -Unit: N/mm².

    +Unit: N/mm�.

    @@ -1257,9 +1257,9 @@ For parameter training.

    Remarks

    Index mapping: -0 - Kse (N/mm²) -1 - Ksc (N/mm²) -2 - Ksn (N/mm²) +0 - Kse (N/mm�) +1 - Ksc (N/mm�) +2 - Ksn (N/mm�) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm)

    @@ -1319,6 +1319,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    @@ -1353,9 +1387,9 @@ Since the folder can be moving with the configuration file.

    Remarks

    Index mapping: -0 - Kse (N/mm²) -1 - Ksc (N/mm²) -2 - Ksn (N/mm²) +0 - Kse (N/mm�) +1 - Ksc (N/mm�) +2 - Ksn (N/mm�) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm)

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html index 112964e9..81c8beda 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html @@ -1056,6 +1056,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingProcs.MillingGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingProcs.MillingGuide.html index 55f1fb2e..86a2f6fb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingProcs.MillingGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingProcs.MillingGuide.html @@ -501,6 +501,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartConfig.html index b6627753..25f1ecb8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartConfig.html @@ -367,6 +367,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartItemConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartItemConfig.html index a438d3f4..68306b7c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartItemConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ClStripChartItemConfig.html @@ -364,6 +364,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html index c2060e16..94bd2c3e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html @@ -363,6 +363,40 @@ Class ForceCycleLineDivConfig + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html index 214baa26..5fa8826a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html @@ -367,6 +367,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.TimeChartYConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.TimeChartYConfig.html index aad5b5d9..8379c100 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.TimeChartYConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingStepUtils.TimeChartYConfig.html @@ -402,6 +402,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 776d86e4..f77ca1d8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.Fixture.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.Fixture.html @@ -1174,6 +1174,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html index 326bfd60..ce8d6216 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html @@ -462,6 +462,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 4c880fd4..9aa44703 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.CylindroidHolder.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.CylindroidHolder.html @@ -1293,6 +1293,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 bd07faf0..16b96ec7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.FreeformHolder.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.FreeformHolder.html @@ -1392,6 +1392,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Solids.Solid.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Solids.Solid.html index c333b28a..4a400fb7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Solids.Solid.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Solids.Solid.html @@ -1087,6 +1087,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcRotation.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcRotation.html index c9126416..73834378 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcRotation.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcRotation.html @@ -844,6 +844,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcTranslation.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcTranslation.html index b3b3630a..d420bbdd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcTranslation.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Topo.NcTranslation.html @@ -734,6 +734,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 79935c96..1ac50543 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.Workpiece.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.Workpiece.html @@ -968,6 +968,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html index f98ffb82..c7734a59 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html @@ -558,6 +558,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html index 62815159..d397994c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html @@ -1383,6 +1383,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html index bb71eeb2..d9417823 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html @@ -554,6 +554,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html index 219bfadb..b5ec8e7e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html @@ -1355,6 +1355,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.CuttingVelocityOptLimit.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.CuttingVelocityOptLimit.html index 7ecef657..a816d8fa 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.CuttingVelocityOptLimit.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.CuttingVelocityOptLimit.html @@ -574,6 +574,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html index b9cc70a4..c59ffa07 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html @@ -589,6 +589,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerToothOptLimit.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerToothOptLimit.html index 75664da5..2f8d9eff 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerToothOptLimit.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.FixedFeedPerToothOptLimit.html @@ -514,6 +514,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.MillingCutterOptOption.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.MillingCutterOptOption.html index 3448b7d4..57df14ab 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.MillingCutterOptOption.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.MillingCutterOptOption.html @@ -732,6 +732,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptOption.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptOption.html index ed71395a..ef8f6c6a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptOption.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptOption.html @@ -1557,6 +1557,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html index 7f0d8aa0..f1777e0c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.NcOptProc.html @@ -569,6 +569,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.ShapeBasedCutterOptLimit.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.ShapeBasedCutterOptLimit.html index fae897d5..d406fc25 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.ShapeBasedCutterOptLimit.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcOpt.ShapeBasedCutterOptLimit.html @@ -783,6 +783,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.CncBrandDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.CncBrandDependency.html index e0d9178f..788beb77 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.CncBrandDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.CncBrandDependency.html @@ -536,6 +536,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html index 21041e2e..a9be1655 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html @@ -477,6 +477,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 ce484ac2..e6ca9ce1 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 @@ -1553,6 +1553,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 115f6d6e..1df70ab2 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 @@ -482,6 +482,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html index c434cdb8..e98248bc 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html @@ -6,7 +6,7 @@ - + @@ -111,7 +111,7 @@ no reference of its own and resolves the table from the per-call

    Registered on a brand preset's -VariableEvaluatorSyntax.RuntimeVariableLookups, not on +RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in @@ -468,6 +468,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html index a43ed97d..7407f563 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html @@ -535,6 +535,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 27539176..e5572935 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.html @@ -168,7 +168,7 @@ no reference of its own and resolves the table from the per-call

    Registered on a brand preset's -VariableEvaluatorSyntax.RuntimeVariableLookups, not on +RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in 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 23dc1283..3db46bd7 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 @@ -384,6 +384,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 ef89d101..eea9ae7c 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 @@ -417,6 +417,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html index b054c2e6..7ec582ea 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html @@ -549,6 +549,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html index 894387a0..587cc208 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html @@ -423,6 +423,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 ad605008..ec28d289 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 @@ -450,6 +450,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 596374ed..5de675e9 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 @@ -476,6 +476,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 6b96eff3..011fc2ea 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 @@ -1085,6 +1085,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 0f299e9b..a5837261 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html @@ -563,6 +563,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 2c32ebb4..24cc41f5 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 @@ -452,6 +452,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 742532fd..2be03229 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 @@ -991,6 +991,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 e7f07107..f012d47e 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 @@ -1399,6 +1399,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html index e1125f98..ad2a6d56 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html @@ -351,6 +351,40 @@ the counter implicitly reset to 0.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html index 111138ba..fc943815 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html @@ -639,6 +639,40 @@ The Pn is from table buckle to tool attacher.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html index 514a2b51..9b516ce2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html @@ -416,6 +416,40 @@ round-trip.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html index c4e0a434..120019b5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html @@ -373,6 +373,40 @@ the empty element so the dependency survives an XML round-trip.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html index e362e20c..34c1e055 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html @@ -377,6 +377,40 @@ the empty element so the dependency survives an XML round-trip.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html index dbbe1b21..aa01d1fc 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html @@ -475,6 +475,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html index 641fc35f..0f5c7e25 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html @@ -397,6 +397,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html index 7fe61dfb..edf73860 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html @@ -127,7 +127,7 @@ they touch Parsing.Assignments, not Parsing.FanucGoto.

    Label scanning uses two hosted helper syntaxes — -CommentSyntax and IndexSyntax — applied to +CommentSyntax and IndexSyntax — applied to each candidate block in turn so the predicate IndexNote.Number == target matches the same way the Parsing bundle would. Both are XML-IO-able so API customers can swap them @@ -499,6 +499,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html index defb9df4..28296016 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html @@ -446,6 +446,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html index 7f3ecdfb..8d9433d3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html @@ -504,6 +504,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html index 7fe192ce..f047d44e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html @@ -6,7 +6,7 @@ - + @@ -103,7 +103,7 @@ letters to Vars.Local #1-#26 per the Type-I map (see FanucMacroArgumentMap). Every inlined block carries the binding dict, a clone of the FanucMacroCall diagnostic record, and a MacroFrame id stamp — so -LocalVariableLookup resolves arg references in a +LocalVariableLookup resolves arg references in a single-block lookup, a cache dump landing on any block immediately shows which call it belongs to, and downstream FanucLocalVariableReadingSyntax carries body-internal @@ -118,7 +118,7 @@ Frame isolation works on two layers. Statically, caller blocks have no MacroFrame stamp (frame id 0 by Get(JsonObject)), so the inlined frame ids (allocated fresh per L-repetition) never collide with main. Dynamically, -LocalVariableLookup and +LocalVariableLookup and FanucLocalVariableReadingSyntax compare frame ids before carrying any Vars.Local entry across a block boundary — a macro body's body-internal writes therefore stay inside the @@ -460,6 +460,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html index 2bc9bbb4..c645b259 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html @@ -520,6 +520,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html index 9f0e9319..e7303fdd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html @@ -542,6 +542,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html index 76942516..816ea5bf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html @@ -126,7 +126,7 @@ they touch Parsing.Assignments, not Parsing.FanucGoto.

    Label scanning uses two hosted helper syntaxes — -CommentSyntax and IndexSyntax — applied to +CommentSyntax and IndexSyntax — applied to each candidate block in turn so the predicate IndexNote.Number == target matches the same way the Parsing bundle would. Both are XML-IO-able so API customers can swap them @@ -242,7 +242,7 @@ letters to Vars.Local #1-#26 per the Type-I map (see FanucMacroArgumentMap). Every inlined block carries the binding dict, a clone of the FanucMacroCall diagnostic record, and a MacroFrame id stamp — so -LocalVariableLookup resolves arg references in a +LocalVariableLookup resolves arg references in a single-block lookup, a cache dump landing on any block immediately shows which call it belongs to, and downstream FanucLocalVariableReadingSyntax carries body-internal @@ -257,7 +257,7 @@ Frame isolation works on two layers. Statically, caller blocks have no MacroFrame stamp (frame id 0 by Get(JsonObject)), so the inlined frame ids (allocated fresh per L-repetition) never collide with main. Dynamically, -LocalVariableLookup and +LocalVariableLookup and FanucLocalVariableReadingSyntax compare frame ids before carrying any Vars.Local entry across a block boundary — a macro body's body-internal writes therefore stay inside the diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html index d161c8f1..b97566be 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html @@ -6,7 +6,7 @@ - + @@ -104,7 +104,7 @@ and ReadLines(int, string, string), segments through the provided ISegmenter, runs the -probeSyntaxes on each candidate block to +caller-supplied probe syntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF.

    @@ -215,7 +215,7 @@ participating in this scan.

    Absolute path to read line content from.

    labelPath string
    -

    Project-relative path to stamp on each line's IndexedFileLine label (so diagnostics anchor to a relative form, not the resolver's transient absolute path).

    +

    Project-relative path to stamp on each line's IndexedFileLine label (so diagnostics anchor to a relative form, not the resolver's transient absolute path).

    fileIndex int

    Fresh file index to stamp on each scanned line, allocated by the caller from FileIndexCounterDependency.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html index be1e054b..22d04d7b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html @@ -220,7 +220,7 @@ freshly-allocated FileIndex and callRecord
    , the frame id, and the resolved #N → value bindings. The caller passes -the result to LazyLinkedList<T>.PrependSource on +the result to PrependSource(IEnumerable<T>) on the source layer.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html index 7c5ce0a1..de291f1d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html @@ -425,6 +425,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html index abd78bda..3462ea22 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html @@ -451,6 +451,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html index 68ed1482..97f1bfd6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html @@ -498,6 +498,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html index 15fc6c2e..e57d1405 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html @@ -508,6 +508,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html index 83031f72..793acd1a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html @@ -490,6 +490,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.html index 6423a845..d11b5fcd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.html @@ -120,7 +120,7 @@ and ReadLines(int, string, string), segments through the provided ISegmenter, runs the -probeSyntaxes on each candidate block to +caller-supplied probe syntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF.

    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 6a31ff2d..d57c248a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.HomeMcInitializer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.HomeMcInitializer.html @@ -406,6 +406,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 586a2203..924fccc2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.StaticInitializer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.StaticInitializer.html @@ -566,6 +566,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 ba768722..20e52b15 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html @@ -455,6 +455,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 6e8d98c7..3ff4ee91 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html @@ -456,6 +456,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 d390fc4c..47926823 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html @@ -575,6 +575,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html index 345939d4..9012d17f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html @@ -442,6 +442,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucGoto.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucGoto.html index 11b90c3a..ff93508b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucGoto.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucGoto.html @@ -6,7 +6,7 @@ - + @@ -111,7 +111,7 @@ Two source forms map to the same shape:

    At parsing time N is a raw token from the source — it may be a literal ("100"), a variable reference ("#1"), or a -bracketed expression ("#[#2+5]"). VariableEvaluatorSyntax +bracketed expression ("#[#2+5]"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucIfThen.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucIfThen.html index 2ffa95bc..b3ca873f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucIfThen.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucIfThen.html @@ -6,7 +6,7 @@ - + @@ -116,7 +116,7 @@ accepted and lifted together.

    Condition is held as a string at parsing time so -VariableEvaluatorSyntax's pass-2 tree walk can substitute +VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucMacroCall.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucMacroCall.html index 50bbd276..9239361d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucMacroCall.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucMacroCall.html @@ -6,7 +6,7 @@ - + @@ -102,7 +102,7 @@ Class FanucMacroCall G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of -File with these argument bindings” without back-walking +FileName with these argument bindings” without back-walking to find the host.

    Each inlined block additionally carries the resolved diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.MacroFrame.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.MacroFrame.html index f66fb666..bb1fbace 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.MacroFrame.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.MacroFrame.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,7 @@ Class MacroFrame

    Assembly
    HiMech.dll
    -

    Top-level integer marker stamped onto a SyntaxPiece's JSON +

    Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.SubProgramReturn.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.SubProgramReturn.html index 8ca5876c..4050b6ab 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.SubProgramReturn.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.SubProgramReturn.html @@ -190,7 +190,7 @@ in cache dumps and surfaces the M99 P{seq} jump decision.

    Set to P when the M99 actually redirected control flow to the caller's N{seq} block via -LazyLinkedList<T>.ReplaceSource. Null on plain M99 +ReplaceSource(IEnumerable<T>). Null on plain M99 (no P), and on M99 P{seq} that fell through because the jump could not be carried out.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html index b136f75d..539819c7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html @@ -212,7 +212,7 @@ Two source forms map to the same shape:

    At parsing time N is a raw token from the source — it may be a literal ("100"), a variable reference ("#1"), or a -bracketed expression ("#[#2+5]"). VariableEvaluatorSyntax +bracketed expression ("#[#2+5]"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. @@ -240,7 +240,7 @@ accepted and lifted together.

    Condition is held as a string at parsing time so -VariableEvaluatorSyntax's pass-2 tree walk can substitute +VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by @@ -255,7 +255,7 @@ via the same ReadCondition shape used by G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of -File with these argument bindings” without back-walking +FileName with these argument bindings” without back-walking to find the host.

    Each inlined block additionally carries the resolved @@ -340,7 +340,7 @@ do not share this key, because their data shapes are richer.

    MacroFrame
    -

    Top-level integer marker stamped onto a SyntaxPiece's JSON +

    Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 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 86b5b013..ca8ce9a3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html @@ -421,6 +421,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html index fb1a5379..6aef403e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html @@ -317,7 +317,7 @@ the home (0): }

    Bare G28 — no axis specifiers — exercises the configurable -BareG28 policy. Default Alarm +BareG28 policy. Default Alarm emits Coord-RefReturn--003 and consumes the G28 without motion (the diagnostic surfaces through the NcDiagnosticProgress sink, not the block JSON, so the @@ -327,7 +327,7 @@ canonical #AfterBuild is just an empty object):

    { "Parsing": { "G28": {} } }
    #AfterBuild:
    {}
    -Bare G28 with BareG28 set to +Bare G28 with BareG28 set to AllAxesHome: the syntax synthesises a literal at the inherited program position for every configured linear axis and the previous modal angle for every configured 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 2046c648..f1b6ce04 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html @@ -427,6 +427,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 0f9bf6e6..7b98d8de 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html @@ -390,6 +390,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 c8bfc890..8ec559ee 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html @@ -577,6 +577,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 07ec9fb0..af8d6905 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html @@ -434,6 +434,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 dba9902b..a8a4b20e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html @@ -422,6 +422,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html index e7ba771f..6eedc386 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html @@ -448,6 +448,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 14349bc0..bb42a7c9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html @@ -438,6 +438,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 a02c3045..d5456ac4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html @@ -420,6 +420,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 8772dab6..5253922c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html @@ -434,6 +434,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 c67fa25e..625a417e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html @@ -435,6 +435,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 78a33b61..9672f980 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 @@ -489,6 +489,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 e44a4f72..269ab137 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html @@ -420,6 +420,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 51fc782c..aa5bed74 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html @@ -560,6 +560,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 2df44f41..6323d0ac 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html @@ -491,6 +491,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 d77f89a2..a9dadf91 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html @@ -507,6 +507,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 0ad47296..17111296 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html @@ -427,6 +427,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 2cc5c18b..e8c82648 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html @@ -520,6 +520,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 b2d71e9b..1877d142 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html @@ -461,6 +461,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 f0314bb8..4a830b5d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html @@ -453,6 +453,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 0ad67270..399554c2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html @@ -489,6 +489,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 1b5c99cc..022dc410 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html @@ -405,6 +405,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 fd1c415e..235873d2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html @@ -422,6 +422,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 8888db2d..6e77acf1 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html @@ -403,6 +403,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 31e18bc4..86ff7868 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html @@ -428,6 +428,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 5296e1ea..074b6bfb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html @@ -436,6 +436,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 508e8255..f2e135c3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html @@ -442,6 +442,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 ef7b629e..89fe89b5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html @@ -412,6 +412,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html index b600bd63..3c1b4661 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html @@ -475,6 +475,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 90471925..a1158d67 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html @@ -428,6 +428,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 8e249bbf..4244a27e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html @@ -437,6 +437,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 35bf8d83..f4e42ad4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html @@ -531,6 +531,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 5d7d2da8..1e7e85a3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,11 @@ Class ReferenceReturnSyntax
    Assembly
    HiMech.dll
    -
    +

    G28 reference point return syntax. Behaviour is documented in detail +on the example attached to BareG28Behavior; this class +is the ISituNcSyntax implementation that the +BareG28 property configures.

    +
    @@ -439,6 +443,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 b3ab5906..8bf58022 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 @@ -484,6 +484,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 e9960a9b..874eb14d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html @@ -436,6 +436,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 e4982643..05974111 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html @@ -422,6 +422,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 d8213a5d..674d6250 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html @@ -503,6 +503,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 e70bb200..44d27010 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html @@ -576,6 +576,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 824b9cde..f5f2db0e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html @@ -469,6 +469,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html index 8fbe04bb..8bacc90d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html @@ -798,7 +798,11 @@ MC vs predecessor lookback, picks strategy from
    ReferenceReturnSyntax
    -
    +

    G28 reference point return syntax. Behaviour is documented in detail +on the example attached to BareG28Behavior; this class +is the ISituNcSyntax implementation that the +BareG28 property configures.

    +
    RotaryAxisUtil
    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 7dfcea80..a8065b7a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html @@ -436,6 +436,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 20cf7a6d..b31a79e8 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 @@ -421,6 +421,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html index e3eed5c6..8bedeff0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html @@ -458,6 +458,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html index dba8dbef..2d8aee4d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html @@ -539,6 +539,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html index a1daec12..2c57d6f7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html @@ -468,6 +468,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html index ad8e7885..2bbd0d0d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html @@ -458,6 +458,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html index 8762e5ca..f653ab61 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html @@ -447,6 +447,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html index 1a95099f..1723fe0b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html @@ -481,6 +481,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 0a585315..3aa2bbd1 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html @@ -319,6 +319,40 @@ variable-tag pattern.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html index bdc40b4e..def45fe2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html @@ -459,6 +459,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 00ce651f..69166381 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 @@ -438,6 +438,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 86ed4b09..8422e5f4 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 @@ -438,6 +438,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 c8f4870b..7a66b806 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 @@ -473,6 +473,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 a6207a22..23b8b0c4 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 @@ -429,6 +429,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 afbcc35e..7676a880 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 @@ -442,6 +442,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 0cf1e7e4..5fdbb961 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 @@ -318,6 +318,40 @@ Extends + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 1e47b95c..eff4f0e5 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 @@ -458,6 +458,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 5f28c91c..f77c8100 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 @@ -431,6 +431,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 d8c828ee..f00349ce 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 @@ -510,6 +510,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 73f66d04..f31d7bf8 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 @@ -422,6 +422,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 568947c6..aef57a9e 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 @@ -423,6 +423,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 1b160103..106a74a7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html @@ -319,6 +319,40 @@ variable-tag pattern.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 c445c035..0c281b85 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html @@ -568,6 +568,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html index a0619a12..8e414667 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html @@ -530,6 +530,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html index 2fef1d8c..f9e61a85 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html @@ -666,6 +666,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html index 98dc16e7..f3dc98ba 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html @@ -420,6 +420,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory 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 c0bcb97d..df7a5fbd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html @@ -597,6 +597,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 1bf52450..8f3c18a6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html @@ -526,6 +526,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html index f46b9eb7..2673d5e5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html @@ -468,6 +468,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 17731654..cc9c6803 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html @@ -628,6 +628,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 ffa6e9d0..60c1df04 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html @@ -488,6 +488,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 0e7b67b5..63f72d5a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html @@ -327,6 +327,40 @@ Also support single line NC block.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 89204ece..3b8dee00 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html @@ -428,6 +428,40 @@ Lines without the delimiter produce a single + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html index e2f5af4f..45326ef7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html @@ -295,6 +295,40 @@ Class SingleLineSegmenter + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 b9bd7192..75608889 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html @@ -312,6 +312,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html index 09785fe8..51dc7cae 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html @@ -306,6 +306,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 23ff9047..559ed969 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CoolantSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CoolantSemantic.html @@ -309,6 +309,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 d29e819d..ee5dc7d2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html @@ -347,6 +347,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 9c0670c9..f60d92bf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html @@ -347,6 +347,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + 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 17510546..37819d97 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html @@ -306,6 +306,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 81564d5a..8b34321b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McArcMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McArcMotionSemantic.html @@ -308,6 +308,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 4875ad45..8e520536 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html @@ -312,6 +312,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 5eb09d8d..76578533 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html @@ -307,6 +307,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 9cdbe75f..8122cc5a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html @@ -306,6 +306,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    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 3d5185e1..8e746fcd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ToolChangeSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ToolChangeSemantic.html @@ -307,6 +307,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html index 5801dd07..97b9facf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html @@ -858,6 +858,42 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers SoftNcRunner and chains Reg() on every +pipeline component the runner may deserialize from XML — dependencies, +initializers, segmenters, parsing/logic/evaluation/post-logic/inspection +syntaxes, and semantics. Idempotent; safe to call from any number of +boot paths.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html index 7e57bcbd..13377a1d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html @@ -511,6 +511,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html index 8930725f..f0974b94 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html @@ -688,6 +688,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcEnv.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcEnv.html index 2c5daab4..88e2bc31 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcEnv.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcEnv.html @@ -1454,6 +1454,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html index 3230a6bc..32a83507 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html @@ -1903,7 +1903,7 @@ So be care that do not change the NC XYZ if not needed.

    0-based ordinal in NC execution order, stamped at construction by -Hi.Numerical.FilePlayers.HardNcRunner (source-side) or by +HardNcRunner (source-side) or by NcOptProc (optimized-side, a fresh independent count). Init-state lines (RefNcLineOnInit) carry -1 as a “not in pipeline” sentinel.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html index 8f745175..5cad8436 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html @@ -542,6 +542,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html index e8892502..770f2c8a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html @@ -448,6 +448,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html index 332edfe0..2fadf8e6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html @@ -467,6 +467,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html index b9f41ce9..a5efa217 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html @@ -453,6 +453,40 @@ The key is Offset ID (H or D in NC code).

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTableRow.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTableRow.html index e08989ec..7fac5bcd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTableRow.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTableRow.html @@ -470,6 +470,40 @@ Class MillingToolOffsetTableRow

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelector.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelector.html index 806fc7d9..7142ecfc 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelector.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelector.html @@ -651,6 +651,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html index 01f52a9f..ecc85986 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html @@ -611,6 +611,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html index 4dd49d6f..2bead355 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html @@ -453,6 +453,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html index e1bad51e..2b44a97d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html @@ -460,6 +460,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.DistanceShift.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.DistanceShift.html index 76375182..52e44544 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.DistanceShift.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.DistanceShift.html @@ -416,6 +416,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.TimeShift.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.TimeShift.html index f09a9932..82b233b6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.TimeShift.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.StepSelectionUtils.TimeShift.html @@ -457,6 +457,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html index bc0264bd..b68b1279 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html @@ -1527,6 +1527,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html index decc4195..d8a12a33 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html @@ -1248,6 +1248,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoatingMaterial.html b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoatingMaterial.html index 59267d53..601a5d53 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoatingMaterial.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoatingMaterial.html @@ -563,6 +563,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoolantHeatCondition.html b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoolantHeatCondition.html index c85afd3d..e79e2888 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoolantHeatCondition.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CoolantHeatCondition.html @@ -639,6 +639,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CutterMaterial.html b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CutterMaterial.html index 1a3b8568..c0bb531f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CutterMaterial.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.CutterMaterial.html @@ -1022,6 +1022,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.StructureMaterial.html b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.StructureMaterial.html index 71f217bb..c2a04682 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.StructureMaterial.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.StructureMaterial.html @@ -824,6 +824,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.ThermalLayer1D.html b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.ThermalLayer1D.html index 689a5c1e..acce2c90 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.ThermalLayer1D.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.ThermalLayer1D.html @@ -509,6 +509,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.WorkpieceMaterial.html b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.WorkpieceMaterial.html index cac1e98d..908c551c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Physics.WorkpieceMaterial.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Physics.WorkpieceMaterial.html @@ -958,6 +958,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.EnablingWrapper.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.EnablingWrapper.html index 4173855b..8aafdeb7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.EnablingWrapper.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.EnablingWrapper.html @@ -445,6 +445,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.GeomDiffCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.GeomDiffCommand.html index b9134156..083e8785 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.GeomDiffCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.GeomDiffCommand.html @@ -406,6 +406,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ListCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ListCommand.html index b2593b8e..79032c1b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ListCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ListCommand.html @@ -415,6 +415,41 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +(or Default when factory is +null), and chains Reg(factory) on dependents so the +registration graph is observable. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.MachiningMotionResolutionCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.MachiningMotionResolutionCommand.html index ffddea0a..011a1462 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.MachiningMotionResolutionCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.MachiningMotionResolutionCommand.html @@ -377,6 +377,41 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +(or Default when factory is +null), and chains Reg(factory) on dependents so the +registration graph is observable. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcCodeCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcCodeCommand.html index 965c087a..fb88c77c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcCodeCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcCodeCommand.html @@ -471,6 +471,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileCommand.html index 1128677d..97673256 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileCommand.html @@ -438,6 +438,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileListCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileListCommand.html index 30ad018a..5f533806 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileListCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcFileListCommand.html @@ -371,6 +371,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcOptOptionCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcOptOptionCommand.html index c6296dca..ae17b7ec 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcOptOptionCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.NcOptOptionCommand.html @@ -414,6 +414,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.OptimizeToFilesCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.OptimizeToFilesCommand.html index 2f1e5071..68832d1e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.OptimizeToFilesCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.OptimizeToFilesCommand.html @@ -371,6 +371,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PostExecutionCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PostExecutionCommand.html index 4d062a5c..a3d530f2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PostExecutionCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PostExecutionCommand.html @@ -731,6 +731,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PreSettingCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PreSettingCommand.html index 66f6e24e..319572a1 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PreSettingCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.PreSettingCommand.html @@ -606,6 +606,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.RecordRuntimeGeomCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.RecordRuntimeGeomCommand.html index d4bf1024..499dd18e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.RecordRuntimeGeomCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.RecordRuntimeGeomCommand.html @@ -403,6 +403,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ScriptCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ScriptCommand.html index adb76e37..be0d3968 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ScriptCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.ScriptCommand.html @@ -600,6 +600,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.SimpleSessionCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.SimpleSessionCommand.html index 57bad991..816b9044 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.SimpleSessionCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.SimpleSessionCommand.html @@ -957,6 +957,41 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +(or Default when factory is +null), and chains Reg(factory) on dependents so the +registration graph is observable. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html index 25722c44..0259df7f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html @@ -403,6 +403,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteShotFilesCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteShotFilesCommand.html index a35d4a1a..d1b7dd50 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteShotFilesCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteShotFilesCommand.html @@ -403,6 +403,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteStepFilesCommand.html b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteStepFilesCommand.html index 79edb0b3..987bff1b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteStepFilesCommand.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.SessionCommands.WriteStepFilesCommand.html @@ -371,6 +371,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/HiMachining.Milling.ClMillingDevice.html b/App/wwwroot/HiAPI-docsite/api/HiMachining.Milling.ClMillingDevice.html index ef7e230e..660f6d0c 100644 --- a/App/wwwroot/HiAPI-docsite/api/HiMachining.Milling.ClMillingDevice.html +++ b/App/wwwroot/HiAPI-docsite/api/HiMachining.Milling.ClMillingDevice.html @@ -805,6 +805,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/HiNc.Grpcs.MachiningProjectGrpcServer.html b/App/wwwroot/HiAPI-docsite/api/HiNc.Grpcs.MachiningProjectGrpcServer.html index 19706694..1a070123 100644 --- a/App/wwwroot/HiAPI-docsite/api/HiNc.Grpcs.MachiningProjectGrpcServer.html +++ b/App/wwwroot/HiAPI-docsite/api/HiNc.Grpcs.MachiningProjectGrpcServer.html @@ -498,6 +498,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html b/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html index e02a45ff..281bed3c 100644 --- a/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html +++ b/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html @@ -92,24 +92,66 @@

    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:

    -
      -
    1. Define a static XName property matching the class name.
    2. -
    3. Register itself in the static constructor using XFactory.Regs.Add
    4. -
    5. Implement XML serialization and deserialization logic
    6. -
    -

    The registration delegate signature includes an IProgress<object> 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()
    +

    XFactory

    +

    XFactory is an instance class with a process-wide Default singleton (XFactory.Default). The instance form exists for test isolation and parallel pipelines that need disjoint generator registries; the static Gen<T> / GenByChild<T> / GenByFile<T> entry points always read from Default.

    +

    Each instance owns its own Generators dictionary (XML element name → generator delegate). Types add themselves via a Reg(factory) call (see below).

    +

    Explicit Registration via Reg(XFactory factory = null)

    +

    Every class implementing IMakeXmlSource exposes a public static Reg method:

    +
    public static void Reg(XFactory factory = null)
     {
    -    // Register to the <see cref="XFactory.Default"/>.
    -    XFactory.Generators.Add(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml));
    +    factory ??= XFactory.Default;
    +    factory.Generators.TryAdd(XName, (xml, baseDirectory, relFile, progress, res)
    +        => new MyClass(xml, baseDirectory, relFile, progress));
     }
    -

    IProgress Threading

    +
    +

    Key properties:

    +
      +
    • Explicit. Callers see registration happen — no hidden side effect from accessing a static member or constructing a type.
    • +
    • Idempotent. Uses TryAdd, so the same Reg may be invoked any number of times from any number of boot paths.
    • +
    • Composable. Custom factory instances are supported via the optional factory parameter; default usage (MyClass.Reg();) populates XFactory.Default.
    • +
    +

    For example, see BallApt:

    +
    /// <summary>
    +/// Registers this type's deserializer with the given <see cref="XFactory"/>
    +/// (or <see cref="XFactory.Default"/> when <paramref name="factory"/> is
    +/// <c>null</c>). Idempotent.
    +/// </summary>
    +public static void Reg(XFactory factory = null)
    +{
    +    factory ??= XFactory.Default;
    +    factory.Generators.TryAdd(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml));
    +}
    +

    Composite types chain Reg(factory) on dependents

    +

    When a class deserializes child elements via XFactory.Gen<T> / XFactory.GenByChild<T>, its Reg(factory) must chain Reg(factory) on each concrete child type so the whole dependency graph is reachable from a single root call:

    +
    public static void Reg(XFactory factory = null)
    +{
    +    factory ??= XFactory.Default;
    +
    +    DependentA.Reg(factory);
    +    DependentB.Reg(factory);
    +
    +    factory.Generators.TryAdd(XName, (xml, baseDirectory, relFile, progress, res)
    +        => new MyComposite(xml, baseDirectory, relFile, progress));
    +}
    +
    +

    For polymorphic deserialization (GenByChild<IInterface>), the composite must chain every concrete implementation that may appear in the XML. The largest composite, SoftNcRunner, chains roughly 130 dependents (every dependency, initializer, segmenter, syntax, and semantic the NC pipeline may deserialize).

    +

    Multi-name registration (legacy aliases)

    +

    When the XML payload may carry an old element name for backward compatibility, register the current XName first and group legacy aliases under a //legacy aliases comment:

    +
    public static void Reg(XFactory factory = null)
    +{
    +    factory ??= XFactory.Default;
    +
    +    XFactory.XGeneratorDelegate gen = (xml, baseDirectory, relFile, progress, res)
    +        => new MachiningProject(xml, baseDirectory, progress);
    +
    +    factory.Generators.TryAdd(XName, gen);
    +
    +    //legacy aliases
    +    factory.Generators.TryAdd("MachiningCourse", gen);
    +    factory.Generators.TryAdd("MillingCourse", gen);
    +}
    +
    +

    IProgress Threading

    The IProgress<object> 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<object> progress)
    @@ -119,6 +161,11 @@
     }
     

    Parsing errors are reported to the caller-provided IProgress<object> handler.

    +

    Boot path

    +

    An application's entry point (web service Program.cs, WPF App.xaml.cs, test fixture, etc.) must call the appropriate top-level Reg() once at startup, before any project XML is deserialized. For the simulation pipeline this is:

    +
    LocalProjectService.Reg();
    +
    +

    LocalProjectService.Reg() chains MachiningProject.Reg(), which in turn chains every type the simulation pipeline may deserialize. After this single call returns, XFactory.Default.Generators carries the full deserialization graph.

    Implementation Patterns

    Simple Value Objects

    See BallApt implementation:

    @@ -286,10 +333,12 @@ public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibit

    Best Practices

    1. XName: Always define static XName property matching the class name.
    2. -
    3. Registration: Register in static constructor using XFactory.Regs
    4. -
    5. 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.
    6. +
    7. Registration: Expose public static void Reg(XFactory factory = null); first line is factory ??= XFactory.Default; then factory.Generators.TryAdd(XName, …).
    8. +
    9. Chain dependents: For every concrete type T that the ctor reads via XFactory.Gen<T> / XFactory.GenByChild<T>, add T.Reg(factory); to the chain. For polymorphic GenByChild<IInterface>, chain every implementation that the XML may carry.
    10. +
    11. Idempotent: Use TryAdd, never Add. The same Reg is called from many boot paths.
    12. Progress Threading: Pass the IProgress<object> parameter through all nested XFactory calls. See Message Management for the rationale.
    13. -
    14. Legacy Support: Maintain backward compatibility when needed
    15. +
    16. Legacy Support: Register the canonical XName first, then group aliases under a //legacy aliases comment.
    17. +
    18. Derived class registration: When a derived class needs its own Reg, mark it public new static void Reg(XFactory factory = null) so the C# compiler does not warn about hiding the base method.
    diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json index d4f55881..36855656 100644 --- a/App/wwwroot/HiAPI-docsite/index.json +++ b/App/wwwroot/HiAPI-docsite/index.json @@ -62,7 +62,7 @@ "api/Hi.Cbtr.CubeTreeFile.html": { "href": "api/Hi.Cbtr.CubeTreeFile.html", "title": "Class CubeTreeFile | HiAPI-C# 2025", - "summary": "Class CubeTreeFile Namespace Hi.Cbtr Assembly HiCbtr.dll Represents a file containing cube tree data. public class CubeTreeFile : IMakeXmlSource, ISourceFile, IToPresentDto Inheritance object CubeTreeFile Implements IMakeXmlSource 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 DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 CubeTreeFile() Ctor. public CubeTreeFile() CubeTreeFile(string, string) Ctor. public CubeTreeFile(string relFile, string baseDirectory) Parameters relFile string baseDirectory string CubeTreeFile(XElement, string) Ctor. public CubeTreeFile(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for relative paths. Properties BaseDirectory Gets or sets the base directory for file operations. public string BaseDirectory { get; set; } Property Value string SourceFile file path. public string SourceFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods LoadByFile() Loads a cube tree from the specified file. public CubeTree LoadByFile() Returns CubeTree The loaded cube tree, or null if the file path is empty or 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. ToPresentDto() Convert 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 object properties" + "summary": "Class CubeTreeFile Namespace Hi.Cbtr Assembly HiCbtr.dll Represents a file containing cube tree data. public class CubeTreeFile : IMakeXmlSource, ISourceFile, IToPresentDto Inheritance object CubeTreeFile Implements IMakeXmlSource 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 DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 CubeTreeFile() Ctor. public CubeTreeFile() CubeTreeFile(string, string) Ctor. public CubeTreeFile(string relFile, string baseDirectory) Parameters relFile string baseDirectory string CubeTreeFile(XElement, string) Ctor. public CubeTreeFile(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for relative paths. Properties BaseDirectory Gets or sets the base directory for file operations. public string BaseDirectory { get; set; } Property Value string SourceFile file path. public string SourceFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods LoadByFile() Loads a cube tree from the specified file. public CubeTree LoadByFile() Returns CubeTree The loaded cube tree, or null if the file path is empty or 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToPresentDto() Convert 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 object properties" }, "api/Hi.Cbtr.DiffAttachment.html": { "href": "api/Hi.Cbtr.DiffAttachment.html", @@ -137,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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Collision.CollidableStl.html": { "href": "api/Hi.Collision.CollidableStl.html", @@ -152,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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Collision.CollisionUtil.html": { "href": "api/Hi.Collision.CollisionUtil.html", @@ -272,22 +272,22 @@ "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 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()" + "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() Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Coloring.DiscreteQuantityColorGuide.html": { "href": "api/Hi.Coloring.DiscreteQuantityColorGuide.html", "title": "Class DiscreteQuantityColorGuide | HiAPI-C# 2025", - "summary": "Class DiscreteQuantityColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that assigns colors based on discrete quantity values. public class DiscreteQuantityColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object DiscreteQuantityColorGuide 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 DiscreteQuantityColorGuide() Initializes a new instance of the DiscreteQuantityColorGuide class. public DiscreteQuantityColorGuide() DiscreteQuantityColorGuide(string) Initializes a new instance of the DiscreteQuantityColorGuide class with a specified quantity key. public DiscreteQuantityColorGuide(string quantityKey) Parameters quantityKey string The key used to retrieve quantity values. DiscreteQuantityColorGuide(XElement) Initializes a new instance of the DiscreteQuantityColorGuide class from XML. public DiscreteQuantityColorGuide(XElement src) Parameters src XElement The XML element containing the color guide data. Properties QuantityKey Gets or sets the key used to retrieve the quantity value. public string QuantityKey { 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." + "summary": "Class DiscreteQuantityColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that assigns colors based on discrete quantity values. public class DiscreteQuantityColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object DiscreteQuantityColorGuide 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 DiscreteQuantityColorGuide() Initializes a new instance of the DiscreteQuantityColorGuide class. public DiscreteQuantityColorGuide() DiscreteQuantityColorGuide(string) Initializes a new instance of the DiscreteQuantityColorGuide class with a specified quantity key. public DiscreteQuantityColorGuide(string quantityKey) Parameters quantityKey string The key used to retrieve quantity values. DiscreteQuantityColorGuide(XElement) Initializes a new instance of the DiscreteQuantityColorGuide class from XML. public DiscreteQuantityColorGuide(XElement src) Parameters src XElement The XML element containing the color guide data. Properties QuantityKey Gets or sets the key used to retrieve the quantity value. public string QuantityKey { 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Coloring.FuncRangeColorGuide.html": { "href": "api/Hi.Coloring.FuncRangeColorGuide.html", "title": "Class FuncRangeColorGuide | HiAPI-C# 2025", - "summary": "Class FuncRangeColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that uses a function to get a numeric value and maps it to a color using a range color rule. public class FuncRangeColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide, IGetRangeColorRule Inheritance object FuncRangeColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide IGetRangeColorRule 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 FuncRangeColorGuide(Func, RangeColorRule) Initializes a new instance of the FuncRangeColorGuide class. public FuncRangeColorGuide(Func colorIndexFunc, RangeColorRule rangeColorRule) Parameters colorIndexFunc Func The function to get the numeric value for coloring. rangeColorRule RangeColorRule The rule that maps numeric values to colors. FuncRangeColorGuide(XElement, Func) Initializes a new instance of the FuncRangeColorGuide class from XML. public FuncRangeColorGuide(XElement src, Func colorIndexFunc) Parameters src XElement The XML element containing the color guide data. colorIndexFunc Func The function to get the numeric value for coloring. Properties ColorIndexFunc Gets or sets the function that extracts a numeric value from the input object for coloring. public Func ColorIndexFunc { get; set; } Property Value Func RangeColorRule Gets or sets the rule that maps numeric values to colors. public RangeColorRule RangeColorRule { get; set; } Property Value RangeColorRule XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRangeColorRule() Gets the range color rule. public RangeColorRule GetRangeColorRule() Returns RangeColorRule The range color rule. 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 FuncRangeColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that uses a function to get a numeric value and maps it to a color using a range color rule. public class FuncRangeColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide, IGetRangeColorRule Inheritance object FuncRangeColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide IGetRangeColorRule 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 FuncRangeColorGuide(Func, RangeColorRule) Initializes a new instance of the FuncRangeColorGuide class. public FuncRangeColorGuide(Func colorIndexFunc, RangeColorRule rangeColorRule) Parameters colorIndexFunc Func The function to get the numeric value for coloring. rangeColorRule RangeColorRule The rule that maps numeric values to colors. FuncRangeColorGuide(XElement, Func) Initializes a new instance of the FuncRangeColorGuide class from XML. public FuncRangeColorGuide(XElement src, Func colorIndexFunc) Parameters src XElement The XML element containing the color guide data. colorIndexFunc Func The function to get the numeric value for coloring. Properties ColorIndexFunc Gets or sets the function that extracts a numeric value from the input object for coloring. public Func ColorIndexFunc { get; set; } Property Value Func RangeColorRule Gets or sets the rule that maps numeric values to colors. public RangeColorRule RangeColorRule { get; set; } Property Value RangeColorRule XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRangeColorRule() Gets the range color rule. public RangeColorRule GetRangeColorRule() Returns RangeColorRule The range color rule. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Coloring.IColorGuide.html": { "href": "api/Hi.Coloring.IColorGuide.html", @@ -322,17 +322,17 @@ "api/Hi.Coloring.PlainColorGuide.html": { "href": "api/Hi.Coloring.PlainColorGuide.html", "title": "Class PlainColorGuide | HiAPI-C# 2025", - "summary": "Class PlainColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that provides a constant color value. public class PlainColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object PlainColorGuide 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 PlainColorGuide() Initializes a new instance of the PlainColorGuide class. public PlainColorGuide() PlainColorGuide(XElement) Initializes a new instance of the PlainColorGuide class from XML. public PlainColorGuide(XElement src) Parameters src XElement The XML element containing the color guide data. Properties Rgb Gets or sets the RGB color value. public Vec3d Rgb { get; set; } Property Value Vec3d 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 PlainColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that provides a constant color value. public class PlainColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object PlainColorGuide 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 PlainColorGuide() Initializes a new instance of the PlainColorGuide class. public PlainColorGuide() PlainColorGuide(XElement) Initializes a new instance of the PlainColorGuide class from XML. public PlainColorGuide(XElement src) Parameters src XElement The XML element containing the color guide data. Properties Rgb Gets or sets the RGB color value. public Vec3d Rgb { get; set; } Property Value Vec3d 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Coloring.QuantityColorGuide.html": { "href": "api/Hi.Coloring.QuantityColorGuide.html", "title": "Class QuantityColorGuide | HiAPI-C# 2025", - "summary": "Class QuantityColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that maps numeric quantities to colors using a range color rule. public class QuantityColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide, IGetRangeColorRule Inheritance object QuantityColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide IGetRangeColorRule 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 QuantityColorGuide() Initializes a new instance of the QuantityColorGuide class. public QuantityColorGuide() QuantityColorGuide(string, RangeColorRule) Initializes a new instance of the QuantityColorGuide class with specified quantity key and range color rule. public QuantityColorGuide(string quantityKey, RangeColorRule rangeColorRule) Parameters quantityKey string The key used to retrieve quantity values. rangeColorRule RangeColorRule The rule that maps numeric values to colors. QuantityColorGuide(XElement) Initializes a new instance of the QuantityColorGuide class from XML. public QuantityColorGuide(XElement src) Parameters src XElement The XML element containing the color guide data. Properties QuantityKey Gets or sets the key used to retrieve the quantity value. public string QuantityKey { get; set; } Property Value string RangeColorRule Gets or sets the rule that maps numeric values to colors. public RangeColorRule RangeColorRule { get; set; } Property Value RangeColorRule XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRangeColorRule() Gets the range color rule. public RangeColorRule GetRangeColorRule() Returns RangeColorRule The range color rule. 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 QuantityColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that maps numeric quantities to colors using a range color rule. public class QuantityColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide, IGetRangeColorRule Inheritance object QuantityColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide IGetRangeColorRule 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 QuantityColorGuide() Initializes a new instance of the QuantityColorGuide class. public QuantityColorGuide() QuantityColorGuide(string, RangeColorRule) Initializes a new instance of the QuantityColorGuide class with specified quantity key and range color rule. public QuantityColorGuide(string quantityKey, RangeColorRule rangeColorRule) Parameters quantityKey string The key used to retrieve quantity values. rangeColorRule RangeColorRule The rule that maps numeric values to colors. QuantityColorGuide(XElement) Initializes a new instance of the QuantityColorGuide class from XML. public QuantityColorGuide(XElement src) Parameters src XElement The XML element containing the color guide data. Properties QuantityKey Gets or sets the key used to retrieve the quantity value. public string QuantityKey { get; set; } Property Value string RangeColorRule Gets or sets the rule that maps numeric values to colors. public RangeColorRule RangeColorRule { get; set; } Property Value RangeColorRule XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRangeColorRule() Gets the range color rule. public RangeColorRule GetRangeColorRule() Returns RangeColorRule The range color rule. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Coloring.RangeColorRule.html": { "href": "api/Hi.Coloring.RangeColorRule.html", "title": "Class RangeColorRule | HiAPI-C# 2025", - "summary": "Class RangeColorRule Namespace Hi.Coloring Assembly HiGeom.dll Defines a rule for mapping numeric values to colors based on a range. public class RangeColorRule : IMakeXmlSource, IGetRangeColorRule Inheritance object RangeColorRule Implements IMakeXmlSource IGetRangeColorRule 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RangeColorRule() Ctor. public RangeColorRule() RangeColorRule(double, double, RatioRgbFuncEnum) Constructor with range and color function specification. public RangeColorRule(double floor, double ceiling, RatioRgbFuncEnum ratioRgbFuncEnum = RatioRgbFuncEnum.NormalizedPositiveErf) Parameters floor double The lower bound of the range. ceiling double The upper bound of the range. ratioRgbFuncEnum RatioRgbFuncEnum The function to map ratio values to RGB colors. RangeColorRule(XElement) Ctor. public RangeColorRule(XElement src) Parameters src XElement XML Fields RatioRgbFuncEnum The function used to map ratio values to RGB colors. public RatioRgbFuncEnum RatioRgbFuncEnum Field Value RatioRgbFuncEnum Properties Ceiling Gets or sets the upper bound of the range. public double Ceiling { get; set; } Property Value double Floor Gets or sets the lower bound of the range. public double Floor { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods GetRangeColorRule() Gets the range color rule. public RangeColorRule GetRangeColorRule() Returns RangeColorRule The range color rule. GetRgb(double) Gets the RGB color for a given value based on the range and color function. public Vec3d GetRgb(double v) Parameters v double The value to convert to a color. Returns Vec3d RGB color vector. 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 RangeColorRule Namespace Hi.Coloring Assembly HiGeom.dll Defines a rule for mapping numeric values to colors based on a range. public class RangeColorRule : IMakeXmlSource, IGetRangeColorRule Inheritance object RangeColorRule Implements IMakeXmlSource IGetRangeColorRule 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RangeColorRule() Ctor. public RangeColorRule() RangeColorRule(double, double, RatioRgbFuncEnum) Constructor with range and color function specification. public RangeColorRule(double floor, double ceiling, RatioRgbFuncEnum ratioRgbFuncEnum = RatioRgbFuncEnum.NormalizedPositiveErf) Parameters floor double The lower bound of the range. ceiling double The upper bound of the range. ratioRgbFuncEnum RatioRgbFuncEnum The function to map ratio values to RGB colors. RangeColorRule(XElement) Ctor. public RangeColorRule(XElement src) Parameters src XElement XML Fields RatioRgbFuncEnum The function used to map ratio values to RGB colors. public RatioRgbFuncEnum RatioRgbFuncEnum Field Value RatioRgbFuncEnum Properties Ceiling Gets or sets the upper bound of the range. public double Ceiling { get; set; } Property Value double Floor Gets or sets the lower bound of the range. public double Floor { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods GetRangeColorRule() Gets the range color rule. public RangeColorRule GetRangeColorRule() Returns RangeColorRule The range color rule. GetRgb(double) Gets the RGB color for a given value based on the range and color function. public Vec3d GetRgb(double v) Parameters v double The value to convert to a color. Returns Vec3d RGB color vector. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Coloring.RatioRgbFuncEnum.html": { "href": "api/Hi.Coloring.RatioRgbFuncEnum.html", @@ -342,7 +342,7 @@ "api/Hi.Coloring.RgbSeed.html": { "href": "api/Hi.Coloring.RgbSeed.html", "title": "Class RgbSeed | HiAPI-C# 2025", - "summary": "Class RgbSeed Namespace Hi.Coloring Assembly HiGeom.dll A simple object contains RGB value. public class RgbSeed : IGetRgb, IMakeXmlSource Inheritance object RgbSeed Implements IGetRgb 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RgbSeed() Ctor. public RgbSeed() RgbSeed(Vec3d) Ctor. public RgbSeed(Vec3d rgb) Parameters rgb Vec3d RGB RgbSeed(XElement) Ctor. public RgbSeed(XElement src) Parameters src XElement XML Properties Rgb RGB. public Vec3d Rgb { get; set; } Property Value Vec3d XName Name for XML IO. public static string XName { get; } Property Value string Methods GetRgb() Get RGB. public Vec3d GetRgb() Returns Vec3d RGB 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 RgbSeed Namespace Hi.Coloring Assembly HiGeom.dll A simple object contains RGB value. public class RgbSeed : IGetRgb, IMakeXmlSource Inheritance object RgbSeed Implements IGetRgb 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RgbSeed() Ctor. public RgbSeed() RgbSeed(Vec3d) Ctor. public RgbSeed(Vec3d rgb) Parameters rgb Vec3d RGB RgbSeed(XElement) Ctor. public RgbSeed(XElement src) Parameters src XElement XML Properties Rgb RGB. public Vec3d Rgb { get; set; } Property Value Vec3d XName Name for XML IO. public static string XName { get; } Property Value string Methods GetRgb() Get RGB. public Vec3d GetRgb() Returns Vec3d RGB MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Coloring.html": { "href": "api/Hi.Coloring.html", @@ -362,7 +362,7 @@ "api/Hi.Common.BlockingTimer.html": { "href": "api/Hi.Common.BlockingTimer.html", "title": "Class BlockingTimer | HiAPI-C# 2025", - "summary": "Class BlockingTimer Namespace Hi.Common Assembly HiGeom.dll Timer use one task and delay each event call. The delay time is Period, counted from the previous trigger to the nest trigger. The first function call does no intending delay. If the execution time is over the Period, no delay between the triggers. public class BlockingTimer : IMakeXmlSource, IDisposable Inheritance object BlockingTimer Implements IMakeXmlSource 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BlockingTimer() Ctor. public BlockingTimer() BlockingTimer(TimeSpan) Initializes a new instance of the BlockingTimer class with the specified period. public BlockingTimer(TimeSpan period) Parameters period TimeSpan The time interval between timer events BlockingTimer(XElement) Constructor that initializes the timer from XML data. public BlockingTimer(XElement src) Parameters src XElement XML element containing timer configuration Fields XName XML element name for serialization. public static string XName Field Value string Properties Period The time period between timer events. public TimeSpan Period { get; set; } Property Value TimeSpan WorkingTask Gets the task that represents the timer's working process. public Task WorkingTask { get; } Property Value Task Methods 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 EnsureRunOnce() Ensures the timer runs at least once. public Task EnsureRunOnce() Returns Task The task representing the timer's working process 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. Start() Starts the timer in long-term mode. public Task Start() Returns Task The task representing the timer's working process Stop() Stops the timer and cancels any ongoing operations. public Task Stop() Returns Task The task representing the timer's working process Events Elapsed Event that is triggered when the timer elapses. public event Action Elapsed Event Type Action" + "summary": "Class BlockingTimer Namespace Hi.Common Assembly HiGeom.dll Timer use one task and delay each event call. The delay time is Period, counted from the previous trigger to the nest trigger. The first function call does no intending delay. If the execution time is over the Period, no delay between the triggers. public class BlockingTimer : IMakeXmlSource, IDisposable Inheritance object BlockingTimer Implements IMakeXmlSource 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BlockingTimer() Ctor. public BlockingTimer() BlockingTimer(TimeSpan) Initializes a new instance of the BlockingTimer class with the specified period. public BlockingTimer(TimeSpan period) Parameters period TimeSpan The time interval between timer events BlockingTimer(XElement) Constructor that initializes the timer from XML data. public BlockingTimer(XElement src) Parameters src XElement XML element containing timer configuration Fields XName XML element name for serialization. public static string XName Field Value string Properties Period The time period between timer events. public TimeSpan Period { get; set; } Property Value TimeSpan WorkingTask Gets the task that represents the timer's working process. public Task WorkingTask { get; } Property Value Task Methods 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 EnsureRunOnce() Ensures the timer runs at least once. public Task EnsureRunOnce() Returns Task The task representing the timer's working process MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Start() Starts the timer in long-term mode. public Task Start() Returns Task The task representing the timer's working process Stop() Stops the timer and cancels any ongoing operations. public Task Stop() Returns Task The task representing the timer's working process Events Elapsed Event that is triggered when the timer elapses. public event Action Elapsed Event Type Action" }, "api/Hi.Common.BytesUtil.html": { "href": "api/Hi.Common.BytesUtil.html", @@ -697,17 +697,17 @@ "api/Hi.Common.IndexSegment.html": { "href": "api/Hi.Common.IndexSegment.html", "title": "Class IndexSegment | HiAPI-C# 2025", - "summary": "Class IndexSegment Namespace Hi.Common Assembly HiGeom.dll Represents a segment of indices with a beginning (inclusive) and ending (exclusive> point. Used for defining segment of data in collections or arrays. public class IndexSegment : IEquatable, IMakeXmlSource Inheritance object IndexSegment Implements IEquatable IMakeXmlSource 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IndexSegment() Initializes a new instance of the IndexSegment class. public IndexSegment() IndexSegment(IndexSegment) Initializes a new instance of the IndexSegment class by copying another instance. public IndexSegment(IndexSegment src) Parameters src IndexSegment The source index segment to copy from. IndexSegment(int, int) Initializes a new instance of the IndexSegment class with the specified begin and end indices. public IndexSegment(int begin, int end) Parameters begin int The beginning index (inclusive). end int The ending index (exclusive). IndexSegment(XElement) Initializes a new instance of the IndexSegment class from an XML element. public IndexSegment(XElement src) Parameters src XElement The XML element containing the index segment data. Fields XName The XML element name used for serialization. public static string XName Field Value string begin Begin index. Inclusive. public int begin Field Value int end End index. Exclusive. public int end Field Value int Properties Begin Gets or sets the beginning index of the segment (inclusive). public int Begin { get; set; } Property Value int End Gets or sets the ending index of the segment (exclusive). public int End { get; set; } Property Value int Length Gets the length of the segment (End - Begin). public int Length { get; } Property Value int Methods Any() Determines whether this index segment contains any indices. public bool Any() Returns bool true if the segment contains any indices; otherwise, false. Contains(int) Determines whether this index segment contains the specified index. public bool Contains(int index) Parameters index int The index to check. Returns bool true if the index is within the segment; otherwise, false. Enumerate() Enumerates all indices within this segment. public IEnumerable Enumerate() Returns IEnumerable An enumerable collection of all indices within the segment. Equals(IndexSegment) Determines whether the specified index segment is equal to the current index segment. public bool Equals(IndexSegment other) Parameters other IndexSegment The index segment to compare with the current index segment. Returns bool true if the specified index segment is equal to the current index segment; otherwise, false. Equals(object) Determines whether the specified object is equal to the current index segment. public override bool Equals(object obj) Parameters obj object The object to compare with the current index segment. Returns bool true if the specified object is equal to the current index segment; otherwise, false. Expand(int) Expands this index segment to include the specified value if needed. public void Expand(int v) Parameters v int The value to include in the segment. GetHashCode() Returns a hash code for this index segment. public override int GetHashCode() Returns int A hash code for the current index segment. GetIndexSegment(IList, int, int, Func) Gets an index segment from a list of data items by the specific group index. public static IndexSegment GetIndexSegment(IList steps, int seekingStartListIndex, int targetGroupIndex, Func dataToGroupIndexFunc) Parameters steps IList The list of data items. seekingStartListIndex int The start step index for seeking. targetGroupIndex int The target segment key. dataToGroupIndexFunc Func A function that extracts a segmentkey from a data item. Returns IndexSegment An index segment representing the range of indices. Type Parameters TData The type of data items. 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 representation of this index segment. public override string ToString() Returns string A string representation of the current index segment." + "summary": "Class IndexSegment Namespace Hi.Common Assembly HiGeom.dll Represents a segment of indices with a beginning (inclusive) and ending (exclusive> point. Used for defining segment of data in collections or arrays. public class IndexSegment : IEquatable, IMakeXmlSource Inheritance object IndexSegment Implements IEquatable IMakeXmlSource 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IndexSegment() Initializes a new instance of the IndexSegment class. public IndexSegment() IndexSegment(IndexSegment) Initializes a new instance of the IndexSegment class by copying another instance. public IndexSegment(IndexSegment src) Parameters src IndexSegment The source index segment to copy from. IndexSegment(int, int) Initializes a new instance of the IndexSegment class with the specified begin and end indices. public IndexSegment(int begin, int end) Parameters begin int The beginning index (inclusive). end int The ending index (exclusive). IndexSegment(XElement) Initializes a new instance of the IndexSegment class from an XML element. public IndexSegment(XElement src) Parameters src XElement The XML element containing the index segment data. Fields XName The XML element name used for serialization. public static string XName Field Value string begin Begin index. Inclusive. public int begin Field Value int end End index. Exclusive. public int end Field Value int Properties Begin Gets or sets the beginning index of the segment (inclusive). public int Begin { get; set; } Property Value int End Gets or sets the ending index of the segment (exclusive). public int End { get; set; } Property Value int Length Gets the length of the segment (End - Begin). public int Length { get; } Property Value int Methods Any() Determines whether this index segment contains any indices. public bool Any() Returns bool true if the segment contains any indices; otherwise, false. Contains(int) Determines whether this index segment contains the specified index. public bool Contains(int index) Parameters index int The index to check. Returns bool true if the index is within the segment; otherwise, false. Enumerate() Enumerates all indices within this segment. public IEnumerable Enumerate() Returns IEnumerable An enumerable collection of all indices within the segment. Equals(IndexSegment) Determines whether the specified index segment is equal to the current index segment. public bool Equals(IndexSegment other) Parameters other IndexSegment The index segment to compare with the current index segment. Returns bool true if the specified index segment is equal to the current index segment; otherwise, false. Equals(object) Determines whether the specified object is equal to the current index segment. public override bool Equals(object obj) Parameters obj object The object to compare with the current index segment. Returns bool true if the specified object is equal to the current index segment; otherwise, false. Expand(int) Expands this index segment to include the specified value if needed. public void Expand(int v) Parameters v int The value to include in the segment. GetHashCode() Returns a hash code for this index segment. public override int GetHashCode() Returns int A hash code for the current index segment. GetIndexSegment(IList, int, int, Func) Gets an index segment from a list of data items by the specific group index. public static IndexSegment GetIndexSegment(IList steps, int seekingStartListIndex, int targetGroupIndex, Func dataToGroupIndexFunc) Parameters steps IList The list of data items. seekingStartListIndex int The start step index for seeking. targetGroupIndex int The target segment key. dataToGroupIndexFunc Func A function that extracts a segmentkey from a data item. Returns IndexSegment An index segment representing the range of indices. Type Parameters TData The type of data items. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string representation of this index segment. public override string ToString() Returns string A string representation of the current index segment." }, "api/Hi.Common.IntegerKeyDictionaryConverter-1.html": { "href": "api/Hi.Common.IntegerKeyDictionaryConverter-1.html", "title": "Class IntegerKeyDictionaryConverter | HiAPI-C# 2025", - "summary": "Class IntegerKeyDictionaryConverter Namespace Hi.Common Assembly HiGeom.dll Generic version of IntegerKeyDictionaryConverter that works with a specific value type. public class IntegerKeyDictionaryConverter : IMakeXmlSource Type Parameters TValue The type of values in the dictionary. Inheritance object IntegerKeyDictionaryConverter 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IntegerKeyDictionaryConverter() Ctor. public IntegerKeyDictionaryConverter() IntegerKeyDictionaryConverter(XElement) Ctor. public IntegerKeyDictionaryConverter(XElement src) Parameters src XElement XML Properties RawKeyList Dont modify. public List RawKeyList { get; } Property Value List RawKeyToIndex Dont modify. public Dictionary RawKeyToIndex { get; } Property Value Dictionary XName Name for XML IO. public static string XName { get; } Property Value string Methods GetIntegerKeyDictionary(Dictionary) Converts a dictionary with string keys to a dictionary with integer keys. public Dictionary GetIntegerKeyDictionary(Dictionary rawKeyDictionary) Parameters rawKeyDictionary Dictionary The dictionary with string keys to convert. Returns Dictionary A dictionary with integer keys. GetRestoredDictionary(Dictionary) Converts a dictionary with integer keys back to a dictionary with string keys. public Dictionary GetRestoredDictionary(Dictionary integerKeyDictionary) Parameters integerKeyDictionary Dictionary The dictionary with integer keys to convert. Returns Dictionary A dictionary with string keys. 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 IntegerKeyDictionaryConverter Namespace Hi.Common Assembly HiGeom.dll Generic version of IntegerKeyDictionaryConverter that works with a specific value type. public class IntegerKeyDictionaryConverter : IMakeXmlSource Type Parameters TValue The type of values in the dictionary. Inheritance object IntegerKeyDictionaryConverter 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IntegerKeyDictionaryConverter() Ctor. public IntegerKeyDictionaryConverter() IntegerKeyDictionaryConverter(XElement) Ctor. public IntegerKeyDictionaryConverter(XElement src) Parameters src XElement XML Properties RawKeyList Dont modify. public List RawKeyList { get; } Property Value List RawKeyToIndex Dont modify. public Dictionary RawKeyToIndex { get; } Property Value Dictionary XName Name for XML IO. public static string XName { get; } Property Value string Methods GetIntegerKeyDictionary(Dictionary) Converts a dictionary with string keys to a dictionary with integer keys. public Dictionary GetIntegerKeyDictionary(Dictionary rawKeyDictionary) Parameters rawKeyDictionary Dictionary The dictionary with string keys to convert. Returns Dictionary A dictionary with integer keys. GetRestoredDictionary(Dictionary) Converts a dictionary with integer keys back to a dictionary with string keys. public Dictionary GetRestoredDictionary(Dictionary integerKeyDictionary) Parameters integerKeyDictionary Dictionary The dictionary with integer keys to convert. Returns Dictionary A dictionary with string keys. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Common.IntegerKeyDictionaryConverter.html": { "href": "api/Hi.Common.IntegerKeyDictionaryConverter.html", "title": "Class IntegerKeyDictionaryConverter | HiAPI-C# 2025", - "summary": "Class IntegerKeyDictionaryConverter Namespace Hi.Common Assembly HiGeom.dll Converts dictionaries with string keys to dictionaries with integer keys for more efficient storage and lookup. public class IntegerKeyDictionaryConverter : IMakeXmlSource Inheritance object IntegerKeyDictionaryConverter 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IntegerKeyDictionaryConverter() Initializes a new instance of the IntegerKeyDictionaryConverter class. public IntegerKeyDictionaryConverter() IntegerKeyDictionaryConverter(XElement) Initializes a new instance of the IntegerKeyDictionaryConverter class from XML. public IntegerKeyDictionaryConverter(XElement src) Parameters src XElement XML element containing the converter data. Properties RawKeyList Dont modify. public List RawKeyList { get; } Property Value List RawKeyToIndex Dont modify. public Dictionary RawKeyToIndex { get; } Property Value Dictionary XName Name for XML IO. public static string XName { get; } Property Value string Methods GetIntegerKeyDictionary(Dictionary) Converts a dictionary with string keys to a dictionary with integer keys. public Dictionary GetIntegerKeyDictionary(Dictionary rawKeyDictionary) Parameters rawKeyDictionary Dictionary The dictionary with string keys to convert. Returns Dictionary A dictionary with integer keys. GetRestoredDictionary(Dictionary) Converts a dictionary with integer keys back to a dictionary with string keys. public Dictionary GetRestoredDictionary(Dictionary integerKeyDictionary) Parameters integerKeyDictionary Dictionary The dictionary with integer keys to convert. Returns Dictionary A dictionary with string keys. 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 IntegerKeyDictionaryConverter Namespace Hi.Common Assembly HiGeom.dll Converts dictionaries with string keys to dictionaries with integer keys for more efficient storage and lookup. public class IntegerKeyDictionaryConverter : IMakeXmlSource Inheritance object IntegerKeyDictionaryConverter 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IntegerKeyDictionaryConverter() Initializes a new instance of the IntegerKeyDictionaryConverter class. public IntegerKeyDictionaryConverter() IntegerKeyDictionaryConverter(XElement) Initializes a new instance of the IntegerKeyDictionaryConverter class from XML. public IntegerKeyDictionaryConverter(XElement src) Parameters src XElement XML element containing the converter data. Properties RawKeyList Dont modify. public List RawKeyList { get; } Property Value List RawKeyToIndex Dont modify. public Dictionary RawKeyToIndex { get; } Property Value Dictionary XName Name for XML IO. public static string XName { get; } Property Value string Methods GetIntegerKeyDictionary(Dictionary) Converts a dictionary with string keys to a dictionary with integer keys. public Dictionary GetIntegerKeyDictionary(Dictionary rawKeyDictionary) Parameters rawKeyDictionary Dictionary The dictionary with string keys to convert. Returns Dictionary A dictionary with integer keys. GetRestoredDictionary(Dictionary) Converts a dictionary with integer keys back to a dictionary with string keys. public Dictionary GetRestoredDictionary(Dictionary integerKeyDictionary) Parameters integerKeyDictionary Dictionary The dictionary with integer keys to convert. Returns Dictionary A dictionary with string keys. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Common.InternalException.html": { "href": "api/Hi.Common.InternalException.html", @@ -937,7 +937,7 @@ "api/Hi.Common.RoutineBlocker.html": { "href": "api/Hi.Common.RoutineBlocker.html", "title": "Class RoutineBlocker | HiAPI-C# 2025", - "summary": "Class RoutineBlocker Namespace Hi.Common Assembly HiGeom.dll Block the thread to the given delay from the previous block. public class RoutineBlocker : IMakeXmlSource, IDisposable Inheritance object RoutineBlocker Implements IMakeXmlSource 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RoutineBlocker() Constructor public RoutineBlocker() RoutineBlocker(TimeSpan) Initializes a new instance of the RoutineBlocker class with the specified period. public RoutineBlocker(TimeSpan period) Parameters period TimeSpan The time period between blocks RoutineBlocker(XElement) Initializes a new instance of the RoutineBlocker class from an XML element. public RoutineBlocker(XElement src) Parameters src XElement The XML element containing the blocker configuration Fields XName Gets the XML element name used for serialization. public static string XName Field Value string Properties Period Delay time between each previous Block(). public TimeSpan Period { get; set; } Property Value TimeSpan Methods Block() Delay the thread. The delay time is Period, counted from the previous Block() to the current Block(). The first function call does no delay. If the time between two Block() is over Period, the function call does no delay. public void Block() 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 HasToBlock() If calling Block() make thread delay, return true; otherwise, false. public bool HasToBlock() Returns bool Has to block IsEnabled() Enable the Block() function. public bool IsEnabled() 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. SetDisable() Disables the blocker, canceling any pending operations. public void SetDisable() SetEnable(Action) Enable the Block() function. public void SetEnable(Action disablingCallback = null) Parameters disablingCallback Action" + "summary": "Class RoutineBlocker Namespace Hi.Common Assembly HiGeom.dll Block the thread to the given delay from the previous block. public class RoutineBlocker : IMakeXmlSource, IDisposable Inheritance object RoutineBlocker Implements IMakeXmlSource 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) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RoutineBlocker() Constructor public RoutineBlocker() RoutineBlocker(TimeSpan) Initializes a new instance of the RoutineBlocker class with the specified period. public RoutineBlocker(TimeSpan period) Parameters period TimeSpan The time period between blocks RoutineBlocker(XElement) Initializes a new instance of the RoutineBlocker class from an XML element. public RoutineBlocker(XElement src) Parameters src XElement The XML element containing the blocker configuration Fields XName Gets the XML element name used for serialization. public static string XName Field Value string Properties Period Delay time between each previous Block(). public TimeSpan Period { get; set; } Property Value TimeSpan Methods Block() Delay the thread. The delay time is Period, counted from the previous Block() to the current Block(). The first function call does no delay. If the time between two Block() is over Period, the function call does no delay. public void Block() 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 HasToBlock() If calling Block() make thread delay, return true; otherwise, false. public bool HasToBlock() Returns bool Has to block IsEnabled() Enable the Block() function. public bool IsEnabled() 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetDisable() Disables the blocker, canceling any pending operations. public void SetDisable() SetEnable(Action) Enable the Block() function. public void SetEnable(Action disablingCallback = null) Parameters disablingCallback Action" }, "api/Hi.Common.SearchResult.html": { "href": "api/Hi.Common.SearchResult.html", @@ -1007,17 +1007,17 @@ "api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html": { "href": "api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html", "title": "Delegate XFactory.XGeneratorDelegate | HiAPI-C# 2025", - "summary": "Delegate XFactory.XGeneratorDelegate Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Delegate for generating objects from XML elements with relative file path. public delegate object XFactory.XGeneratorDelegate(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths relFile string The relative file path progress IProgress Progress reporter for the XML parsing chain res object[] Additional parameters for generation Returns object The generated 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 Note that the design pattern of seperating BaseDirectory and RelativePath is for easy data package moving. The pattern assume the BaseDirectory can be changed if all the content in the BaseDirectory is changed to the destinate directory." + "summary": "Delegate XFactory.XGeneratorDelegate Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Delegate for generating an object from an XML element with relative file path context. public delegate object XFactory.XGeneratorDelegate(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement The source XML element. baseDirectory string The base directory for resolving paths. relFile string The relative file path. progress IProgress Progress reporter for the XML parsing chain. res object[] Additional parameters for generation. Returns object The generated 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 Separating baseDirectory and relFile keeps data packages relocatable: moving the whole base directory only requires updating the directory string, not every internal path." }, "api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html": { "href": "api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html", "title": "Delegate XFactory.XmlExceptionDelegate | HiAPI-C# 2025", - "summary": "Delegate XFactory.XmlExceptionDelegate Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Delegate for handling XML exceptions during generation. public delegate void XFactory.XmlExceptionDelegate(string relPath, Exception exception) Parameters relPath string The relative path where the exception occurred exception Exception The exception that was thrown Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) 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": "Delegate XFactory.XmlExceptionDelegate Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Delegate for handling XML exceptions during generation. public delegate void XFactory.XmlExceptionDelegate(string relPath, Exception exception) Parameters relPath string The relative path where the exception occurred. exception Exception The exception that was thrown. Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) 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.Common.XmlUtils.XFactory.html": { "href": "api/Hi.Common.XmlUtils.XFactory.html", "title": "Class XFactory | HiAPI-C# 2025", - "summary": "Class XFactory Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Factory class for generating objects from XML elements using registered generator functions. public static class XFactory Inheritance object XFactory Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Generator functions must be added to Generators to enable the factory to create objects from XML. Properties Generators Gets or sets the dictionary mapping XML element names to generator functions with relative file path. public static Dictionary Generators { get; set; } Property Value Dictionary Methods GenByChild(XElement, string, IProgress, bool, object[]) Generates an object of type T from the first child element of the provided XML element. This overload discards the relative file path output. public static T GenByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns T Type Parameters T GenByChild(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from the first child element of the provided XML element. public static T GenByChild(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The parent XML element containing the child to process baseDirectory string The base directory for resolving paths relFile string Output parameter that receives the relative file path if src is a file reference, or null otherwise progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T, or null if src is null Type Parameters T The type of object to generate GenByFile(string, string, IProgress, bool, object[]) Generates an object of type T from an XML file. public static T GenByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters baseDirectory string The base directory for resolving paths relFile string The relative file path to the XML file progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T, or null if relFile is null Type Parameters T The type of object to generate GenFileRefSourceByChild(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from the first child element of the provided XML element. public static FileRefSource GenFileRefSourceByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSourceByFile(string, string, IProgress, bool, object[]) Generates a FileRefSource from an XML file. public static FileRefSource GenFileRefSourceByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters baseDirectory string relFile string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSource(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from an XML element. public static FileRefSource GenFileRefSource(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T Gen(XElement, string, IProgress, bool, object[]) Generates an object of type T from an XML element. This overload discards the relative file path output. public static T Gen(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T Type Parameters T The type of object to generate Gen(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from an XML element. public static T Gen(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths relFile string Output parameter that receives the relative file path if src is a file reference, or null otherwise progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T Type Parameters T The type of object to generate" + "summary": "Class XFactory Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Factory for generating objects from XML elements using registered generator functions. public class XFactory Inheritance object XFactory 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 Each XFactory instance owns its own Generators registry. A process-wide Default singleton serves the common case (single shared factory across the simulation pipeline); other instances can be created for test isolation or parallel pipelines that need disjoint registries. Types that participate in XML round-trip expose a public static void Reg(XFactory factory = null) method that adds themselves (and chains Reg(factory) on dependents) to the given factory's Generators. Boot roots (e.g. LocalProjectService.Reg()) call the top-level Reg() once at startup with the default factory. The static Gen / GenByChild / GenByFile entry points always read from Default. Callers that need to deserialize from a custom factory's registry must look up the delegate via factory.Generators[xname] directly. Properties Default Process-wide default factory used by the static Gen family. Reg-style methods register here when called with no explicit factory argument. public static XFactory Default { get; } Property Value XFactory Generators XML-name → generator-function map for this factory instance. Populated by each type's Reg(this) call. public Dictionary Generators { get; } Property Value Dictionary Methods GenByChild(XElement, string, IProgress, bool, object[]) Generates an object of type T from the first child element (discards relative file path). public static T GenByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns T Type Parameters T GenByChild(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from the first child element of the provided XML element. public static T GenByChild(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement baseDirectory string relFile string progress IProgress enableRebase bool res object[] Returns T Type Parameters T GenByFile(string, string, IProgress, bool, object[]) Generates an object of type T from an XML file. public static T GenByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters baseDirectory string relFile string progress IProgress enableRebase bool res object[] Returns T Type Parameters T GenFileRefSourceByChild(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from the first child element. public static FileRefSource GenFileRefSourceByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSourceByFile(string, string, IProgress, bool, object[]) Generates a FileRefSource from an XML file. public static FileRefSource GenFileRefSourceByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters baseDirectory string relFile string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSource(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from an XML element. public static FileRefSource GenFileRefSource(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T Gen(XElement, string, IProgress, bool, object[]) Generates an object of type T from an XML element (discards relative file path). public static T Gen(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns T Type Parameters T Gen(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from an XML element using Default. public static T Gen(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement baseDirectory string relFile string progress IProgress enableRebase bool res object[] Returns T Type Parameters T" }, "api/Hi.Common.XmlUtils.XmlUtil.html": { "href": "api/Hi.Common.XmlUtils.XmlUtil.html", @@ -1027,7 +1027,7 @@ "api/Hi.Common.XmlUtils.html": { "href": "api/Hi.Common.XmlUtils.html", "title": "Namespace Hi.Common.XmlUtils | HiAPI-C# 2025", - "summary": "Namespace Hi.Common.XmlUtils Classes FileRefSource A class that combines an XML-serializable data object with its source file path. ProjectApiVersion 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(). XFactory Factory class for generating objects from XML elements using registered generator functions. XmlUtil Utility for managing XML. Interfaces IMakeXmlSource Interface for objects that can be serialized to XML format. IToXElement Interface of ToXElement(). Which can be represented by a single XElement. Delegates SetFileDelegate Delegate for setting the file path during XML operations. XFactory.XGeneratorDelegate Delegate for generating objects from XML elements with relative file path. XFactory.XmlExceptionDelegate Delegate for handling XML exceptions during generation." + "summary": "Namespace Hi.Common.XmlUtils Classes FileRefSource A class that combines an XML-serializable data object with its source file path. ProjectApiVersion 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(). XFactory Factory for generating objects from XML elements using registered generator functions. XmlUtil Utility for managing XML. Interfaces IMakeXmlSource Interface for objects that can be serialized to XML format. IToXElement Interface of ToXElement(). Which can be represented by a single XElement. Delegates SetFileDelegate Delegate for setting the file path during XML operations. XFactory.XGeneratorDelegate Delegate for generating an object from an XML element with relative file path context. XFactory.XmlExceptionDelegate Delegate for handling XML exceptions during generation." }, "api/Hi.Common.html": { "href": "api/Hi.Common.html", @@ -1152,7 +1152,7 @@ "api/Hi.Disp.Flag.CoordinateDrawing.html": { "href": "api/Hi.Disp.Flag.CoordinateDrawing.html", "title": "Class CoordinateDrawing | HiAPI-C# 2025", - "summary": "Class CoordinateDrawing Namespace Hi.Disp.Flag Assembly HiDisp.dll Draw a Cartesian Coordinate. public class CoordinateDrawing : IDisplayee, IExpandToBox3d, IDisposable, IMakeXmlSource Inheritance object CoordinateDrawing Implements IDisplayee IExpandToBox3d IDisposable 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) DispUtil.Display(IDisplayee, Bind, Mat4d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CoordinateDrawing() Ctor. public CoordinateDrawing() CoordinateDrawing(string) Ctor with setter of TextAtOrigin. public CoordinateDrawing(string textAtOrigin) Parameters textAtOrigin string text at origin CoordinateDrawing(XElement) Ctor. public CoordinateDrawing(XElement src) Parameters src XElement XML Properties DimensionInPixels public double DimensionInPixels { get; set; } Property Value double Edge length in pixels. HslOffset public static Vec3d HslOffset { get; set; } Property Value Vec3d HSL offset for coloring this. TextAtOrigin public string TextAtOrigin { get; set; } Property Value string Text displays at the origin of this coordinate. 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. Display(Bind, string) Displays a coordinate drawing with the specified binding context and tag. public static void Display(Bind bind, string tag) Parameters bind Bind The binding context to display on. tag string The tag text to display at the origin. 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 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 CoordinateDrawing Namespace Hi.Disp.Flag Assembly HiDisp.dll Draw a Cartesian Coordinate. public class CoordinateDrawing : IDisplayee, IExpandToBox3d, IDisposable, IMakeXmlSource Inheritance object CoordinateDrawing Implements IDisplayee IExpandToBox3d IDisposable 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) DispUtil.Display(IDisplayee, Bind, Mat4d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CoordinateDrawing() Ctor. public CoordinateDrawing() CoordinateDrawing(string) Ctor with setter of TextAtOrigin. public CoordinateDrawing(string textAtOrigin) Parameters textAtOrigin string text at origin CoordinateDrawing(XElement) Ctor. public CoordinateDrawing(XElement src) Parameters src XElement XML Properties DimensionInPixels public double DimensionInPixels { get; set; } Property Value double Edge length in pixels. HslOffset public static Vec3d HslOffset { get; set; } Property Value Vec3d HSL offset for coloring this. TextAtOrigin public string TextAtOrigin { get; set; } Property Value string Text displays at the origin of this coordinate. 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. Display(Bind, string) Displays a coordinate drawing with the specified binding context and tag. public static void Display(Bind bind, string tag) Parameters bind Bind The binding context to display on. tag string The tag text to display at the origin. 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 MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Disp.Flag.CubicalFlagDrawing.html": { "href": "api/Hi.Disp.Flag.CubicalFlagDrawing.html", @@ -1352,7 +1352,7 @@ "api/Hi.Geom.Box2d.html": { "href": "api/Hi.Geom.Box2d.html", "title": "Class Box2d | HiAPI-C# 2025", - "summary": "Class Box2d Namespace Hi.Geom Assembly HiGeom.dll 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. public class Box2d : IExpandToBox2d, IEquatable, IBinaryIo, IWriteBin, IFormattable Inheritance object Box2d Implements IExpandToBox2d IEquatable IBinaryIo IWriteBin IFormattable Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods BinIoUtil.ToBytes(IWriteBin) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 Box2d() Ctor. public Box2d() Box2d(NoInit) Ctor. The Ctor keeps Min and Max to null. public Box2d(Box2d.NoInit noInit) Parameters noInit Box2d.NoInit Box2d(params IExpandToBox2d[]) Initializes a new instance of the Box2d class that encompasses all the specified objects. public Box2d(params IExpandToBox2d[] src) Parameters src IExpandToBox2d[] The objects to include in the box. Box2d(Vec2d, Vec2d) Ctor. public Box2d(Vec2d min, Vec2d max) Parameters min Vec2d Min max Vec2d Max Box2d(box2d) Ctor. public Box2d(box2d src) Parameters src box2d src Box2d(IEnumerable) Initializes a new instance of the Box2d class that encompasses all the objects in the specified collection. public Box2d(IEnumerable src) Parameters src IEnumerable The collection of objects to include in the box. Box2d(double, double, double, double) Initializes a new instance of the Box2d class with the specified minimum and maximum coordinates. public Box2d(double minx, double miny, double maxx, double maxy) Parameters minx double The minimum X coordinate. miny double The minimum Y coordinate. maxx double The maximum X coordinate. maxy double The maximum Y coordinate. Box2d(BinaryReader) Initializes a new instance of the Box2d class from binary data. public Box2d(BinaryReader reader) Parameters reader BinaryReader The binary reader to read the data from. Box2d(XElement) Ctor. public Box2d(XElement src) Parameters src XElement XML Properties Center Center public Vec2d Center { get; } Property Value Vec2d CenterUnitBox Generate a center unit box which min~max is (-0.5,-0.5,-0.5)~(-0.5,0.5,0.5). public static Box2d CenterUnitBox { get; } Property Value Box2d DiagonalLength Diagonal length. public double DiagonalLength { get; } Property Value double Dim Dimension. public Vec2d Dim { get; } Property Value Vec2d HasVolume Gets a value indicating whether this box has a non-zero volume. public bool HasVolume { get; } Property Value bool IsAllNaN Determines whether all coordinates of this box are NaN. public bool IsAllNaN { get; } Property Value bool IsFinite True if the box is finite. public bool IsFinite { get; } Property Value bool IsReversedPoleBox True if the box is ReversedPoleBox public bool IsReversedPoleBox { get; } Property Value bool Max Maximum point of the box. public Vec2d Max { get; set; } Property Value Vec2d Min Minimum point of the box. public Vec2d Min { get; set; } Property Value Vec2d NaN Generate a nan box which min~max is (nan,nan,nan)~(nan,nan,nan). public static Box2d NaN { get; } Property Value Box2d NativeByteSize Gets the size in bytes of the native representation of this box. public static int NativeByteSize { get; } Property Value int ReversedPoleBox Generate a reversed pole box which min~max is (∞,∞,∞)~(-∞,-∞,-∞). public static Box2d ReversedPoleBox { get; } Property Value Box2d UnitBox Generate a unit box which min~max is (0,0,0)~(1,1,1). public static Box2d UnitBox { get; } Property Value Box2d Volume Gets the volume (area) of this box. public double Volume { get; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZeroBox Generate a zero box which min~max is (0,0,0)~(0,0,0). public static Box2d ZeroBox { get; } Property Value Box2d Methods ApexAt(int) Get Apex at the box. public Vec2d ApexAt(int index) Parameters index int index 0~7. all of 8 apex. Returns Vec2d Equals(Box2d) Indicates whether the current object is equal to another object of the same type. public bool Equals(Box2d other) Parameters other Box2d 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. Expand(Box2d) Expands this box to include the specified box. public Box2d Expand(Box2d src) Parameters src Box2d The box to include. Returns Box2d This box instance after expansion. Expand(Vec2d) Expands this box to include the specified point. public Box2d Expand(Vec2d p) Parameters p Vec2d The point to include in the box. Returns Box2d This box instance after expansion. ExpandToBox2d(Box2d) Expands the specified destination box to include this box. public void ExpandToBox2d(Box2d dst) Parameters dst Box2d The destination box to expand. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. IsOverlapped(Box2d) Is the box overlapped to otherBox. public bool IsOverlapped(Box2d otherBox) Parameters otherBox Box2d other box Returns bool is overlapped MakeXmlSource(string) public XElement MakeXmlSource(string baseDirectory) Parameters baseDirectory string Returns XElement ReadBin(BinaryReader) Reads binary data to initialize the object. public void ReadBin(BinaryReader reader) Parameters reader BinaryReader The binary reader to read from Scale(double) Scale the box from the coordinate origin. The operation is equal to: Min *= s; Max *= s; public Box2d Scale(double s) Parameters s double scale Returns Box2d this ScaleFromCenter(double) Scales this box from its center by the specified factor. public Box2d ScaleFromCenter(double s) Parameters s double The scale factor. Returns Box2d This box instance after scaling. Set(Box2d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box2d Set(Box2d src) Parameters src Box2d src Returns Box2d this Set(box2d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box2d Set(box2d src) Parameters src box2d src Returns Box2d this Set(double, double, double, double) Sets the minimum and maximum coordinates of this box. public Box2d Set(double minx, double miny, double maxx, double maxy) Parameters minx double The minimum X coordinate. miny double The minimum Y coordinate. maxx double The maximum X coordinate. maxy double The maximum Y coordinate. Returns Box2d This box instance. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToString(string, IFormatProvider) Returns a string representation of the box formatted according to the specified format. public string ToString(string format, IFormatProvider formatProvider) Parameters format string The format to use for each component formatProvider IFormatProvider The format provider to use Returns string A formatted string representation of the box Translate(Vec2d) Translate the box. public Box2d Translate(Vec2d vec) Parameters vec Vec2d translation vector Returns Box2d this WriteBin(BinaryWriter) Writes the box data to a binary writer. public void WriteBin(BinaryWriter writer) Parameters writer BinaryWriter The binary writer to write the data to." + "summary": "Class Box2d Namespace Hi.Geom Assembly HiGeom.dll 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. public class Box2d : IExpandToBox2d, IEquatable, IBinaryIo, IWriteBin, IFormattable Inheritance object Box2d Implements IExpandToBox2d IEquatable IBinaryIo IWriteBin IFormattable Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods BinIoUtil.ToBytes(IWriteBin) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 Box2d() Ctor. public Box2d() Box2d(NoInit) Ctor. The Ctor keeps Min and Max to null. public Box2d(Box2d.NoInit noInit) Parameters noInit Box2d.NoInit Box2d(params IExpandToBox2d[]) Initializes a new instance of the Box2d class that encompasses all the specified objects. public Box2d(params IExpandToBox2d[] src) Parameters src IExpandToBox2d[] The objects to include in the box. Box2d(Vec2d, Vec2d) Ctor. public Box2d(Vec2d min, Vec2d max) Parameters min Vec2d Min max Vec2d Max Box2d(box2d) Ctor. public Box2d(box2d src) Parameters src box2d src Box2d(IEnumerable) Initializes a new instance of the Box2d class that encompasses all the objects in the specified collection. public Box2d(IEnumerable src) Parameters src IEnumerable The collection of objects to include in the box. Box2d(double, double, double, double) Initializes a new instance of the Box2d class with the specified minimum and maximum coordinates. public Box2d(double minx, double miny, double maxx, double maxy) Parameters minx double The minimum X coordinate. miny double The minimum Y coordinate. maxx double The maximum X coordinate. maxy double The maximum Y coordinate. Box2d(BinaryReader) Initializes a new instance of the Box2d class from binary data. public Box2d(BinaryReader reader) Parameters reader BinaryReader The binary reader to read the data from. Box2d(XElement) Ctor. public Box2d(XElement src) Parameters src XElement XML Properties Center Center public Vec2d Center { get; } Property Value Vec2d CenterUnitBox Generate a center unit box which min~max is (-0.5,-0.5,-0.5)~(-0.5,0.5,0.5). public static Box2d CenterUnitBox { get; } Property Value Box2d DiagonalLength Diagonal length. public double DiagonalLength { get; } Property Value double Dim Dimension. public Vec2d Dim { get; } Property Value Vec2d HasVolume Gets a value indicating whether this box has a non-zero volume. public bool HasVolume { get; } Property Value bool IsAllNaN Determines whether all coordinates of this box are NaN. public bool IsAllNaN { get; } Property Value bool IsFinite True if the box is finite. public bool IsFinite { get; } Property Value bool IsReversedPoleBox True if the box is ReversedPoleBox public bool IsReversedPoleBox { get; } Property Value bool Max Maximum point of the box. public Vec2d Max { get; set; } Property Value Vec2d Min Minimum point of the box. public Vec2d Min { get; set; } Property Value Vec2d NaN Generate a nan box which min~max is (nan,nan,nan)~(nan,nan,nan). public static Box2d NaN { get; } Property Value Box2d NativeByteSize Gets the size in bytes of the native representation of this box. public static int NativeByteSize { get; } Property Value int ReversedPoleBox Generate a reversed pole box which min~max is (∞,∞,∞)~(-∞,-∞,-∞). public static Box2d ReversedPoleBox { get; } Property Value Box2d UnitBox Generate a unit box which min~max is (0,0,0)~(1,1,1). public static Box2d UnitBox { get; } Property Value Box2d Volume Gets the volume (area) of this box. public double Volume { get; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZeroBox Generate a zero box which min~max is (0,0,0)~(0,0,0). public static Box2d ZeroBox { get; } Property Value Box2d Methods ApexAt(int) Get Apex at the box. public Vec2d ApexAt(int index) Parameters index int index 0~7. all of 8 apex. Returns Vec2d Equals(Box2d) Indicates whether the current object is equal to another object of the same type. public bool Equals(Box2d other) Parameters other Box2d 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. Expand(Box2d) Expands this box to include the specified box. public Box2d Expand(Box2d src) Parameters src Box2d The box to include. Returns Box2d This box instance after expansion. Expand(Vec2d) Expands this box to include the specified point. public Box2d Expand(Vec2d p) Parameters p Vec2d The point to include in the box. Returns Box2d This box instance after expansion. ExpandToBox2d(Box2d) Expands the specified destination box to include this box. public void ExpandToBox2d(Box2d dst) Parameters dst Box2d The destination box to expand. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. IsOverlapped(Box2d) Is the box overlapped to otherBox. public bool IsOverlapped(Box2d otherBox) Parameters otherBox Box2d other box Returns bool is overlapped MakeXmlSource(string) public XElement MakeXmlSource(string baseDirectory) Parameters baseDirectory string Returns XElement ReadBin(BinaryReader) Reads binary data to initialize the object. public void ReadBin(BinaryReader reader) Parameters reader BinaryReader The binary reader to read from Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Scale(double) Scale the box from the coordinate origin. The operation is equal to: Min *= s; Max *= s; public Box2d Scale(double s) Parameters s double scale Returns Box2d this ScaleFromCenter(double) Scales this box from its center by the specified factor. public Box2d ScaleFromCenter(double s) Parameters s double The scale factor. Returns Box2d This box instance after scaling. Set(Box2d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box2d Set(Box2d src) Parameters src Box2d src Returns Box2d this Set(box2d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box2d Set(box2d src) Parameters src box2d src Returns Box2d this Set(double, double, double, double) Sets the minimum and maximum coordinates of this box. public Box2d Set(double minx, double miny, double maxx, double maxy) Parameters minx double The minimum X coordinate. miny double The minimum Y coordinate. maxx double The maximum X coordinate. maxy double The maximum Y coordinate. Returns Box2d This box instance. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToString(string, IFormatProvider) Returns a string representation of the box formatted according to the specified format. public string ToString(string format, IFormatProvider formatProvider) Parameters format string The format to use for each component formatProvider IFormatProvider The format provider to use Returns string A formatted string representation of the box Translate(Vec2d) Translate the box. public Box2d Translate(Vec2d vec) Parameters vec Vec2d translation vector Returns Box2d this WriteBin(BinaryWriter) Writes the box data to a binary writer. public void WriteBin(BinaryWriter writer) Parameters writer BinaryWriter The binary writer to write the data to." }, "api/Hi.Geom.Box3d.NoInit.html": { "href": "api/Hi.Geom.Box3d.NoInit.html", @@ -1362,12 +1362,12 @@ "api/Hi.Geom.Box3d.html": { "href": "api/Hi.Geom.Box3d.html", "title": "Class Box3d | HiAPI-C# 2025", - "summary": "Class Box3d Namespace Hi.Geom Assembly HiGeom.dll 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. public class Box3d : IExpandToBox3d, IEquatable, IStlSource, IGetStl, IMakeXmlSource, IBinaryIo, IWriteBin, IDuplicate, IFormattable, IToPresentDto Inheritance object Box3d Implements IExpandToBox3d IEquatable IStlSource IGetStl IMakeXmlSource IBinaryIo IWriteBin IDuplicate IFormattable IToPresentDto Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods BinIoUtil.ToBytes(IWriteBin) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors Box3d() Ctor. public Box3d() Box3d(NoInit) Ctor. The Ctor keeps Min and Max to null. public Box3d(Box3d.NoInit noInit) Parameters noInit Box3d.NoInit Box3d(params IExpandToBox3d[]) Creates a box that encompasses all the provided expandable objects. public Box3d(params IExpandToBox3d[] src) Parameters src IExpandToBox3d[] Array of objects that can expand to a box Box3d(Vec3d, Vec3d) Ctor. public Box3d(Vec3d min, Vec3d max) Parameters min Vec3d Min max Vec3d Max Box3d(box3d) Ctor. public Box3d(box3d src) Parameters src box3d src Box3d(IEnumerable) Creates a box that encompasses all the provided expandable objects. public Box3d(IEnumerable src) Parameters src IEnumerable Collection of objects that can expand to a box Box3d(double, double, double, double, double, double) Creates a box with the specified minimum and maximum coordinates. public Box3d(double minx, double miny, double minz, double maxx, double maxy, double maxz) Parameters minx double Minimum X coordinate miny double Minimum Y coordinate minz double Minimum Z coordinate maxx double Maximum X coordinate maxy double Maximum Y coordinate maxz double Maximum Z coordinate Box3d(BinaryReader) Creates a box from binary data. public Box3d(BinaryReader reader) Parameters reader BinaryReader Binary reader to read the box data from Box3d(XElement) Ctor. public Box3d(XElement src) Parameters src XElement XML Properties BottomCenter Center of the bottom surface. public Vec3d BottomCenter { get; } Property Value Vec3d BottomView Gets a transformation matrix for viewing the box from the bottom. public Mat4d BottomView { get; } Property Value Mat4d Center Center public Vec3d Center { get; } Property Value Vec3d CenterUnitBox Generate a center unit box which min~max is (-0.5,-0.5,-0.5)~(0.5,0.5,0.5). public static Box3d CenterUnitBox { get; } Property Value Box3d DiagonalLength Diagonal length. public double DiagonalLength { get; } Property Value double Dim Dimension. public Vec3d Dim { get; } Property Value Vec3d FrontView Gets a transformation matrix for viewing the box from the front. public Mat4d FrontView { get; } Property Value Mat4d HasVolume Checks if the box has a positive volume (all dimensions are greater than zero). public bool HasVolume { get; } Property Value bool InfiniteBox Generate a infinite box which min~max is (-∞,-∞,-∞)~(∞,∞,∞). public static Box3d InfiniteBox { get; } Property Value Box3d IsAllNaN True if all components of Min and Max are NaN. public bool IsAllNaN { get; } Property Value bool IsFinite True if the box is finite. public bool IsFinite { get; } Property Value bool IsReversedPoleBox True if the box is ReversedPoleBox public bool IsReversedPoleBox { get; } Property Value bool IsometricView Gets a transformation matrix for viewing the box from an isometric perspective. public Mat4d IsometricView { get; } Property Value Mat4d LeftSideView Gets a transformation matrix for viewing the box from the left side. public Mat4d LeftSideView { get; } Property Value Mat4d Max Maximum point of the box. public Vec3d Max { get; set; } Property Value Vec3d Min Minimum point of the box. public Vec3d Min { get; set; } Property Value Vec3d NaN Generate a nan box which min~max is (nan,nan,nan)~(nan,nan,nan). public static Box3d NaN { get; } Property Value Box3d NativeByteSize Gets the native byte size of a Box3d (2 Vec3d objects). public static int NativeByteSize { get; } Property Value int RearView Gets a transformation matrix for viewing the box from the rear. public Mat4d RearView { get; } Property Value Mat4d ReversedPoleBox Generate a reversed pole box which min~max is (∞,∞,∞)~(-∞,-∞,-∞). public static Box3d ReversedPoleBox { get; } Property Value Box3d RightSideView Gets a transformation matrix for viewing the box from the right side. public Mat4d RightSideView { get; } Property Value Mat4d TopCenter Center of the top surface. public Vec3d TopCenter { get; } Property Value Vec3d TopView Gets a transformation matrix for viewing the box from the top. public Mat4d TopView { get; } Property Value Mat4d UnitBox Generate a unit box which min~max is (0,0,0)~(1,1,1). public static Box3d UnitBox { get; } Property Value Box3d Volume Gets the volume of the box. public double Volume { get; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZeroBox Generate a zero box which min~max is (0,0,0)~(0,0,0). public static Box3d ZeroBox { get; } Property Value Box3d Methods ApexAt(int) Get Apex at the box. public Vec3d ApexAt(int index) Parameters index int index 0~7. all of 8 apex. Returns Vec3d 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 Equals(Box3d) Indicates whether the current object is equal to another object of the same type. public bool Equals(Box3d other) Parameters other Box3d 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. Expand(Box3d) Expands this box to include another box. public Box3d Expand(Box3d src) Parameters src Box3d The box to include Returns Box3d This box after expansion Expand(Vec3d) Expands the box to include the specified point. public Box3d Expand(Vec3d p) Parameters p Vec3d Point to include in the box Returns Box3d This box after expansion Expand(IEnumerable) Expands the box to include all specified points. public Box3d Expand(IEnumerable ps) Parameters ps IEnumerable The points to include in the box. Returns Box3d This box after expansion. 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 GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetStl() Generate Stl. public Stl GetStl() Returns Stl stl GetTransformedBoundingBox(Mat4d) Get the bounding box of the transformed box. public Box3d GetTransformedBoundingBox(Mat4d mat) Parameters mat Mat4d matrix Returns Box3d GetTris(ICollection) Generates triangles representing the box's surfaces. public int GetTris(ICollection dst) Parameters dst ICollection Collection to add the triangles to Returns int The number of triangles added (12) IsOverlapped(Box3d) Is the box overlapped to otherBox. public bool IsOverlapped(Box3d otherBox) Parameters otherBox Box3d other box Returns bool is overlapped 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. MemberAt(int) Get member at the location. public Vec3d MemberAt(int iter) Parameters iter int iterator Returns Vec3d Minif iter is 0; otherwise, return Max ReadBin(BinaryReader) Reads box data from a binary reader. public void ReadBin(BinaryReader reader) Parameters reader BinaryReader Binary reader to read the box data from ScaleFromCenter(double) Scales the box from its center point. public Box3d ScaleFromCenter(double s) Parameters s double Scale factor Returns Box3d This box after scaling Set(Box3d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box3d Set(Box3d src) Parameters src Box3d src Returns Box3d this Set(box3d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box3d Set(box3d src) Parameters src box3d src Returns Box3d this Set(double, double, double, double, double, double) Sets the box coordinates to the specified values. public Box3d Set(double minx, double miny, double minz, double maxx, double maxy, double maxz) Parameters minx double Minimum X coordinate miny double Minimum Y coordinate minz double Minimum Z coordinate maxx double Maximum X coordinate maxy double Maximum Y coordinate maxz double Maximum Z coordinate Returns Box3d This box after modification SetToTransformedBoundingBox(Mat4d) Set the box to the bounding box of the matrix-transformed box. public Box3d SetToTransformedBoundingBox(Mat4d mat) Parameters mat Mat4d matrix Returns Box3d this ToPresentDto() Convert Box3d 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, min, max properties ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToString(string, IFormatProvider) Returns a string representation of the box formatted according to the specified format. public string ToString(string format, IFormatProvider formatProvider) Parameters format string The format to use for each component formatProvider IFormatProvider The format provider to use Returns string A formatted string representation of the box Translate(Vec3d) Translate the box. public Box3d Translate(Vec3d vec) Parameters vec Vec3d translation vector Returns Box3d this WriteBin(BinaryWriter) Writes box data to a binary writer. public void WriteBin(BinaryWriter writer) Parameters writer BinaryWriter Binary writer to write the box data to" + "summary": "Class Box3d Namespace Hi.Geom Assembly HiGeom.dll 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. public class Box3d : IExpandToBox3d, IEquatable, IStlSource, IGetStl, IMakeXmlSource, IBinaryIo, IWriteBin, IDuplicate, IFormattable, IToPresentDto Inheritance object Box3d Implements IExpandToBox3d IEquatable IStlSource IGetStl IMakeXmlSource IBinaryIo IWriteBin IDuplicate IFormattable IToPresentDto Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods BinIoUtil.ToBytes(IWriteBin) XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors Box3d() Ctor. public Box3d() Box3d(NoInit) Ctor. The Ctor keeps Min and Max to null. public Box3d(Box3d.NoInit noInit) Parameters noInit Box3d.NoInit Box3d(params IExpandToBox3d[]) Creates a box that encompasses all the provided expandable objects. public Box3d(params IExpandToBox3d[] src) Parameters src IExpandToBox3d[] Array of objects that can expand to a box Box3d(Vec3d, Vec3d) Ctor. public Box3d(Vec3d min, Vec3d max) Parameters min Vec3d Min max Vec3d Max Box3d(box3d) Ctor. public Box3d(box3d src) Parameters src box3d src Box3d(IEnumerable) Creates a box that encompasses all the provided expandable objects. public Box3d(IEnumerable src) Parameters src IEnumerable Collection of objects that can expand to a box Box3d(double, double, double, double, double, double) Creates a box with the specified minimum and maximum coordinates. public Box3d(double minx, double miny, double minz, double maxx, double maxy, double maxz) Parameters minx double Minimum X coordinate miny double Minimum Y coordinate minz double Minimum Z coordinate maxx double Maximum X coordinate maxy double Maximum Y coordinate maxz double Maximum Z coordinate Box3d(BinaryReader) Creates a box from binary data. public Box3d(BinaryReader reader) Parameters reader BinaryReader Binary reader to read the box data from Box3d(XElement) Ctor. public Box3d(XElement src) Parameters src XElement XML Properties BottomCenter Center of the bottom surface. public Vec3d BottomCenter { get; } Property Value Vec3d BottomView Gets a transformation matrix for viewing the box from the bottom. public Mat4d BottomView { get; } Property Value Mat4d Center Center public Vec3d Center { get; } Property Value Vec3d CenterUnitBox Generate a center unit box which min~max is (-0.5,-0.5,-0.5)~(0.5,0.5,0.5). public static Box3d CenterUnitBox { get; } Property Value Box3d DiagonalLength Diagonal length. public double DiagonalLength { get; } Property Value double Dim Dimension. public Vec3d Dim { get; } Property Value Vec3d FrontView Gets a transformation matrix for viewing the box from the front. public Mat4d FrontView { get; } Property Value Mat4d HasVolume Checks if the box has a positive volume (all dimensions are greater than zero). public bool HasVolume { get; } Property Value bool InfiniteBox Generate a infinite box which min~max is (-∞,-∞,-∞)~(∞,∞,∞). public static Box3d InfiniteBox { get; } Property Value Box3d IsAllNaN True if all components of Min and Max are NaN. public bool IsAllNaN { get; } Property Value bool IsFinite True if the box is finite. public bool IsFinite { get; } Property Value bool IsReversedPoleBox True if the box is ReversedPoleBox public bool IsReversedPoleBox { get; } Property Value bool IsometricView Gets a transformation matrix for viewing the box from an isometric perspective. public Mat4d IsometricView { get; } Property Value Mat4d LeftSideView Gets a transformation matrix for viewing the box from the left side. public Mat4d LeftSideView { get; } Property Value Mat4d Max Maximum point of the box. public Vec3d Max { get; set; } Property Value Vec3d Min Minimum point of the box. public Vec3d Min { get; set; } Property Value Vec3d NaN Generate a nan box which min~max is (nan,nan,nan)~(nan,nan,nan). public static Box3d NaN { get; } Property Value Box3d NativeByteSize Gets the native byte size of a Box3d (2 Vec3d objects). public static int NativeByteSize { get; } Property Value int RearView Gets a transformation matrix for viewing the box from the rear. public Mat4d RearView { get; } Property Value Mat4d ReversedPoleBox Generate a reversed pole box which min~max is (∞,∞,∞)~(-∞,-∞,-∞). public static Box3d ReversedPoleBox { get; } Property Value Box3d RightSideView Gets a transformation matrix for viewing the box from the right side. public Mat4d RightSideView { get; } Property Value Mat4d TopCenter Center of the top surface. public Vec3d TopCenter { get; } Property Value Vec3d TopView Gets a transformation matrix for viewing the box from the top. public Mat4d TopView { get; } Property Value Mat4d UnitBox Generate a unit box which min~max is (0,0,0)~(1,1,1). public static Box3d UnitBox { get; } Property Value Box3d Volume Gets the volume of the box. public double Volume { get; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZeroBox Generate a zero box which min~max is (0,0,0)~(0,0,0). public static Box3d ZeroBox { get; } Property Value Box3d Methods ApexAt(int) Get Apex at the box. public Vec3d ApexAt(int index) Parameters index int index 0~7. all of 8 apex. Returns Vec3d 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 Equals(Box3d) Indicates whether the current object is equal to another object of the same type. public bool Equals(Box3d other) Parameters other Box3d 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. Expand(Box3d) Expands this box to include another box. public Box3d Expand(Box3d src) Parameters src Box3d The box to include Returns Box3d This box after expansion Expand(Vec3d) Expands the box to include the specified point. public Box3d Expand(Vec3d p) Parameters p Vec3d Point to include in the box Returns Box3d This box after expansion Expand(IEnumerable) Expands the box to include all specified points. public Box3d Expand(IEnumerable ps) Parameters ps IEnumerable The points to include in the box. Returns Box3d This box after expansion. 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 GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetStl() Generate Stl. public Stl GetStl() Returns Stl stl GetTransformedBoundingBox(Mat4d) Get the bounding box of the transformed box. public Box3d GetTransformedBoundingBox(Mat4d mat) Parameters mat Mat4d matrix Returns Box3d GetTris(ICollection) Generates triangles representing the box's surfaces. public int GetTris(ICollection dst) Parameters dst ICollection Collection to add the triangles to Returns int The number of triangles added (12) IsOverlapped(Box3d) Is the box overlapped to otherBox. public bool IsOverlapped(Box3d otherBox) Parameters otherBox Box3d other box Returns bool is overlapped 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. MemberAt(int) Get member at the location. public Vec3d MemberAt(int iter) Parameters iter int iterator Returns Vec3d Minif iter is 0; otherwise, return Max ReadBin(BinaryReader) Reads box data from a binary reader. public void ReadBin(BinaryReader reader) Parameters reader BinaryReader Binary reader to read the box data from Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ScaleFromCenter(double) Scales the box from its center point. public Box3d ScaleFromCenter(double s) Parameters s double Scale factor Returns Box3d This box after scaling Set(Box3d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box3d Set(Box3d src) Parameters src Box3d src Returns Box3d this Set(box3d) Copy the src. The Min and Max are kept the same object. Only the double values changed. public Box3d Set(box3d src) Parameters src box3d src Returns Box3d this Set(double, double, double, double, double, double) Sets the box coordinates to the specified values. public Box3d Set(double minx, double miny, double minz, double maxx, double maxy, double maxz) Parameters minx double Minimum X coordinate miny double Minimum Y coordinate minz double Minimum Z coordinate maxx double Maximum X coordinate maxy double Maximum Y coordinate maxz double Maximum Z coordinate Returns Box3d This box after modification SetToTransformedBoundingBox(Mat4d) Set the box to the bounding box of the matrix-transformed box. public Box3d SetToTransformedBoundingBox(Mat4d mat) Parameters mat Mat4d matrix Returns Box3d this ToPresentDto() Convert Box3d 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, min, max properties ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToString(string, IFormatProvider) Returns a string representation of the box formatted according to the specified format. public string ToString(string format, IFormatProvider formatProvider) Parameters format string The format to use for each component formatProvider IFormatProvider The format provider to use Returns string A formatted string representation of the box Translate(Vec3d) Translate the box. public Box3d Translate(Vec3d vec) Parameters vec Vec3d translation vector Returns Box3d this WriteBin(BinaryWriter) Writes box data to a binary writer. public void WriteBin(BinaryWriter writer) Parameters writer BinaryWriter Binary writer to write the box data to" }, "api/Hi.Geom.Cylindroid.html": { "href": "api/Hi.Geom.Cylindroid.html", "title": "Class Cylindroid | HiAPI-C# 2025", - "summary": "Class Cylindroid Namespace Hi.Geom Assembly HiGeom.dll 3d Geometry of Cylindroid. public class Cylindroid : IStlSource, IGetStl, IMakeXmlSource, IExpandToBox3d, IGetZrContour, IDuplicate, IGetZrList, IGenStl, IToPresentDto Inheritance object Cylindroid Implements IStlSource IGetStl IMakeXmlSource IExpandToBox3d IGetZrContour IDuplicate IGetZrList IGenStl 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) PairZrUtil.GetVolume(IGetZrList) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors Cylindroid() Initializes a new instance of the Cylindroid class with an empty list of PairZr objects. public Cylindroid() Cylindroid(Cylindroid) Initializes a new instance of the Cylindroid class by copying another Cylindroid. public Cylindroid(Cylindroid src) Parameters src Cylindroid The source Cylindroid to copy from. Cylindroid(params PairZr[]) Ctor. The order of z values should be from small to large in general case. public Cylindroid(params PairZr[] pairZRs) Parameters pairZRs PairZr[] See PairZrs. Cylindroid(XElement) Ctor. public Cylindroid(XElement src) Parameters src XElement XML Properties DefaultPolarResolution2d Default polar resolution. public static IPolarResolution2d DefaultPolarResolution2d { get; set; } Property Value IPolarResolution2d PairZrs ZR values. The order of z values should be from small to large in general case. public List PairZrs { get; set; } Property Value List UnitCylinder Generate a cylindroid that height is 1 and radius is 0.5. public static Cylindroid UnitCylinder { get; } Property Value Cylindroid 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 GenCylinder(double, double) Generates a cylinder with the specified height and radius. public static Cylindroid GenCylinder(double height, double r) Parameters height double The height of the cylinder. r double The radius of the cylinder. Returns Cylindroid A new Cylindroid representing the cylinder. 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object GetZrContour(double) Gets Z-R contour data as a list of PairZr objects. The Z values should generally be ordered from smallest to largest. public IList GetZrContour(double latitudeAngleResolution_rad) Parameters latitudeAngleResolution_rad double Resolution of latitude angle in radians Returns IList Z-R contour data as a list of PairZr objects 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. ToPresentDto() Convert Cylindroid 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 zrPairs properties" + "summary": "Class Cylindroid Namespace Hi.Geom Assembly HiGeom.dll 3d Geometry of Cylindroid. public class Cylindroid : IStlSource, IGetStl, IMakeXmlSource, IExpandToBox3d, IGetZrContour, IDuplicate, IGetZrList, IGenStl, IToPresentDto Inheritance object Cylindroid Implements IStlSource IGetStl IMakeXmlSource IExpandToBox3d IGetZrContour IDuplicate IGetZrList IGenStl 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) PairZrUtil.GetVolume(IGetZrList) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors Cylindroid() Initializes a new instance of the Cylindroid class with an empty list of PairZr objects. public Cylindroid() Cylindroid(Cylindroid) Initializes a new instance of the Cylindroid class by copying another Cylindroid. public Cylindroid(Cylindroid src) Parameters src Cylindroid The source Cylindroid to copy from. Cylindroid(params PairZr[]) Ctor. The order of z values should be from small to large in general case. public Cylindroid(params PairZr[] pairZRs) Parameters pairZRs PairZr[] See PairZrs. Cylindroid(XElement) Ctor. public Cylindroid(XElement src) Parameters src XElement XML Properties DefaultPolarResolution2d Default polar resolution. public static IPolarResolution2d DefaultPolarResolution2d { get; set; } Property Value IPolarResolution2d PairZrs ZR values. The order of z values should be from small to large in general case. public List PairZrs { get; set; } Property Value List UnitCylinder Generate a cylindroid that height is 1 and radius is 0.5. public static Cylindroid UnitCylinder { get; } Property Value Cylindroid 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 GenCylinder(double, double) Generates a cylinder with the specified height and radius. public static Cylindroid GenCylinder(double height, double r) Parameters height double The height of the cylinder. r double The radius of the cylinder. Returns Cylindroid A new Cylindroid representing the cylinder. 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object GetZrContour(double) Gets Z-R contour data as a list of PairZr objects. The Z values should generally be ordered from smallest to largest. public IList GetZrContour(double latitudeAngleResolution_rad) Parameters latitudeAngleResolution_rad double Resolution of latitude angle in radians Returns IList Z-R contour data as a list of PairZr objects 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToPresentDto() Convert Cylindroid 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 zrPairs properties" }, "api/Hi.Geom.DVec3d.html": { "href": "api/Hi.Geom.DVec3d.html", @@ -1382,7 +1382,7 @@ "api/Hi.Geom.ExtendedCylinder.html": { "href": "api/Hi.Geom.ExtendedCylinder.html", "title": "Class ExtendedCylinder | HiAPI-C# 2025", - "summary": "Class ExtendedCylinder Namespace Hi.Geom Assembly HiGeom.dll An extensible cylinder geometry that generates a corresponding Cylindroid by the start section and the total length. public class ExtendedCylinder : IStlSource, IGetStl, IExpandToBox3d, IGetZrContour, IDuplicate, IGetZrList, IGenStl, IMakeXmlSource, IToXElement Inheritance object ExtendedCylinder Implements IStlSource IGetStl IExpandToBox3d IGetZrContour IDuplicate IGetZrList IGenStl IMakeXmlSource IToXElement 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) PairZrUtil.GetVolume(IGetZrList) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ExtendedCylinder() Initializes a new instance of the ExtendedCylinder class. public ExtendedCylinder() ExtendedCylinder(double, Func) Initializes a new instance with the specified total length and start section provider. public ExtendedCylinder(double fullLength, Func beginPairZrSource = null) Parameters fullLength double Total length beginPairZrSource Func Start section provider ExtendedCylinder(XElement) Initializes a new instance of the ExtendedCylinder class from XML data. public ExtendedCylinder(XElement src) Parameters src XElement The XML element containing extended cylinder data. Properties BeginPairZrSource The provider of the starting ZR section. public Func BeginPairZrSource { get; set; } Property Value Func Cylindroid Returns a Cylindroid view generated from current settings. public Cylindroid Cylindroid { get; } Property Value Cylindroid FullLength The total length of the cylinder along the Z-axis. public double FullLength { get; set; } Property Value double 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 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object GetZrContour(double) Gets Z-R contour data as a list of PairZr objects. The Z values should generally be ordered from smallest to largest. public IList GetZrContour(double latitudeAngleResolution_rad) Parameters latitudeAngleResolution_rad double Resolution of latitude angle in radians Returns IList Z-R contour data as a list of PairZr objects 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class ExtendedCylinder Namespace Hi.Geom Assembly HiGeom.dll An extensible cylinder geometry that generates a corresponding Cylindroid by the start section and the total length. public class ExtendedCylinder : IStlSource, IGetStl, IExpandToBox3d, IGetZrContour, IDuplicate, IGetZrList, IGenStl, IMakeXmlSource, IToXElement Inheritance object ExtendedCylinder Implements IStlSource IGetStl IExpandToBox3d IGetZrContour IDuplicate IGetZrList IGenStl IMakeXmlSource IToXElement 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) PairZrUtil.GetVolume(IGetZrList) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ExtendedCylinder() Initializes a new instance of the ExtendedCylinder class. public ExtendedCylinder() ExtendedCylinder(double, Func) Initializes a new instance with the specified total length and start section provider. public ExtendedCylinder(double fullLength, Func beginPairZrSource = null) Parameters fullLength double Total length beginPairZrSource Func Start section provider ExtendedCylinder(XElement) Initializes a new instance of the ExtendedCylinder class from XML data. public ExtendedCylinder(XElement src) Parameters src XElement The XML element containing extended cylinder data. Properties BeginPairZrSource The provider of the starting ZR section. public Func BeginPairZrSource { get; set; } Property Value Func Cylindroid Returns a Cylindroid view generated from current settings. public Cylindroid Cylindroid { get; } Property Value Cylindroid FullLength The total length of the cylinder along the Z-axis. public double FullLength { get; set; } Property Value double 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 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object GetZrContour(double) Gets Z-R contour data as a list of PairZr objects. The Z values should generally be ordered from smallest to largest. public IList GetZrContour(double latitudeAngleResolution_rad) Parameters latitudeAngleResolution_rad double Resolution of latitude angle in radians Returns IList Z-R contour data as a list of PairZr objects 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. Reg(XFactory) Registers this type's deserializer and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Geom.Flat3d.html": { "href": "api/Hi.Geom.Flat3d.html", @@ -1402,7 +1402,7 @@ "api/Hi.Geom.GeomCombination.html": { "href": "api/Hi.Geom.GeomCombination.html", "title": "Class GeomCombination | HiAPI-C# 2025", - "summary": "Class GeomCombination Namespace Hi.Geom Assembly HiGeom.dll A class that manages multiple STL sources as a single source. public class GeomCombination : IStlSource, IGetStl, IMakeXmlSource, IGenStl Inheritance object GeomCombination Implements IStlSource IGetStl IMakeXmlSource IGenStl 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) PairZrUtil.GetZrList(IGetStl) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GeomCombination() Default constructor that initializes an empty collection of STL sources. public GeomCombination() GeomCombination(params IStlSource[]) Initializes a new instance with a set of STL sources. public GeomCombination(params IStlSource[] stlSources) Parameters stlSources IStlSource[] A set of STL sources GeomCombination(XElement, string, string, IProgress) Ctor. public GeomCombination(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string Base directory path relFile string Relative file path progress IProgress Optional progress reporter for the XML parsing chain Properties StlSources Collection of STL sources managed by this instance. public List StlSources { get; } Property Value List XName Name for XML IO. public static string XName { get; } Property Value string Methods CleanStlCache() Clears the cached STL data, forcing it to be regenerated on the next request. public void CleanStlCache() Duplicate(params object[]) public object Duplicate(params object[] res) Parameters res object[] Returns 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 geometry data. public Stl GetStl() Returns Stl The STL 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." + "summary": "Class GeomCombination Namespace Hi.Geom Assembly HiGeom.dll A class that manages multiple STL sources as a single source. public class GeomCombination : IStlSource, IGetStl, IMakeXmlSource, IGenStl Inheritance object GeomCombination Implements IStlSource IGetStl IMakeXmlSource IGenStl 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) PairZrUtil.GetZrList(IGetStl) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GeomCombination() Default constructor that initializes an empty collection of STL sources. public GeomCombination() GeomCombination(params IStlSource[]) Initializes a new instance with a set of STL sources. public GeomCombination(params IStlSource[] stlSources) Parameters stlSources IStlSource[] A set of STL sources GeomCombination(XElement, string, string, IProgress) Ctor. public GeomCombination(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string Base directory path relFile string Relative file path progress IProgress Optional progress reporter for the XML parsing chain Properties StlSources Collection of STL sources managed by this instance. public List StlSources { get; } Property Value List XName Name for XML IO. public static string XName { get; } Property Value string Methods CleanStlCache() Clears the cached STL data, forcing it to be regenerated on the next request. public void CleanStlCache() Duplicate(params object[]) public object Duplicate(params object[] res) Parameters res object[] Returns 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 geometry data. public Stl GetStl() Returns Stl The STL 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Geom.GeomUtil.html": { "href": "api/Hi.Geom.GeomUtil.html", @@ -1517,7 +1517,7 @@ "api/Hi.Geom.PairZr.html": { "href": "api/Hi.Geom.PairZr.html", "title": "Class PairZr | HiAPI-C# 2025", - "summary": "Class PairZr Namespace Hi.Geom Assembly HiGeom.dll Value pair of Z and R. public class PairZr : IMakeXmlSource, IExpandToBox3d, IEqualityOperators, IAdditionOperators, ISubtractionOperators, IMultiplyOperators, IDivisionOperators, IFormattable Inheritance object PairZr Implements IMakeXmlSource IExpandToBox3d IEqualityOperators IAdditionOperators ISubtractionOperators IMultiplyOperators IDivisionOperators IFormattable Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 PairZr() Ctor. public PairZr() PairZr(PairZr) Copy ctor. public PairZr(PairZr src) Parameters src PairZr PairZr(double, double) Ctor. public PairZr(double z, double r) Parameters z double see Z r double see R PairZr(string) Ctor. public PairZr(string src) Parameters src string PairZr(XElement) Ctor. public PairZr(XElement src) Parameters src XElement XML Properties R R value. public double R { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Z Z value. public double Z { get; set; } Property Value double ZR (x,y)=(z,r). public Vec2d ZR { get; set; } Property Value Vec2d Methods Equals(PairZr) public bool Equals(PairZr other) Parameters other PairZr Returns bool 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. 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 GenCircle(int) Generates a collection of Vec3d points forming a circle at the Z coordinate with radius R. public IEnumerable GenCircle(int posNum) Parameters posNum int The number of points to generate around the circle Returns IEnumerable An enumerable collection of Vec3d points GenPolarCircle(int) Generates a collection of Polar3d points forming a circle at the Z coordinate with radius R. public IEnumerable GenPolarCircle(int posNum) Parameters posNum int The number of points to generate around the circle Returns IEnumerable An enumerable collection of Polar3d points 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. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToString(string, IFormatProvider) Returns a string representation of the PairZr formatted according to the specified format. public string ToString(string format, IFormatProvider formatProvider) Parameters format string The format to use for each component formatProvider IFormatProvider The format provider to use Returns string A formatted string representation of the PairZr Operators operator +(PairZr, PairZr) Addition operator that adds two PairZr instances. public static PairZr operator +(PairZr left, PairZr right) Parameters left PairZr The left operand right PairZr The right operand Returns PairZr A new PairZr instance with the sum of Z and R values operator /(PairZr, double) Division operator that divides a PairZr instance by a scalar value. public static PairZr operator /(PairZr left, double right) Parameters left PairZr The PairZr instance right double The scalar value Returns PairZr A new PairZr instance with Z and R values divided by the scalar operator ==(PairZr, PairZr) Equality operator that compares two PairZr instances. public static bool operator ==(PairZr left, PairZr right) Parameters left PairZr The left operand right PairZr The right operand Returns bool True if both instances are equal; otherwise, false operator !=(PairZr, PairZr) Inequality operator that compares two PairZr instances. public static bool operator !=(PairZr left, PairZr right) Parameters left PairZr The left operand right PairZr The right operand Returns bool True if the instances are not equal; otherwise, false operator *(PairZr, double) Multiplication operator that multiplies a PairZr instance by a scalar value. public static PairZr operator *(PairZr left, double right) Parameters left PairZr The PairZr instance right double The scalar value Returns PairZr A new PairZr instance with Z and R values multiplied by the scalar operator -(PairZr, PairZr) Subtraction operator that subtracts one PairZr instance from another. public static PairZr operator -(PairZr a, PairZr b) Parameters a PairZr The left operand b PairZr The right operand to subtract Returns PairZr A new PairZr instance with the difference of Z and R values" + "summary": "Class PairZr Namespace Hi.Geom Assembly HiGeom.dll Value pair of Z and R. public class PairZr : IMakeXmlSource, IExpandToBox3d, IEqualityOperators, IAdditionOperators, ISubtractionOperators, IMultiplyOperators, IDivisionOperators, IFormattable Inheritance object PairZr Implements IMakeXmlSource IExpandToBox3d IEqualityOperators IAdditionOperators ISubtractionOperators IMultiplyOperators IDivisionOperators IFormattable Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 PairZr() Ctor. public PairZr() PairZr(PairZr) Copy ctor. public PairZr(PairZr src) Parameters src PairZr PairZr(double, double) Ctor. public PairZr(double z, double r) Parameters z double see Z r double see R PairZr(string) Ctor. public PairZr(string src) Parameters src string PairZr(XElement) Ctor. public PairZr(XElement src) Parameters src XElement XML Properties R R value. public double R { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Z Z value. public double Z { get; set; } Property Value double ZR (x,y)=(z,r). public Vec2d ZR { get; set; } Property Value Vec2d Methods Equals(PairZr) public bool Equals(PairZr other) Parameters other PairZr Returns bool 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. 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 GenCircle(int) Generates a collection of Vec3d points forming a circle at the Z coordinate with radius R. public IEnumerable GenCircle(int posNum) Parameters posNum int The number of points to generate around the circle Returns IEnumerable An enumerable collection of Vec3d points GenPolarCircle(int) Generates a collection of Polar3d points forming a circle at the Z coordinate with radius R. public IEnumerable GenPolarCircle(int posNum) Parameters posNum int The number of points to generate around the circle Returns IEnumerable An enumerable collection of Polar3d points 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToString(string, IFormatProvider) Returns a string representation of the PairZr formatted according to the specified format. public string ToString(string format, IFormatProvider formatProvider) Parameters format string The format to use for each component formatProvider IFormatProvider The format provider to use Returns string A formatted string representation of the PairZr Operators operator +(PairZr, PairZr) Addition operator that adds two PairZr instances. public static PairZr operator +(PairZr left, PairZr right) Parameters left PairZr The left operand right PairZr The right operand Returns PairZr A new PairZr instance with the sum of Z and R values operator /(PairZr, double) Division operator that divides a PairZr instance by a scalar value. public static PairZr operator /(PairZr left, double right) Parameters left PairZr The PairZr instance right double The scalar value Returns PairZr A new PairZr instance with Z and R values divided by the scalar operator ==(PairZr, PairZr) Equality operator that compares two PairZr instances. public static bool operator ==(PairZr left, PairZr right) Parameters left PairZr The left operand right PairZr The right operand Returns bool True if both instances are equal; otherwise, false operator !=(PairZr, PairZr) Inequality operator that compares two PairZr instances. public static bool operator !=(PairZr left, PairZr right) Parameters left PairZr The left operand right PairZr The right operand Returns bool True if the instances are not equal; otherwise, false operator *(PairZr, double) Multiplication operator that multiplies a PairZr instance by a scalar value. public static PairZr operator *(PairZr left, double right) Parameters left PairZr The PairZr instance right double The scalar value Returns PairZr A new PairZr instance with Z and R values multiplied by the scalar operator -(PairZr, PairZr) Subtraction operator that subtracts one PairZr instance from another. public static PairZr operator -(PairZr a, PairZr b) Parameters a PairZr The left operand b PairZr The right operand to subtract Returns PairZr A new PairZr instance with the difference of Z and R values" }, "api/Hi.Geom.PairZrUtil.html": { "href": "api/Hi.Geom.PairZrUtil.html", @@ -1547,7 +1547,7 @@ "api/Hi.Geom.Resolution.PolarResolution2d.html": { "href": "api/Hi.Geom.Resolution.PolarResolution2d.html", "title": "Class PolarResolution2d | HiAPI-C# 2025", - "summary": "Class PolarResolution2d Namespace Hi.Geom.Resolution Assembly HiGeom.dll Polar resolution for generating geometry in polar coordinate. public class PolarResolution2d : IPolarResolution2d, IMakeXmlSource, IToXElement Inheritance object PolarResolution2d Implements IPolarResolution2d IMakeXmlSource IToXElement 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 PolarResolution2d() Initializes a new instance of the PolarResolution2d class. public PolarResolution2d() PolarResolution2d(double, double) Initializes a new instance of the PolarResolution2d class with values. public PolarResolution2d(double linearResolution_mm, double angleResolution_rad) Parameters linearResolution_mm double Linear resolution in millimeters angleResolution_rad double Angular resolution in radians PolarResolution2d(XElement) Initializes a new instance of the PolarResolution2d class from XML data. public PolarResolution2d(XElement src) Parameters src XElement The XML element containing polar resolution data. Properties AngleResolution_deg Gets or sets the angular resolution in degrees. public double AngleResolution_deg { get; set; } Property Value double AngleResolution_rad Gets or sets the angular resolution in radians. public double AngleResolution_rad { get; set; } Property Value double LinearResolution_mm Gets or sets the linear resolution in millimeters. public double LinearResolution_mm { get; set; } Property Value double XName Name for XML IO. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class PolarResolution2d Namespace Hi.Geom.Resolution Assembly HiGeom.dll Polar resolution for generating geometry in polar coordinate. public class PolarResolution2d : IPolarResolution2d, IMakeXmlSource, IToXElement Inheritance object PolarResolution2d Implements IPolarResolution2d IMakeXmlSource IToXElement 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) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 PolarResolution2d() Initializes a new instance of the PolarResolution2d class. public PolarResolution2d() PolarResolution2d(double, double) Initializes a new instance of the PolarResolution2d class with values. public PolarResolution2d(double linearResolution_mm, double angleResolution_rad) Parameters linearResolution_mm double Linear resolution in millimeters angleResolution_rad double Angular resolution in radians PolarResolution2d(XElement) Initializes a new instance of the PolarResolution2d class from XML data. public PolarResolution2d(XElement src) Parameters src XElement The XML element containing polar resolution data. Properties AngleResolution_deg Gets or sets the angular resolution in degrees. public double AngleResolution_deg { get; set; } Property Value double AngleResolution_rad Gets or sets the angular resolution in radians. public double AngleResolution_rad { get; set; } Property Value double LinearResolution_mm Gets or sets the linear resolution in millimeters. public double LinearResolution_mm { get; set; } Property Value double XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Geom.Resolution.html": { "href": "api/Hi.Geom.Resolution.html", @@ -1627,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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -1697,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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -1817,7 +1817,7 @@ "api/Hi.HiNcKits.HiNcHost.html": { "href": "api/Hi.HiNcKits.HiNcHost.html", "title": "Class HiNcHost | HiAPI-C# 2025", - "summary": "Class HiNcHost Namespace Hi.HiNcKits Assembly HiNc.dll Rich HiNC Service. Host class for HiNC functionality that provides project management, path resolution, and DB integration. public class HiNcHost : IDisposable Inheritance object HiNcHost 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 HiNcHost(ProxyProjectService, ILogger) Initializes a new instance of the HiNcHost class with a proxy project service. public HiNcHost(ProxyProjectService proxyProjectService, ILogger logger = null) Parameters proxyProjectService ProxyProjectService The proxy project service to use. logger ILogger Optional logger instance. Fields HiNcUserDbMetaName Gets the name of the HiNC user database metadata. public const string HiNcUserDbMetaName = \"UserDbMeta\" Field Value string HiNcUserDbName Gets the name of the HiNC user database. public const string HiNcUserDbName = \"HiNcUserDb\" Field Value string Properties AdminDirectory Admin absolute directory. public string AdminDirectory { get; set; } Property Value string AdminExtendedNamedPath Gets the admin extended named path. public ExtendedNamedPath AdminExtendedNamedPath { get; } Property Value ExtendedNamedPath AdminNamedPath Gets the admin named path. public NamedPath AdminNamedPath { get; } Property Value NamedPath CacheDbId Gets the cache database ID. public static string CacheDbId { get; set; } Property Value string IdentityStorage Gets the SQLite identity storage instance (for user authentication). public SqliteIdentityStorage IdentityStorage { get; } Property Value SqliteIdentityStorage LocalProjectService Gets the local project service from the proxy project service. public LocalProjectService LocalProjectService { get; } Property Value LocalProjectService MachiningProject Gets the machining project from the local project service. public MachiningProject MachiningProject { get; } Property Value MachiningProject ProjectDirectory Project Absolute Directory. public string ProjectDirectory { get; } Property Value string ProjectExtendedNamedPath Gets the project extended named path. public ExtendedNamedPath ProjectExtendedNamedPath { get; } Property Value ExtendedNamedPath ProjectNamedPath Gets the project named path. public NamedPath ProjectNamedPath { get; } Property Value NamedPath ProjectRelativeDirectory Gets the relative project directory path. public string ProjectRelativeDirectory { get; } Property Value string RelativeProjectPath Gets the relative project path from the proxy project service. public string RelativeProjectPath { get; } Property Value string ResourceDir Resource absolute directory. public string ResourceDir { get; } Property Value string ResourceExtendedNamedPath Gets the resource extended named path. public ExtendedNamedPath ResourceExtendedNamedPath { get; } Property Value ExtendedNamedPath ResourceNamedPath Gets the resource named path. public NamedPath ResourceNamedPath { get; } Property Value NamedPath ResourceRelDir Relative directory from AdminDirectory for resource. public string ResourceRelDir { get; set; } Property Value string StepStorage Gets the SQLite step storage instance (for milling step data). public SqliteStepStorage StepStorage { get; } Property Value SqliteStepStorage Methods CloseProject() Closes the current project. public void CloseProject() CopyResourceIfNotExisted() Copies resources if they don't already exist in the target location. public void CopyResourceIfNotExisted() 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 GetExtendedNamedPathByNamePath(string) Gets an extended named path by its name path. public ExtendedNamedPath GetExtendedNamedPathByNamePath(string namePath) Parameters namePath string The name path to look up. Returns ExtendedNamedPath The extended named path for the specified name path, or null if not found. GetExtendedNamedPathByPath(string) Gets an extended named path by its path. public ExtendedNamedPath GetExtendedNamedPathByPath(string path) Parameters path string The path to look up. Returns ExtendedNamedPath The extended named path with the specified path, or null if not found. GetExtendedNamedPathByUriPara(string) GetExtendedNamedPath By blazor page parameter. public ExtendedNamedPath GetExtendedNamedPathByUriPara(string uriPara) Parameters uriPara string Returns ExtendedNamedPath GetExtendedNamedPathList(params BasePathEnum[]) Gets a list of extended named paths for the specified base path types. public List GetExtendedNamedPathList(params BasePathEnum[] basePathEnums) Parameters basePathEnums BasePathEnum[] The base path types to include. Returns List A list of extended named paths. GetNamedPathByName(string) Gets a named path by its name. public NamedPath GetNamedPathByName(string name) Parameters name string The name of the path to retrieve Returns NamedPath The named path with the specified name, or null if not found GetNamedPathByPath(string) Gets a named path by its path. public NamedPath GetNamedPathByPath(string path) Parameters path string The path to look up. Returns NamedPath The named path with the specified path, or null if not found. GetNamedPathList(params BasePathEnum[]) Gets a list of named paths for the specified base path types. public List GetNamedPathList(params BasePathEnum[] basePathEnums) Parameters basePathEnums BasePathEnum[] The base path types to include. Returns List A list of named paths. LoadProjectByRelativePath(string) Loads a project from the specified relative file path. public void LoadProjectByRelativePath(string relativeFilePathFromAdminRoot) Parameters relativeFilePathFromAdminRoot string The relative file path from the admin directory root NewProjectByRelFile(string) Creates a new project from a relative file path. public void NewProjectByRelFile(string relFilePath) Parameters relFilePath string The relative file path from the admin directory ReloadProject() Reloads the current project. public void ReloadProject() SaveAsProject(string) Saves the current project to a specified relative file path. public void SaveAsProject(string relativeFilePath) Parameters relativeFilePath string The relative file path from the admin directory root SaveProject() Save project in the current path. public void SaveProject() ShowMessageBoard(string, string, BootstrapTheme) Shows a message board with specified title, message and theme. public void ShowMessageBoard(string title, string message, BootstrapTheme bootstrapThemeColor) Parameters title string The title of the message board message string The message to display bootstrapThemeColor BootstrapTheme The bootstrap theme color for the message board Events OnShownMessageBoard Event raised when a message board is shown. public event ShowMessageBoardDelegate OnShownMessageBoard Event Type ShowMessageBoardDelegate" + "summary": "Class HiNcHost Namespace Hi.HiNcKits Assembly HiNc.dll Rich HiNC Service. Host class for HiNC functionality that provides project management, path resolution, and DB integration. public class HiNcHost : IDisposable Inheritance object HiNcHost 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 HiNcHost(ProxyProjectService, ILogger) Initializes a new instance of the HiNcHost class with a proxy project service. public HiNcHost(ProxyProjectService proxyProjectService, ILogger logger = null) Parameters proxyProjectService ProxyProjectService The proxy project service to use. logger ILogger Optional logger instance. Fields HiNcUserDbMetaName Gets the name of the HiNC user database metadata. public const string HiNcUserDbMetaName = \"UserDbMeta\" Field Value string HiNcUserDbName Gets the name of the HiNC user database. public const string HiNcUserDbName = \"HiNcUserDb\" Field Value string Properties AdminDirectory Admin absolute directory. public string AdminDirectory { get; set; } Property Value string AdminExtendedNamedPath Gets the admin extended named path. public ExtendedNamedPath AdminExtendedNamedPath { get; } Property Value ExtendedNamedPath AdminNamedPath Gets the admin named path. public NamedPath AdminNamedPath { get; } Property Value NamedPath CacheDbId Gets the cache database ID. public static string CacheDbId { get; set; } Property Value string IdentityStorage Gets the SQLite identity storage instance (for user authentication). public SqliteIdentityStorage IdentityStorage { get; } Property Value SqliteIdentityStorage LocalProjectService Gets the local project service from the proxy project service. public LocalProjectService LocalProjectService { get; } Property Value LocalProjectService MachiningProject Gets the machining project from the local project service. public MachiningProject MachiningProject { get; } Property Value MachiningProject ProjectDirectory Project Absolute Directory. public string ProjectDirectory { get; } Property Value string ProjectExtendedNamedPath Gets the project extended named path. public ExtendedNamedPath ProjectExtendedNamedPath { get; } Property Value ExtendedNamedPath ProjectNamedPath Gets the project named path. public NamedPath ProjectNamedPath { get; } Property Value NamedPath ProjectRelativeDirectory Gets the relative project directory path. public string ProjectRelativeDirectory { get; } Property Value string RelativeProjectPath Gets the relative project path from the proxy project service. public string RelativeProjectPath { get; } Property Value string ResourceDir Resource absolute directory. public string ResourceDir { get; } Property Value string ResourceExtendedNamedPath Gets the resource extended named path. public ExtendedNamedPath ResourceExtendedNamedPath { get; } Property Value ExtendedNamedPath ResourceNamedPath Gets the resource named path. public NamedPath ResourceNamedPath { get; } Property Value NamedPath ResourceRelDir Relative directory from AdminDirectory for resource. public string ResourceRelDir { get; set; } Property Value string StepStorage Gets the SQLite step storage instance (for milling step data). public SqliteStepStorage StepStorage { get; } Property Value SqliteStepStorage Methods CloseProject() Closes the current project. public void CloseProject() CopyResourceIfNotExisted() Copies resources if they don't already exist in the target location. public void CopyResourceIfNotExisted() 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 GetExtendedNamedPathByNamePath(string) Gets an extended named path by its name path. public ExtendedNamedPath GetExtendedNamedPathByNamePath(string namePath) Parameters namePath string The name path to look up. Returns ExtendedNamedPath The extended named path for the specified name path, or null if not found. GetExtendedNamedPathByPath(string) Gets an extended named path by its path. public ExtendedNamedPath GetExtendedNamedPathByPath(string path) Parameters path string The path to look up. Returns ExtendedNamedPath The extended named path with the specified path, or null if not found. GetExtendedNamedPathByUriPara(string) GetExtendedNamedPath By blazor page parameter. public ExtendedNamedPath GetExtendedNamedPathByUriPara(string uriPara) Parameters uriPara string Returns ExtendedNamedPath GetExtendedNamedPathList(params BasePathEnum[]) Gets a list of extended named paths for the specified base path types. public List GetExtendedNamedPathList(params BasePathEnum[] basePathEnums) Parameters basePathEnums BasePathEnum[] The base path types to include. Returns List A list of extended named paths. GetNamedPathByName(string) Gets a named path by its name. public NamedPath GetNamedPathByName(string name) Parameters name string The name of the path to retrieve Returns NamedPath The named path with the specified name, or null if not found GetNamedPathByPath(string) Gets a named path by its path. public NamedPath GetNamedPathByPath(string path) Parameters path string The path to look up. Returns NamedPath The named path with the specified path, or null if not found. GetNamedPathList(params BasePathEnum[]) Gets a list of named paths for the specified base path types. public List GetNamedPathList(params BasePathEnum[] basePathEnums) Parameters basePathEnums BasePathEnum[] The base path types to include. Returns List A list of named paths. LoadProjectByRelativePath(string) Loads a project from the specified relative file path. public void LoadProjectByRelativePath(string relativeFilePathFromAdminRoot) Parameters relativeFilePathFromAdminRoot string The relative file path from the admin directory root NewProjectByRelFile(string) Creates a new project from a relative file path. public void NewProjectByRelFile(string relFilePath) Parameters relFilePath string The relative file path from the admin directory Reg(XFactory) Bootstraps XML-factory registration for the HiNC host. Equivalent to Reg(XFactory); entry points that construct HiNcHost directly (without going through LocalProjectService) should call this once at startup. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ReloadProject() Reloads the current project. public void ReloadProject() SaveAsProject(string) Saves the current project to a specified relative file path. public void SaveAsProject(string relativeFilePath) Parameters relativeFilePath string The relative file path from the admin directory root SaveProject() Save project in the current path. public void SaveProject() ShowMessageBoard(string, string, BootstrapTheme) Shows a message board with specified title, message and theme. public void ShowMessageBoard(string title, string message, BootstrapTheme bootstrapThemeColor) Parameters title string The title of the message board message string The message to display bootstrapThemeColor BootstrapTheme The bootstrap theme color for the message board Events OnShownMessageBoard Event raised when a message board is shown. public event ShowMessageBoardDelegate OnShownMessageBoard Event Type ShowMessageBoardDelegate" }, "api/Hi.HiNcKits.LocalApp.html": { "href": "api/Hi.HiNcKits.LocalApp.html", @@ -1832,17 +1832,17 @@ "api/Hi.HiNcKits.PlayerDivConfig.html": { "href": "api/Hi.HiNcKits.PlayerDivConfig.html", "title": "Class PlayerDivConfig | HiAPI-C# 2025", - "summary": "Class PlayerDivConfig Namespace Hi.HiNcKits Assembly HiNc.dll Per-user visibility flags for the Player page's divisions (charts and info panels). Mirrors the HiNcRcl PlayerDivConfig + PlayerDivFlag pair, flattened into a single all-boolean config so the webservice (which has no HiNcHost / HiNcUser) can persist the whole layout through UserConfig alone. public class PlayerDivConfig : IMakeXmlSource Inheritance object PlayerDivConfig 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) Remarks Defaults are tuned for a first-time user: the two info panels (EnableStepDiv and MessageTable) are ON so the Player page looks populated without having to open the Division Visibility dropdown; every chart toggle starts OFF. Constructors PlayerDivConfig() Default constructor. public PlayerDivConfig() PlayerDivConfig(XElement) Initializes a new instance of the PlayerDivConfig class from XML data. public PlayerDivConfig(XElement src) Parameters src XElement XML element containing player-div data. Properties ColorIndexTimeChart Color-index strip chart (single-strip timeline coloured by arbitrary numeric/bool aspect). public bool ColorIndexTimeChart { get; set; } Property Value bool DynamometerForceCycleLineDiv Cycle-line chart of sensor-measured force from an external dynamometer. public bool DynamometerForceCycleLineDiv { get; set; } Property Value bool EnableDetailDiv0 Developer-only raw step-property dump panel. public bool EnableDetailDiv0 { get; set; } Property Value bool EnableStepDiv Full / condensed step information panel (Selected Step Info). public bool EnableStepDiv { get; set; } Property Value bool EnableStripAvailabilityChart Availability strip chart (per-step timeline coloured by availability aspect). public bool EnableStripAvailabilityChart { get; set; } Property Value bool EnableStripRoughnessChart Surface-roughness strip chart (per-step timeline coloured by surface-roughness aspect). public bool EnableStripRoughnessChart { get; set; } Property Value bool ForceCycleLineDiv Cycle-line chart of cutting force along the step's rotation cycle. public bool ForceCycleLineDiv { get; set; } Property Value bool MessageTable Session messages panel. public bool MessageTable { get; set; } Property Value bool SensorSpindleMomentCycleLineDiv Cycle-line chart of sensor-measured spindle moment (overlay on sim moment). public bool SensorSpindleMomentCycleLineDiv { get; set; } Property Value bool SimSpindleMomentCycleLineDiv Cycle-line chart of simulation-derived spindle moment on spindle-rotation coordinate. public bool SimSpindleMomentCycleLineDiv { get; set; } Property Value bool XName Name for XML IO. 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 PlayerDivConfig Namespace Hi.HiNcKits Assembly HiNc.dll Per-user visibility flags for the Player page's divisions (charts and info panels). Mirrors the HiNcRcl PlayerDivConfig + PlayerDivFlag pair, flattened into a single all-boolean config so the webservice (which has no HiNcHost / HiNcUser) can persist the whole layout through UserConfig alone. public class PlayerDivConfig : IMakeXmlSource Inheritance object PlayerDivConfig 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) Remarks Defaults are tuned for a first-time user: the two info panels (EnableStepDiv and MessageTable) are ON so the Player page looks populated without having to open the Division Visibility dropdown; every chart toggle starts OFF. Constructors PlayerDivConfig() Default constructor. public PlayerDivConfig() PlayerDivConfig(XElement) Initializes a new instance of the PlayerDivConfig class from XML data. public PlayerDivConfig(XElement src) Parameters src XElement XML element containing player-div data. Properties ColorIndexTimeChart Color-index strip chart (single-strip timeline coloured by arbitrary numeric/bool aspect). public bool ColorIndexTimeChart { get; set; } Property Value bool DynamometerForceCycleLineDiv Cycle-line chart of sensor-measured force from an external dynamometer. public bool DynamometerForceCycleLineDiv { get; set; } Property Value bool EnableDetailDiv0 Developer-only raw step-property dump panel. public bool EnableDetailDiv0 { get; set; } Property Value bool EnableStepDiv Full / condensed step information panel (Selected Step Info). public bool EnableStepDiv { get; set; } Property Value bool EnableStripAvailabilityChart Availability strip chart (per-step timeline coloured by availability aspect). public bool EnableStripAvailabilityChart { get; set; } Property Value bool EnableStripRoughnessChart Surface-roughness strip chart (per-step timeline coloured by surface-roughness aspect). public bool EnableStripRoughnessChart { get; set; } Property Value bool ForceCycleLineDiv Cycle-line chart of cutting force along the step's rotation cycle. public bool ForceCycleLineDiv { get; set; } Property Value bool MessageTable Session messages panel. public bool MessageTable { get; set; } Property Value bool SensorSpindleMomentCycleLineDiv Cycle-line chart of sensor-measured spindle moment (overlay on sim moment). public bool SensorSpindleMomentCycleLineDiv { get; set; } Property Value bool SimSpindleMomentCycleLineDiv Cycle-line chart of simulation-derived spindle moment on spindle-rotation coordinate. public bool SimSpindleMomentCycleLineDiv { get; set; } Property Value bool XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.HiNcKits.ProxyConfig.html": { "href": "api/Hi.HiNcKits.ProxyConfig.html", "title": "Class ProxyConfig | HiAPI-C# 2025", - "summary": "Class ProxyConfig Namespace Hi.HiNcKits Assembly HiNc.dll Configuration for proxy-related settings. public class ProxyConfig : IMakeXmlSource Inheritance object ProxyConfig 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 ProxyConfig() Default constructor public ProxyConfig() ProxyConfig(XElement, string) Initializes a new instance of the ProxyConfig class from XML data. public ProxyConfig(XElement src, string baseDirectory) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths Properties AdminDirectory Gets or sets the admin directory path. public string AdminDirectory { get; set; } Property Value string XName Name for XML IO. 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 ProxyConfig Namespace Hi.HiNcKits Assembly HiNc.dll Configuration for proxy-related settings. public class ProxyConfig : IMakeXmlSource Inheritance object ProxyConfig 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 ProxyConfig() Default constructor public ProxyConfig() ProxyConfig(XElement, string) Initializes a new instance of the ProxyConfig class from XML data. public ProxyConfig(XElement src, string baseDirectory) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths Properties AdminDirectory Gets or sets the admin directory path. public string AdminDirectory { get; set; } Property Value string XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.HiNcKits.UserConfig.html": { "href": "api/Hi.HiNcKits.UserConfig.html", "title": "Class UserConfig | HiAPI-C# 2025", - "summary": "Class UserConfig Namespace Hi.HiNcKits Assembly HiNc.dll User Configuration public class UserConfig : IMakeXmlSource Inheritance object UserConfig 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 UserConfig() Default constructor public UserConfig() UserConfig(XElement, string) Initializes a new instance of the UserConfig class from XML data. public UserConfig(XElement src, string baseDirectory) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths Properties DisplayedStepPresentKeyList Step infomation key list to show. public List DisplayedStepPresentKeyList { get; set; } Property Value List EnableFullControl Enable Full control of the application. Eanble System.Diagnostics.Process in GUI Script Command. Not used yet. public bool EnableFullControl { get; set; } Property Value bool EquipmentWorkpieceSetupDisplayeeConfig Configuration for EquipmentWorkpieceSetupDisplayee public WorkpieceEditorDisplayeeConfig EquipmentWorkpieceSetupDisplayeeConfig { get; set; } Property Value WorkpieceEditorDisplayeeConfig FixtureSetupDisplayeeConfig Configuration for FixtureSetupDisplayee public FixtureEditorDisplayeeConfig FixtureSetupDisplayeeConfig { get; set; } Property Value FixtureEditorDisplayeeConfig GraphicCacheLowerLimitMb Gets or sets the lower limit of graphic cache in megabytes. public double GraphicCacheLowerLimitMb { get; set; } Property Value double GraphicCacheMb Gets or sets the graphic cache size in megabytes. public long GraphicCacheMb { get; set; } Property Value long GraphicCacheUpperLimitMb Gets or sets the upper limit of graphic cache in megabytes. public double GraphicCacheUpperLimitMb { get; set; } Property Value double LanguageCode Gets or sets the language code for the application UI. public string LanguageCode { get; set; } Property Value string PlayerDivConfig Per-user visibility flags for the Player page's divisions (charts and info panels). Used by the webservice Division Visibility dropdown; persisted alongside the rest of this UserConfig so the layout survives a page refresh. public PlayerDivConfig PlayerDivConfig { get; set; } Property Value PlayerDivConfig ShowPhysicsOptions Gets or sets whether to show physics options in the UI. public bool ShowPhysicsOptions { get; set; } Property Value bool XName Name for XML IO. 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 UserConfig Namespace Hi.HiNcKits Assembly HiNc.dll User Configuration public class UserConfig : IMakeXmlSource Inheritance object UserConfig 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 UserConfig() Default constructor public UserConfig() UserConfig(XElement, string) Initializes a new instance of the UserConfig class from XML data. public UserConfig(XElement src, string baseDirectory) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths Properties DisplayedStepPresentKeyList Step infomation key list to show. public List DisplayedStepPresentKeyList { get; set; } Property Value List EnableFullControl Enable Full control of the application. Eanble System.Diagnostics.Process in GUI Script Command. Not used yet. public bool EnableFullControl { get; set; } Property Value bool EquipmentWorkpieceSetupDisplayeeConfig Configuration for EquipmentWorkpieceSetupDisplayee public WorkpieceEditorDisplayeeConfig EquipmentWorkpieceSetupDisplayeeConfig { get; set; } Property Value WorkpieceEditorDisplayeeConfig FixtureSetupDisplayeeConfig Configuration for FixtureSetupDisplayee public FixtureEditorDisplayeeConfig FixtureSetupDisplayeeConfig { get; set; } Property Value FixtureEditorDisplayeeConfig GraphicCacheLowerLimitMb Gets or sets the lower limit of graphic cache in megabytes. public double GraphicCacheLowerLimitMb { get; set; } Property Value double GraphicCacheMb Gets or sets the graphic cache size in megabytes. public long GraphicCacheMb { get; set; } Property Value long GraphicCacheUpperLimitMb Gets or sets the upper limit of graphic cache in megabytes. public double GraphicCacheUpperLimitMb { get; set; } Property Value double LanguageCode Gets or sets the language code for the application UI. public string LanguageCode { get; set; } Property Value string PlayerDivConfig Per-user visibility flags for the Player page's divisions (charts and info panels). Used by the webservice Division Visibility dropdown; persisted alongside the rest of this UserConfig so the layout survives a page refresh. public PlayerDivConfig PlayerDivConfig { get; set; } Property Value PlayerDivConfig ShowPhysicsOptions Gets or sets whether to show physics options in the UI. public bool ShowPhysicsOptions { get; set; } Property Value bool XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.HiNcKits.UserService.html": { "href": "api/Hi.HiNcKits.UserService.html", @@ -1887,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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Machining.ICutter.html": { "href": "api/Hi.Machining.ICutter.html", @@ -1932,17 +1932,17 @@ "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 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." + "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() Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", "title": "Class MachiningEquipmentCollisionIndex | HiAPI-C# 2025", - "summary": "Class MachiningEquipmentCollisionIndex Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Represents a collision index for machining equipment components. This class manages collision detection between different parts of the machining equipment. public class MachiningEquipmentCollisionIndex : ICollisionIndex, IGetCollidable, IMakeXmlSource, IToXElement Inheritance object MachiningEquipmentCollisionIndex Implements ICollisionIndex IGetCollidable IMakeXmlSource IToXElement 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 MachiningEquipmentCollisionIndex(MachiningEquipment, string) Initializes a new instance of the MachiningEquipmentCollisionIndex class with the specified equipment and key. public MachiningEquipmentCollisionIndex(MachiningEquipment equipment, string key) Parameters equipment MachiningEquipment The machining equipment to associate with this collision index. key string The key identifying the component in the collision system. MachiningEquipmentCollisionIndex(string) Initializes a new instance of the MachiningEquipmentCollisionIndex class with the specified key. public MachiningEquipmentCollisionIndex(string key) Parameters key string The key identifying the component in the collision system. MachiningEquipmentCollisionIndex(XElement, IGetMachiningEquipment) Initializes a new instance of the MachiningEquipmentCollisionIndex class from XML data. public MachiningEquipmentCollisionIndex(XElement src, IGetMachiningEquipment equipment) Parameters src XElement The XML element containing the collision index configuration. equipment IGetMachiningEquipment The equipment provider interface. Fields XName Gets the XML element name for serialization. public static string XName Field Value string Properties Anchor Gets the anchor point for the component identified by this index. public Anchor Anchor { get; } Property Value Anchor Remarks The anchor point returned depends on the component key: Workpiece: Geometry anchor Fixture: Geometry anchor ToolHolder: Root anchor of the holder CutterShank: Root anchor of the upper beam topo brick CutterFlute: Root anchor of the shaper topo brick Other: Machine tool component anchor Equipment Gets or sets the machining equipment associated with this collision index. When set, updates the component anchor and collidable based on the equipment's solid machining chain. public IMachiningEquipment Equipment { get; set; } Property Value IMachiningEquipment Key Gets the key identifying the component in the collision system. public string Key { get; } Property Value string WorkpieceRuntimeGeomGetter Getter for runtime geometry of the workpiece. Set by the service layer. public Func WorkpieceRuntimeGeomGetter { get; set; } Property Value Func 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. GetCollidable() Gets the collidable object for the component identified by this index. public ICollidable GetCollidable() Returns ICollidable The collidable object representing the component's geometry. The type of collidable returned depends on the component key: Workpiece: Runtime geometry Fixture: Solid collidable ToolHolder: Cylindroid or freeform holder solid CutterShank: Upper beam topo brick solid CutterFlute: Shaper topo brick solid Other: Machine tool component collidable GetHashCode() Gets a hash code for the current object. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class MachiningEquipmentCollisionIndex Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Represents a collision index for machining equipment components. This class manages collision detection between different parts of the machining equipment. public class MachiningEquipmentCollisionIndex : ICollisionIndex, IGetCollidable, IMakeXmlSource, IToXElement Inheritance object MachiningEquipmentCollisionIndex Implements ICollisionIndex IGetCollidable IMakeXmlSource IToXElement 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 MachiningEquipmentCollisionIndex(MachiningEquipment, string) Initializes a new instance of the MachiningEquipmentCollisionIndex class with the specified equipment and key. public MachiningEquipmentCollisionIndex(MachiningEquipment equipment, string key) Parameters equipment MachiningEquipment The machining equipment to associate with this collision index. key string The key identifying the component in the collision system. MachiningEquipmentCollisionIndex(string) Initializes a new instance of the MachiningEquipmentCollisionIndex class with the specified key. public MachiningEquipmentCollisionIndex(string key) Parameters key string The key identifying the component in the collision system. MachiningEquipmentCollisionIndex(XElement, IGetMachiningEquipment) Initializes a new instance of the MachiningEquipmentCollisionIndex class from XML data. public MachiningEquipmentCollisionIndex(XElement src, IGetMachiningEquipment equipment) Parameters src XElement The XML element containing the collision index configuration. equipment IGetMachiningEquipment The equipment provider interface. Fields XName Gets the XML element name for serialization. public static string XName Field Value string Properties Anchor Gets the anchor point for the component identified by this index. public Anchor Anchor { get; } Property Value Anchor Remarks The anchor point returned depends on the component key: Workpiece: Geometry anchor Fixture: Geometry anchor ToolHolder: Root anchor of the holder CutterShank: Root anchor of the upper beam topo brick CutterFlute: Root anchor of the shaper topo brick Other: Machine tool component anchor Equipment Gets or sets the machining equipment associated with this collision index. When set, updates the component anchor and collidable based on the equipment's solid machining chain. public IMachiningEquipment Equipment { get; set; } Property Value IMachiningEquipment Key Gets the key identifying the component in the collision system. public string Key { get; } Property Value string WorkpieceRuntimeGeomGetter Getter for runtime geometry of the workpiece. Set by the service layer. public Func WorkpieceRuntimeGeomGetter { get; set; } Property Value Func 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. GetCollidable() Gets the collidable object for the component identified by this index. public ICollidable GetCollidable() Returns ICollidable The collidable object representing the component's geometry. The type of collidable returned depends on the component key: Workpiece: Runtime geometry Fixture: Solid collidable ToolHolder: Cylindroid or freeform holder solid CutterShank: Upper beam topo brick solid CutterFlute: Shaper topo brick solid Other: Machine tool component collidable GetHashCode() Gets a hash code for the current object. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html": { "href": "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html", "title": "Class MachiningEquipmentCollisionIndexPairsSource | HiAPI-C# 2025", - "summary": "Class MachiningEquipmentCollisionIndexPairsSource Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Source of CollisionIndexPair. The adjacent solids will not be added to the CollisionIndexPairs. public class MachiningEquipmentCollisionIndexPairsSource : ICollisionIndexPairsSource, IGetCollisionIndexPairs, IMakeXmlSource Inheritance object MachiningEquipmentCollisionIndexPairsSource Implements ICollisionIndexPairsSource IGetCollisionIndexPairs 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 MachiningEquipmentCollisionIndexPairsSource(IMachiningChain, HashSet) Initializes a new instance of the MachiningEquipmentCollisionIndexPairsSource class with a specified machining chain and excluded pairs. public MachiningEquipmentCollisionIndexPairsSource(IMachiningChain src, HashSet excludedPairs) Parameters src IMachiningChain The solid machining chain to build collision pairs from. excludedPairs HashSet The set of collision pairs to exclude from collision detection. Remarks This constructor builds the default collision index pairs from the provided machining chain and removes the specified excluded pairs from consideration. MachiningEquipmentCollisionIndexPairsSource(IMachiningChain, string) Initializes a new instance of the MachiningEquipmentCollisionIndexPairsSource class with a specified machining chain and excluded pairs string. public MachiningEquipmentCollisionIndexPairsSource(IMachiningChain src, string excludedPairsString = \"\") Parameters src IMachiningChain The solid machining chain to build collision pairs from. excludedPairsString string A string representation of collision pairs to exclude, in the format \"[Key1][Key2];[Key3][Key4]\". Remarks This constructor builds the default collision index pairs from the provided machining chain and removes the pairs specified in the excludedPairsString from consideration. MachiningEquipmentCollisionIndexPairsSource(XElement, IGetMachiningChain) Initializes a new instance of the MachiningEquipmentCollisionIndexPairsSource class from XML data. public MachiningEquipmentCollisionIndexPairsSource(XElement src, IGetMachiningChain res) Parameters src XElement The XML element containing the collision index pairs configuration. res IGetMachiningChain The solid machining chain reference used to build default index pairs. Fields XName Gets the XML element name used for serialization. public static string XName Field Value string Methods GetCollisionIndexPairs() Gets a collection of collision index pairs for collision detection. public IEnumerable GetCollisionIndexPairs() Returns IEnumerable A collection of CollisionIndexPair objects. 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 MachiningEquipmentCollisionIndexPairsSource Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Source of CollisionIndexPair. The adjacent solids will not be added to the CollisionIndexPairs. public class MachiningEquipmentCollisionIndexPairsSource : ICollisionIndexPairsSource, IGetCollisionIndexPairs, IMakeXmlSource Inheritance object MachiningEquipmentCollisionIndexPairsSource Implements ICollisionIndexPairsSource IGetCollisionIndexPairs 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 MachiningEquipmentCollisionIndexPairsSource(IMachiningChain, HashSet) Initializes a new instance of the MachiningEquipmentCollisionIndexPairsSource class with a specified machining chain and excluded pairs. public MachiningEquipmentCollisionIndexPairsSource(IMachiningChain src, HashSet excludedPairs) Parameters src IMachiningChain The solid machining chain to build collision pairs from. excludedPairs HashSet The set of collision pairs to exclude from collision detection. Remarks This constructor builds the default collision index pairs from the provided machining chain and removes the specified excluded pairs from consideration. MachiningEquipmentCollisionIndexPairsSource(IMachiningChain, string) Initializes a new instance of the MachiningEquipmentCollisionIndexPairsSource class with a specified machining chain and excluded pairs string. public MachiningEquipmentCollisionIndexPairsSource(IMachiningChain src, string excludedPairsString = \"\") Parameters src IMachiningChain The solid machining chain to build collision pairs from. excludedPairsString string A string representation of collision pairs to exclude, in the format \"[Key1][Key2];[Key3][Key4]\". Remarks This constructor builds the default collision index pairs from the provided machining chain and removes the pairs specified in the excludedPairsString from consideration. MachiningEquipmentCollisionIndexPairsSource(XElement, IGetMachiningChain) Initializes a new instance of the MachiningEquipmentCollisionIndexPairsSource class from XML data. public MachiningEquipmentCollisionIndexPairsSource(XElement src, IGetMachiningChain res) Parameters src XElement The XML element containing the collision index pairs configuration. res IGetMachiningChain The solid machining chain reference used to build default index pairs. Fields XName Gets the XML element name used for serialization. public static string XName Field Value string Methods GetCollisionIndexPairs() Gets a collection of collision index pairs for collision detection. public IEnumerable GetCollisionIndexPairs() Returns IEnumerable A collection of CollisionIndexPair objects. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Static constructor that initializes XML serialization support. public static void Reg(XFactory factory = null) Parameters factory XFactory Remarks Registers the XML factory for deserializing MachiningEquipmentCollisionIndexPairsSource instances and ensures required XML element names are initialized." }, "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html": { "href": "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html", @@ -1957,7 +1957,7 @@ "api/Hi.Machining.MachiningToolHouse.html": { "href": "api/Hi.Machining.MachiningToolHouse.html", "title": "Class MachiningToolHouse | HiAPI-C# 2025", - "summary": "Class MachiningToolHouse Namespace Hi.Machining Assembly HiMech.dll Tool House. public class MachiningToolHouse : Dictionary, IDictionary, ICollection>, IReadOnlyDictionary, IReadOnlyCollection>, IEnumerable>, IDictionary, ICollection, IEnumerable, IDeserializationCallback, ISerializable, INcDependency, IMakeXmlSource Inheritance object Dictionary MachiningToolHouse Implements IDictionary ICollection> IReadOnlyDictionary IReadOnlyCollection> IEnumerable> IDictionary ICollection IEnumerable IDeserializationCallback ISerializable INcDependency IMakeXmlSource Inherited Members Dictionary.Add(object, IMachiningTool) Dictionary.Clear() Dictionary.ContainsKey(object) Dictionary.ContainsValue(IMachiningTool) Dictionary.EnsureCapacity(int) Dictionary.GetAlternateLookup() Dictionary.GetEnumerator() Dictionary.OnDeserialization(object) Dictionary.Remove(object) Dictionary.Remove(object, out IMachiningTool) Dictionary.TrimExcess() Dictionary.TrimExcess(int) Dictionary.TryAdd(object, IMachiningTool) Dictionary.TryGetAlternateLookup(out Dictionary.AlternateLookup) Dictionary.TryGetValue(object, out IMachiningTool) Dictionary.Comparer Dictionary.Count Dictionary.Capacity Dictionary.this[object] Dictionary.Keys Dictionary.Values 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) DictionaryUtil.Retrieve(Dictionary, K, out V, bool) DictionaryUtil.GetOrCreate(IDictionary, TKey, TValue) DictionaryUtil.GetOrCreate(IDictionary, TKey, Func) DictionaryUtil.TryGetValueByKeys(IDictionary, IEnumerable, out TValue) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningToolHouse() Ctor. public MachiningToolHouse() MachiningToolHouse(XElement, string, string, IProgress) Ctor. public MachiningToolHouse(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths relFile string Relative file path progress IProgress The progress reporter. Properties XName Name for XML IO. public static string XName { get; } Property Value string Methods CreateStickMillingTool() Create a new Tool for UI. The tool ID is 1 if no tool existed; otherwise, the tool ID is the max tool ID plus 1. public KeyValuePair CreateStickMillingTool() Returns KeyValuePair the generated tool id and the generated tool 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. SetToolId(object, IMachiningTool) the function Typically used if the tool has already in the tool house. public void SetToolId(object toolId, IMachiningTool millingTool) Parameters toolId object millingTool IMachiningTool Exceptions ArgumentException throw if toolId has already existed." + "summary": "Class MachiningToolHouse Namespace Hi.Machining Assembly HiMech.dll Tool House. public class MachiningToolHouse : Dictionary, IDictionary, ICollection>, IReadOnlyDictionary, IReadOnlyCollection>, IEnumerable>, IDictionary, ICollection, IEnumerable, IDeserializationCallback, ISerializable, INcDependency, IMakeXmlSource Inheritance object Dictionary MachiningToolHouse Implements IDictionary ICollection> IReadOnlyDictionary IReadOnlyCollection> IEnumerable> IDictionary ICollection IEnumerable IDeserializationCallback ISerializable INcDependency IMakeXmlSource Inherited Members Dictionary.Add(object, IMachiningTool) Dictionary.Clear() Dictionary.ContainsKey(object) Dictionary.ContainsValue(IMachiningTool) Dictionary.EnsureCapacity(int) Dictionary.GetAlternateLookup() Dictionary.GetEnumerator() Dictionary.OnDeserialization(object) Dictionary.Remove(object) Dictionary.Remove(object, out IMachiningTool) Dictionary.TrimExcess() Dictionary.TrimExcess(int) Dictionary.TryAdd(object, IMachiningTool) Dictionary.TryGetAlternateLookup(out Dictionary.AlternateLookup) Dictionary.TryGetValue(object, out IMachiningTool) Dictionary.Comparer Dictionary.Count Dictionary.Capacity Dictionary.this[object] Dictionary.Keys Dictionary.Values 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) DictionaryUtil.Retrieve(Dictionary, K, out V, bool) DictionaryUtil.GetOrCreate(IDictionary, TKey, TValue) DictionaryUtil.GetOrCreate(IDictionary, TKey, Func) DictionaryUtil.TryGetValueByKeys(IDictionary, IEnumerable, out TValue) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningToolHouse() Ctor. public MachiningToolHouse() MachiningToolHouse(XElement, string, string, IProgress) Ctor. public MachiningToolHouse(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths relFile string Relative file path progress IProgress The progress reporter. Properties XName Name for XML IO. public static string XName { get; } Property Value string Methods CreateStickMillingTool() Create a new Tool for UI. The tool ID is 1 if no tool existed; otherwise, the tool ID is the max tool ID plus 1. public KeyValuePair CreateStickMillingTool() Returns KeyValuePair the generated tool id and the generated tool MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetToolId(object, IMachiningTool) the function Typically used if the tool has already in the tool house. public void SetToolId(object toolId, IMachiningTool millingTool) Parameters toolId object millingTool IMachiningTool Exceptions ArgumentException throw if toolId has already existed." }, "api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html": { "href": "api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html", @@ -2027,7 +2027,7 @@ "api/Hi.MachiningProcs.LocalProjectService.html": { "href": "api/Hi.MachiningProcs.LocalProjectService.html", "title": "Class LocalProjectService | HiAPI-C# 2025", - "summary": "Class LocalProjectService Namespace Hi.MachiningProcs Assembly HiNc.dll Root(Local) project service. Apply absolute file path. public class LocalProjectService : IProjectService, IMachiningProjectGetter, IMachiningService, IGetMachiningEquipment, IDisposable Inheritance object LocalProjectService Implements IProjectService IMachiningProjectGetter IMachiningService IGetMachiningEquipment 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) Remarks LocalProjectService handles the runtime data and cache generally not requires configuration IO. Compare to MachiningProject, LocalProjectService also handles events that does not reset on the MachiningProject been reloaded. Constructors LocalProjectService(UserService, ILogger) Initializes a new instance. public LocalProjectService(UserService userService, ILogger logger) Parameters userService UserService The application service. logger ILogger The logger instance. LocalProjectService(ILogger) Ctor. public LocalProjectService(ILogger logger = null) Parameters logger ILogger Optional logger instance. Properties ActiveNcRunner Gets the active NC runner based on EnableSoftNcRunner. public IControlRunner ActiveNcRunner { get; } Property Value IControlRunner BoundSelectorHost Gets the bound selector host for managing selection boundaries. public BoundSelectorHost BoundSelectorHost { get; } Property Value BoundSelectorHost ClStrip Gets the cutter location strip containing the machining steps. public ClStrip ClStrip { get; } Property Value ClStrip DictionaryColorGuide Gets the color guide for dictionary-based coloring. public DictionaryColorGuide DictionaryColorGuide { get; } Property Value DictionaryColorGuide EnableCollisionDetection Gets or sets whether collision detection is enabled. When set to true, initializes collision detection mechanism. public bool EnableCollisionDetection { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause execution on failure. public bool EnablePauseOnFailure { get; set; } Property Value bool EnableSoftNcRunner Workaround flag to switch between SoftNcRunner and HardNcRunner. When true and SoftNcRunner is available, uses SoftNcRunner. Will be removed when HardNcRunner is fully replaced. public bool EnableSoftNcRunner { get; set; } Property Value bool EnableStrokeLimitCheck Gets or sets whether stroke limit checking is enabled. public bool EnableStrokeLimitCheck { get; set; } Property Value bool Fixture Gets or sets the fixture. public Fixture Fixture { get; set; } Property Value Fixture Global global variable for SessionShell. Not save on XML. public Dictionary Global { get; set; } Property Value Dictionary InspectingKey Gets or sets the current inspecting key for visualization. When set, updates the inspecting quantity function. public string InspectingKey { get; set; } Property Value string InspectingQuantityFunc Gets the function that retrieves the quantity value for the current inspecting key. public Func InspectingQuantityFunc { get; } Property Value Func Logger Gets the logger instance for this service. public ILogger Logger { get; } Property Value ILogger MachiningActRunner Gets the machining act runner responsible for executing machining operations. public MachiningActRunner MachiningActRunner { get; } Property Value MachiningActRunner MachiningChain Gets or sets the machining chain. 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 MachiningEquipment Gets or sets the machining equipment used for milling. Updates related components when changed. public MachiningEquipment MachiningEquipment { get; set; } Property Value MachiningEquipment MachiningProject Gets or sets the machining project instance. public MachiningProject MachiningProject { get; set; } Property Value MachiningProject MachiningProjectPath public string MachiningProjectPath { get; set; } Property Value string MachiningSession Gets the current machining session. public MachiningSession MachiningSession { get; set; } Property Value MachiningSession MachiningTool Gets or sets the machining tool. public IMachiningTool MachiningTool { get; set; } Property Value IMachiningTool MachiningToolHouse Gets or sets the machining tool house containing tool configurations. public MachiningToolHouse MachiningToolHouse { get; set; } Property Value MachiningToolHouse MachiningToolHouseFile Gets or sets the file path to the milling tool house configuration. public string MachiningToolHouseFile { get; set; } Property Value string MillingStepLuggageReader Gets the reader for accessing milling step luggage data. public ParallelBulkReader MillingStepLuggageReader { get; } Property Value ParallelBulkReader NcOptProc Gets the NC optimization processor for optimizing NC programs. public NcOptProc NcOptProc { get; } Property Value NcOptProc NcRunner Gets the legacy NC runner. public HardNcRunner NcRunner { get; } Property Value HardNcRunner PacePlayer Gets the pace player for controlling execution pace of milling operations. public PacePlayer PacePlayer { get; } Property Value PacePlayer ProjectDirectory Gets the directory containing the machining project. public string ProjectDirectory { get; } Property Value string SessionProgress Gets the message host for displaying messages, warnings, and errors. public SessionProgress SessionProgress { get; } Property Value SessionProgress SessionShell Gets the shell API for interacting with this machining process. public SessionShell SessionShell { get; } Property Value SessionShell StepPropertyAccessDictionary Gets the dictionary mapping property keys to their access methods. public ConcurrentDictionary> StepPropertyAccessDictionary { get; } Property Value ConcurrentDictionary> TimeMapping Gets or sets the time mapping for synchronizing different time-based data streams. public TimeMapping TimeMapping { get; set; } Property Value TimeMapping UserService Gets the application service instance. public UserService UserService { get; } Property Value UserService Workpiece Gets or sets the workpiece to be machined. Ensures proper initialization of workpiece properties. public Workpiece Workpiece { get; set; } Property Value Workpiece WorkpieceService Gets the workpiece runtime service. public WorkpieceService WorkpieceService { get; } Property Value WorkpieceService Methods Act(IAct, IGetSentence, CancellationToken?) Executes an act and collects all results. public void Act(IAct act, IGetSentence sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to execute. sourceCommand IGetSentence The source command that triggered the act. cancellationToken CancellationToken? Cancellation token to cancel the operation. BeginSession() Initiate a simulation session. Clear the state from previous session (if existed). public void BeginSession() CloseProject() Closes the current project. public void CloseProject() 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 EndSession() Ends the current machining session and releases associated resources. public void EndSession() GetInspectingKeyPresentName(StringLocalizer) Gets the localized presentation name for the current inspecting key. public string GetInspectingKeyPresentName(StringLocalizer stringLocalizer) Parameters stringLocalizer StringLocalizer The string localizer to use for localization Returns string The localized presentation name GetLocalProjectService() Get Local Project Service as base-service. public LocalProjectService GetLocalProjectService() Returns LocalProjectService Local Project Service GetMachiningProject() Gets the MachiningProject instance. public MachiningProject GetMachiningProject() Returns MachiningProject The MachiningProject instance. GetMillingEquipment() Get MachiningEquipment. public MachiningEquipment GetMillingEquipment() Returns MachiningEquipment MachiningEquipment GetSessionShell() Returns the session shell that exposes the runtime surface of the active machining session. public ISessionShell GetSessionShell() Returns ISessionShell LoadProject(string) Loads a project by file path relative to the admin directory. public void LoadProject(string projectPath) Parameters projectPath string The absolute file path NewProject(string) Creates a new project by file path. public void NewProject(string projectPath) Parameters projectPath string The absolute file path PlayCsvFile(string, string) Plays a CSV file from the specified path. public void PlayCsvFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths. relFilePath string Relative path to the CSV file. PlayNc(string, string) Plays NC commands from raw text with pace control. public void PlayNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string The NC command text to execute fileNameAlternative string Alternative name to associate with the NC program PlayNcFile(string, string) Plays an NC file from the specified path with pace control. public void PlayNcFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths relFilePath string Relative path to the NC file PowerReset() Performs a controller power reset, modelling a power-off / power-on cycle: Every IPowerResettable dependency clears its volatile subset. Persistent dependency state (controller parameters, Fanuc #500-#999, etc.) is left intact. The active MachiningSession's NcRunnerSessionState is reset so the per-layer SyntaxPiece dataflow — including Vars.Volatile, modal carries, and the init seed — is dropped. The next RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) call re-initialises everything from scratch. Without the second step, calling PowerReset while a project is loaded would leave volatile commons alive across the supposed power cycle (they live in the SyntaxPiece JSON dataflow rather than in any IPowerResettable dependency). public void PowerReset() ProcAct(IAct, IGetSentence, CancellationToken?) Processes an act and returns the results. public IEnumerable ProcAct(IAct act, IGetSentence sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to process. sourceCommand IGetSentence The source command that triggered the act. cancellationToken CancellationToken? Cancellation token to cancel the operation. Returns IEnumerable Enumerable of results from processing the act. ReTrainMillingPara(SampleFlag, double, string, CancellationToken) Train Milling Parameter. public void ReTrainMillingPara(SampleFlag sampleFlags, double outlierRatio, string dstRelFile, CancellationToken cancellationToken) Parameters sampleFlags SampleFlag outlierRatio double dstRelFile string cancellationToken CancellationToken RefreshDrawing() Refreshes the visual display of the milling course. public void RefreshDrawing() ReloadProject() Reloads the current project. public void ReloadProject() ResetRuntime() Reset the runtime states including: runtime geometry, collision flags, machine tool position, CL strips, message buffer and etc.. public void ResetRuntime() RunCsvFile(string, string) Runs a CSV file from the specified path. public IEnumerable RunCsvFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths. relFilePath string Relative path to the CSV file. Returns IEnumerable An enumerable of actions to be executed. RunNc(string, string) Runs NC commands from raw text. public IEnumerable RunNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string The NC command text to execute fileNameAlternative string Alternative name to associate with the NC program Returns IEnumerable An enumerable of actions to be executed RunNcFile(string, string) Runs an NC file from the specified path. public IEnumerable RunNcFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths. If the value is null, BaseDirectory substitutes the value. relFilePath string Relative path to the NC file. Returns IEnumerable An enumerable of actions to be executed. RunToLineEnd() Advances the player by one NC/CSV line and pauses. public void RunToLineEnd() SaveAsProject(string) Saves the current project to a specified relative file path. public void SaveAsProject(string projectPath) Parameters projectPath string The absolute file path SaveProject() Save project by project path. public void SaveProject() TrainMillingPara(SampleFlag, bool, double, string, CancellationToken, ICuttingPara) Train Milling Parameter. public void TrainMillingPara(SampleFlag sampleFlags, bool enableFzOnlyDuringDrilling, double outlierRatio, string dstRelFile, CancellationToken cancellationToken, ICuttingPara paraTemplate) Parameters sampleFlags SampleFlag enableFzOnlyDuringDrilling bool outlierRatio double dstRelFile string cancellationToken CancellationToken paraTemplate ICuttingPara UpdateByMachiningChain() Updates components when the machining chain changes. public void UpdateByMachiningChain() UpdateByMachiningEquipment() Call on MachiningEquipment Or MachiningChainChanged. i.e. Update By MachiningEquipment Or MachiningChain. The function is called on MachiningEquipment and its delegate property changed. If the changing is raised outer from THIS service, this updating function should be manual called. public void UpdateByMachiningEquipment() UpdateIdealMillingToolOffsetTableByToolHouse() Updates the ideal milling tool offset table based on the current tool house configuration. public void UpdateIdealMillingToolOffsetTableByToolHouse() WriteShotFile(TimeSpan, string) Writes time-based shot data to a file with the specified sampling period. public void WriteShotFile(TimeSpan samplingPeriod, string relFileTemplate = \"Output/[NcName].shot.csv\") Parameters samplingPeriod TimeSpan The time period between samples relFileTemplate string Template for the output file path, can include [NcName] placeholder WriteStepFile(string) Writes step-based data to a file. public void WriteStepFile(string relFileTemplate = \"Output/[NcName].step.csv\") Parameters relFileTemplate string Template for the output file path, can include [NcName] placeholder Events MachiningProjectChanged Event raised when the machining project changes. public event LocalProjectService.MachiningProjectChangedDelegate MachiningProjectChanged Event Type LocalProjectService.MachiningProjectChangedDelegate 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 OnNcFileRan Event triggered after an NC file is executed. public event Action OnNcFileRan Event Type Action OnSourcedActEntry App-lifetime event triggered for each SourcedActEntry produced during NC/CSV execution. public event Action OnSourcedActEntry Event Type Action OnSyntaxPieceRan Raised after each SyntaxPiece has been run during NC execution (app lifetime). public event Action OnSyntaxPieceRan Event Type Action OnUpdatedInspectingQuantityFunc Event triggered when the inspecting quantity function is updated. public event Action OnUpdatedInspectingQuantityFunc Event Type Action WorkpieceChanged Event that is raised when the workpiece is changed. public event Action> WorkpieceChanged Event Type Action> Remarks This event is triggered whenever the workpiece property is modified. Subscribers can use this event to respond to changes in the workpiece configuration, such as updating visualizations or recalculating machining parameters. The event provides both the previous and new workpiece values through a SeqPair." + "summary": "Class LocalProjectService Namespace Hi.MachiningProcs Assembly HiNc.dll Root(Local) project service. Apply absolute file path. public class LocalProjectService : IProjectService, IMachiningProjectGetter, IMachiningService, IGetMachiningEquipment, IDisposable Inheritance object LocalProjectService Implements IProjectService IMachiningProjectGetter IMachiningService IGetMachiningEquipment 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) Remarks LocalProjectService handles the runtime data and cache generally not requires configuration IO. Compare to MachiningProject, LocalProjectService also handles events that does not reset on the MachiningProject been reloaded. Constructors LocalProjectService(UserService, ILogger) Initializes a new instance. public LocalProjectService(UserService userService, ILogger logger) Parameters userService UserService The application service. logger ILogger The logger instance. LocalProjectService(ILogger) Ctor. public LocalProjectService(ILogger logger = null) Parameters logger ILogger Optional logger instance. Properties ActiveNcRunner Gets the active NC runner based on EnableSoftNcRunner. public IControlRunner ActiveNcRunner { get; } Property Value IControlRunner BoundSelectorHost Gets the bound selector host for managing selection boundaries. public BoundSelectorHost BoundSelectorHost { get; } Property Value BoundSelectorHost ClStrip Gets the cutter location strip containing the machining steps. public ClStrip ClStrip { get; } Property Value ClStrip DictionaryColorGuide Gets the color guide for dictionary-based coloring. public DictionaryColorGuide DictionaryColorGuide { get; } Property Value DictionaryColorGuide EnableCollisionDetection Gets or sets whether collision detection is enabled. When set to true, initializes collision detection mechanism. public bool EnableCollisionDetection { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause execution on failure. public bool EnablePauseOnFailure { get; set; } Property Value bool EnableSoftNcRunner Workaround flag to switch between SoftNcRunner and HardNcRunner. When true and SoftNcRunner is available, uses SoftNcRunner. Will be removed when HardNcRunner is fully replaced. public bool EnableSoftNcRunner { get; set; } Property Value bool EnableStrokeLimitCheck Gets or sets whether stroke limit checking is enabled. public bool EnableStrokeLimitCheck { get; set; } Property Value bool Fixture Gets or sets the fixture. public Fixture Fixture { get; set; } Property Value Fixture Global global variable for SessionShell. Not save on XML. public Dictionary Global { get; set; } Property Value Dictionary InspectingKey Gets or sets the current inspecting key for visualization. When set, updates the inspecting quantity function. public string InspectingKey { get; set; } Property Value string InspectingQuantityFunc Gets the function that retrieves the quantity value for the current inspecting key. public Func InspectingQuantityFunc { get; } Property Value Func Logger Gets the logger instance for this service. public ILogger Logger { get; } Property Value ILogger MachiningActRunner Gets the machining act runner responsible for executing machining operations. public MachiningActRunner MachiningActRunner { get; } Property Value MachiningActRunner MachiningChain Gets or sets the machining chain. 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 MachiningEquipment Gets or sets the machining equipment used for milling. Updates related components when changed. public MachiningEquipment MachiningEquipment { get; set; } Property Value MachiningEquipment MachiningProject Gets or sets the machining project instance. public MachiningProject MachiningProject { get; set; } Property Value MachiningProject MachiningProjectPath public string MachiningProjectPath { get; set; } Property Value string MachiningSession Gets the current machining session. public MachiningSession MachiningSession { get; set; } Property Value MachiningSession MachiningTool Gets or sets the machining tool. public IMachiningTool MachiningTool { get; set; } Property Value IMachiningTool MachiningToolHouse Gets or sets the machining tool house containing tool configurations. public MachiningToolHouse MachiningToolHouse { get; set; } Property Value MachiningToolHouse MachiningToolHouseFile Gets or sets the file path to the milling tool house configuration. public string MachiningToolHouseFile { get; set; } Property Value string MillingStepLuggageReader Gets the reader for accessing milling step luggage data. public ParallelBulkReader MillingStepLuggageReader { get; } Property Value ParallelBulkReader NcOptProc Gets the NC optimization processor for optimizing NC programs. public NcOptProc NcOptProc { get; } Property Value NcOptProc NcRunner Gets the legacy NC runner. public HardNcRunner NcRunner { get; } Property Value HardNcRunner PacePlayer Gets the pace player for controlling execution pace of milling operations. public PacePlayer PacePlayer { get; } Property Value PacePlayer ProjectDirectory Gets the directory containing the machining project. public string ProjectDirectory { get; } Property Value string SessionProgress Gets the message host for displaying messages, warnings, and errors. public SessionProgress SessionProgress { get; } Property Value SessionProgress SessionShell Gets the shell API for interacting with this machining process. public SessionShell SessionShell { get; } Property Value SessionShell StepPropertyAccessDictionary Gets the dictionary mapping property keys to their access methods. public ConcurrentDictionary> StepPropertyAccessDictionary { get; } Property Value ConcurrentDictionary> TimeMapping Gets or sets the time mapping for synchronizing different time-based data streams. public TimeMapping TimeMapping { get; set; } Property Value TimeMapping UserService Gets the application service instance. public UserService UserService { get; } Property Value UserService Workpiece Gets or sets the workpiece to be machined. Ensures proper initialization of workpiece properties. public Workpiece Workpiece { get; set; } Property Value Workpiece WorkpieceService Gets the workpiece runtime service. public WorkpieceService WorkpieceService { get; } Property Value WorkpieceService Methods Act(IAct, IGetSentence, CancellationToken?) Executes an act and collects all results. public void Act(IAct act, IGetSentence sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to execute. sourceCommand IGetSentence The source command that triggered the act. cancellationToken CancellationToken? Cancellation token to cancel the operation. BeginSession() Initiate a simulation session. Clear the state from previous session (if existed). public void BeginSession() CloseProject() Closes the current project. public void CloseProject() 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 EndSession() Ends the current machining session and releases associated resources. public void EndSession() GetInspectingKeyPresentName(StringLocalizer) Gets the localized presentation name for the current inspecting key. public string GetInspectingKeyPresentName(StringLocalizer stringLocalizer) Parameters stringLocalizer StringLocalizer The string localizer to use for localization Returns string The localized presentation name GetLocalProjectService() Get Local Project Service as base-service. public LocalProjectService GetLocalProjectService() Returns LocalProjectService Local Project Service GetMachiningProject() Gets the MachiningProject instance. public MachiningProject GetMachiningProject() Returns MachiningProject The MachiningProject instance. GetMillingEquipment() Get MachiningEquipment. public MachiningEquipment GetMillingEquipment() Returns MachiningEquipment MachiningEquipment GetSessionShell() Returns the session shell that exposes the runtime surface of the active machining session. public ISessionShell GetSessionShell() Returns ISessionShell LoadProject(string) Loads a project by file path relative to the admin directory. public void LoadProject(string projectPath) Parameters projectPath string The absolute file path NewProject(string) Creates a new project by file path. public void NewProject(string projectPath) Parameters projectPath string The absolute file path PlayCsvFile(string, string) Plays a CSV file from the specified path. public void PlayCsvFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths. relFilePath string Relative path to the CSV file. PlayNc(string, string) Plays NC commands from raw text with pace control. public void PlayNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string The NC command text to execute fileNameAlternative string Alternative name to associate with the NC program PlayNcFile(string, string) Plays an NC file from the specified path with pace control. public void PlayNcFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths relFilePath string Relative path to the NC file PowerReset() Performs a controller power reset, modelling a power-off / power-on cycle: Every IPowerResettable dependency clears its volatile subset. Persistent dependency state (controller parameters, Fanuc #500-#999, etc.) is left intact. The active MachiningSession's NcRunnerSessionState is reset so the per-layer SyntaxPiece dataflow — including Vars.Volatile, modal carries, and the init seed — is dropped. The next RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) call re-initialises everything from scratch. Without the second step, calling PowerReset while a project is loaded would leave volatile commons alive across the supposed power cycle (they live in the SyntaxPiece JSON dataflow rather than in any IPowerResettable dependency). public void PowerReset() ProcAct(IAct, IGetSentence, CancellationToken?) Processes an act and returns the results. public IEnumerable ProcAct(IAct act, IGetSentence sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to process. sourceCommand IGetSentence The source command that triggered the act. cancellationToken CancellationToken? Cancellation token to cancel the operation. Returns IEnumerable Enumerable of results from processing the act. ReTrainMillingPara(SampleFlag, double, string, CancellationToken) Train Milling Parameter. public void ReTrainMillingPara(SampleFlag sampleFlags, double outlierRatio, string dstRelFile, CancellationToken cancellationToken) Parameters sampleFlags SampleFlag outlierRatio double dstRelFile string cancellationToken CancellationToken RefreshDrawing() Refreshes the visual display of the milling course. public void RefreshDrawing() Reg(XFactory) Bootstraps XML-factory registration for the simulation pipeline. Entry points must call this once at startup before any project XML is deserialized. Pass a custom XFactory for test isolation, or null to populate Default. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ReloadProject() Reloads the current project. public void ReloadProject() ResetRuntime() Reset the runtime states including: runtime geometry, collision flags, machine tool position, CL strips, message buffer and etc.. public void ResetRuntime() RunCsvFile(string, string) Runs a CSV file from the specified path. public IEnumerable RunCsvFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths. relFilePath string Relative path to the CSV file. Returns IEnumerable An enumerable of actions to be executed. RunNc(string, string) Runs NC commands from raw text. public IEnumerable RunNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string The NC command text to execute fileNameAlternative string Alternative name to associate with the NC program Returns IEnumerable An enumerable of actions to be executed RunNcFile(string, string) Runs an NC file from the specified path. public IEnumerable RunNcFile(string baseDirectory, string relFilePath) Parameters baseDirectory string Base directory for resolving relative paths. If the value is null, BaseDirectory substitutes the value. relFilePath string Relative path to the NC file. Returns IEnumerable An enumerable of actions to be executed. RunToLineEnd() Advances the player by one NC/CSV line and pauses. public void RunToLineEnd() SaveAsProject(string) Saves the current project to a specified relative file path. public void SaveAsProject(string projectPath) Parameters projectPath string The absolute file path SaveProject() Save project by project path. public void SaveProject() TrainMillingPara(SampleFlag, bool, double, string, CancellationToken, ICuttingPara) Train Milling Parameter. public void TrainMillingPara(SampleFlag sampleFlags, bool enableFzOnlyDuringDrilling, double outlierRatio, string dstRelFile, CancellationToken cancellationToken, ICuttingPara paraTemplate) Parameters sampleFlags SampleFlag enableFzOnlyDuringDrilling bool outlierRatio double dstRelFile string cancellationToken CancellationToken paraTemplate ICuttingPara UpdateByMachiningChain() Updates components when the machining chain changes. public void UpdateByMachiningChain() UpdateByMachiningEquipment() Call on MachiningEquipment Or MachiningChainChanged. i.e. Update By MachiningEquipment Or MachiningChain. The function is called on MachiningEquipment and its delegate property changed. If the changing is raised outer from THIS service, this updating function should be manual called. public void UpdateByMachiningEquipment() UpdateIdealMillingToolOffsetTableByToolHouse() Updates the ideal milling tool offset table based on the current tool house configuration. public void UpdateIdealMillingToolOffsetTableByToolHouse() WriteShotFile(TimeSpan, string) Writes time-based shot data to a file with the specified sampling period. public void WriteShotFile(TimeSpan samplingPeriod, string relFileTemplate = \"Output/[NcName].shot.csv\") Parameters samplingPeriod TimeSpan The time period between samples relFileTemplate string Template for the output file path, can include [NcName] placeholder WriteStepFile(string) Writes step-based data to a file. public void WriteStepFile(string relFileTemplate = \"Output/[NcName].step.csv\") Parameters relFileTemplate string Template for the output file path, can include [NcName] placeholder Events MachiningProjectChanged Event raised when the machining project changes. public event LocalProjectService.MachiningProjectChangedDelegate MachiningProjectChanged Event Type LocalProjectService.MachiningProjectChangedDelegate 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 OnNcFileRan Event triggered after an NC file is executed. public event Action OnNcFileRan Event Type Action OnSourcedActEntry App-lifetime event triggered for each SourcedActEntry produced during NC/CSV execution. public event Action OnSourcedActEntry Event Type Action OnSyntaxPieceRan Raised after each SyntaxPiece has been run during NC execution (app lifetime). public event Action OnSyntaxPieceRan Event Type Action OnUpdatedInspectingQuantityFunc Event triggered when the inspecting quantity function is updated. public event Action OnUpdatedInspectingQuantityFunc Event Type Action WorkpieceChanged Event that is raised when the workpiece is changed. public event Action> WorkpieceChanged Event Type Action> Remarks This event is triggered whenever the workpiece property is modified. Subscribers can use this event to respond to changes in the workpiece configuration, such as updating visualizations or recalculating machining parameters. The event provides both the previous and new workpiece values through a SeqPair." }, "api/Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html": { "href": "api/Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html", @@ -2042,7 +2042,7 @@ "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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html": { "href": "api/Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html", @@ -2062,7 +2062,7 @@ "api/Hi.MachiningProcs.MachiningProject.html": { "href": "api/Hi.MachiningProcs.MachiningProject.html", "title": "Class MachiningProject | HiAPI-C# 2025", - "summary": "Class MachiningProject Namespace Hi.MachiningProcs Assembly HiNc.dll Represents a milling project that manages the execution, simulation, and analysis of NC programs. public class MachiningProject : IDisposable, IMakeXmlSource, IMachiningProjectGetter Inheritance object MachiningProject Implements IDisposable IMakeXmlSource IMachiningProjectGetter 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 MachiningProject(string) Initializes a new instance with the specified directory. public MachiningProject(string baseDirectory) Parameters baseDirectory string Base directory for file operations MachiningProject(XElement, string, IProgress) Initializes a new instance from XML data. public MachiningProject(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for XML deserialization. Properties ApiVersion Gets the API version from the HiNc assembly (where MachiningProject is defined). public static Version ApiVersion { get; } Property Value Version BaseDirectory Gets the base directory where project files are located. public string BaseDirectory { get; } Property Value string DictionaryColorGuide public DictionaryColorGuide DictionaryColorGuide { get; } Property Value DictionaryColorGuide MachiningActRunnerConfig Gets or sets the configuration for the milling act runner. public MachiningActRunnerConfig MachiningActRunnerConfig { get; set; } Property Value MachiningActRunnerConfig MachiningToolHouse Gets or sets the machining tool house containing tool configurations. public MachiningToolHouse MachiningToolHouse { get; set; } Property Value MachiningToolHouse MachiningToolHouseFile Gets or sets the file path to the milling tool house configuration. public string MachiningToolHouseFile { get; set; } Property Value string MillingGuide Gets or sets the milling guide containing visualization and analysis configurations. public MillingGuide MillingGuide { get; set; } Property Value MillingGuide NcEnv Gets or sets the NC environment settings. public HardNcEnv NcEnv { get; set; } Property Value HardNcEnv PlayerCommand Gets the command to execute when playing the machining project. public ISessionCommand PlayerCommand { get; set; } Property Value ISessionCommand SoftNcRunner Gets or sets the configurable NC runner. When set, replaces the legacy HardNcRunner. public SoftNcRunner SoftNcRunner { get; set; } Property Value SoftNcRunner TimeMapping Gets or sets the time mapping for synchronizing different time-based data streams. public TimeMapping TimeMapping { get; set; } Property Value TimeMapping XName Name for XML IO. public static string XName { get; } Property Value string Methods 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 GetMachiningProject() Gets the MachiningProject instance. public MachiningProject GetMachiningProject() Returns MachiningProject The MachiningProject instance. GetMillingEquipment() public MachiningEquipment GetMillingEquipment() Returns MachiningEquipment LoadFile(string, IProgress) Loads a machining project from the specified file path. public static MachiningProject LoadFile(string projectFilePath, IProgress progress) Parameters projectFilePath string Path to the project file to load progress IProgress Progress reporter for XML deserialization. Returns MachiningProject A new machining project instance loaded from the file 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 MachiningProject Namespace Hi.MachiningProcs Assembly HiNc.dll Represents a milling project that manages the execution, simulation, and analysis of NC programs. public class MachiningProject : IDisposable, IMakeXmlSource, IMachiningProjectGetter Inheritance object MachiningProject Implements IDisposable IMakeXmlSource IMachiningProjectGetter 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 MachiningProject(string) Initializes a new instance with the specified directory. public MachiningProject(string baseDirectory) Parameters baseDirectory string Base directory for file operations MachiningProject(XElement, string, IProgress) Initializes a new instance from XML data. public MachiningProject(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for XML deserialization. Properties ApiVersion Gets the API version from the HiNc assembly (where MachiningProject is defined). public static Version ApiVersion { get; } Property Value Version BaseDirectory Gets the base directory where project files are located. public string BaseDirectory { get; } Property Value string DictionaryColorGuide public DictionaryColorGuide DictionaryColorGuide { get; } Property Value DictionaryColorGuide MachiningActRunnerConfig Gets or sets the configuration for the milling act runner. public MachiningActRunnerConfig MachiningActRunnerConfig { get; set; } Property Value MachiningActRunnerConfig MachiningToolHouse Gets or sets the machining tool house containing tool configurations. public MachiningToolHouse MachiningToolHouse { get; set; } Property Value MachiningToolHouse MachiningToolHouseFile Gets or sets the file path to the milling tool house configuration. public string MachiningToolHouseFile { get; set; } Property Value string MillingGuide Gets or sets the milling guide containing visualization and analysis configurations. public MillingGuide MillingGuide { get; set; } Property Value MillingGuide NcEnv Gets or sets the NC environment settings. public HardNcEnv NcEnv { get; set; } Property Value HardNcEnv PlayerCommand Gets the command to execute when playing the machining project. public ISessionCommand PlayerCommand { get; set; } Property Value ISessionCommand SoftNcRunner Gets or sets the configurable NC runner. When set, replaces the legacy HardNcRunner. public SoftNcRunner SoftNcRunner { get; set; } Property Value SoftNcRunner TimeMapping Gets or sets the time mapping for synchronizing different time-based data streams. public TimeMapping TimeMapping { get; set; } Property Value TimeMapping XName Name for XML IO. public static string XName { get; } Property Value string Methods 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 GetMachiningProject() Gets the MachiningProject instance. public MachiningProject GetMachiningProject() Returns MachiningProject The MachiningProject instance. GetMillingEquipment() public MachiningEquipment GetMillingEquipment() Returns MachiningEquipment LoadFile(string, IProgress) Loads a machining project from the specified file path. public static MachiningProject LoadFile(string projectFilePath, IProgress progress) Parameters projectFilePath string Path to the project file to load progress IProgress Progress reporter for XML deserialization. Returns MachiningProject A new machining project instance loaded from the file MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer (and its legacy aliases) with the given XFactory (or Default when factory is null), and chains Reg(factory) on dependents so the registration graph is observable. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.MachiningProcs.MachiningProjectDisplayee.html": { "href": "api/Hi.MachiningProcs.MachiningProjectDisplayee.html", @@ -2242,7 +2242,7 @@ "api/Hi.Mapping.TimeMapping.html": { "href": "api/Hi.Mapping.TimeMapping.html", "title": "Class TimeMapping | HiAPI-C# 2025", - "summary": "Class TimeMapping Namespace Hi.Mapping Assembly HiMech.dll Provides mapping between machining steps and time-based measurements (shots). It is one step to many data mapping (one-many). public class TimeMapping : IMakeXmlSource, IDisposable Inheritance object TimeMapping Implements IMakeXmlSource 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 TimeMapping(Func) Initializes a new instance of the TimeMapping class with the specified CL strip and tool house. public TimeMapping(Func baseDirectoryGetter) Parameters baseDirectoryGetter Func The function to get the base directory for file paths. TimeMapping(XElement, Func) Initializes a new instance of the TimeMapping class from XML data. public TimeMapping(XElement src, Func baseDirectoryGetter) Parameters src XElement The XML element containing the mapping data. baseDirectoryGetter Func The function to get the base directory for resolving relative file paths. Remarks This constructor supports legacy XML formats and automatically converts them to the current format. Legacy formats include: NcMapping with MarkIdToFileTimeSection element Entries with MarkID attributes Properties BaseDirectory Gets or sets the base directory for resolving file paths. All relative file paths in the mapping are resolved against this directory. public string BaseDirectory { get; } Property Value string BaseDirectoryGetter Gets or sets the function to get the base directory for resolving file paths. public Func BaseDirectoryGetter { get; set; } Property Value Func KeyToRelFileTimeSectionDictionary Gets or sets the dictionary mapping keys to file time sections. Each entry maps a unique identifier to a file time section that specifies which portion of a measurement file corresponds to a particular machining operation. public Dictionary KeyToRelFileTimeSectionDictionary { get; set; } Property Value Dictionary RelFileToTimeShotListDictionary Gets or sets the cache of time shot lists loaded from files. This is a thread-safe dictionary that maps file paths to tasks that load and parse the files. The cache prevents multiple reads of the same file and enables concurrent access. public ConcurrentDictionary>> RelFileToTimeShotListDictionary { get; set; } Property Value ConcurrentDictionary>> StepToTimeShotListDictionary Gets a concurrent dictionary mapping step indices to their corresponding time shot lists. This dictionary is populated during the mapping process. public ConcurrentDictionary> StepToTimeShotListDictionary { get; } Property Value ConcurrentDictionary> XName Gets the XML element name used for serialization. public static string XName { get; } Property Value string Remarks This name is used as the root element when serializing TimeMapping instances to XML. It matches the class name to maintain consistency between code and XML representation. Methods CallTimeShotByRelFile(string, IProgress, CancellationToken?) Retrieves time shots from a file, using cached results if available. public List CallTimeShotByRelFile(string relFile, IProgress messageHost, CancellationToken? cancellationToken = null) Parameters relFile string The relative path to the file containing time shots. messageHost IProgress The message host for logging progress. cancellationToken CancellationToken? Optional token to cancel the loading operation. Returns List A list of time shots from the file. The results are cached for subsequent calls. If the file is already being loaded by another thread, waits for that operation to complete. Remarks This method is thread-safe and ensures each file is only read once, even with concurrent access. Any exceptions during file reading are captured and can be inspected through the task's exception property. Clear() Clears all mappings and data, including the key-to-file time section dictionary. public void Clear() ClearCache() Clears the cache of loaded time shot data, including file-to-time shot list and step-to-time shot list dictionaries. public void ClearCache() 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 GetShots(int) Gets the time shots associated with a specific step index. public List GetShots(int stepIndex) Parameters stepIndex int The index of the step to get shots for. Returns List A list of time shots associated with the specified step, or null if no shots are found. LoadTimeShotFiles(IProgress, CancellationToken?) Loads all time shot files referenced in the KeyToFileTimeSectionMapping. public void LoadTimeShotFiles(IProgress messageHost, CancellationToken? cancellationToken = null) Parameters messageHost IProgress The message host for logging progress. cancellationToken CancellationToken? Optional cancellation token to cancel the operation. MakeXmlSource(string, string, bool) Creates an XML representation of the time mapping data. relFile is not used in current implementation. 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 containing the complete time mapping data. Remarks The XML structure includes: A root TimeMapping element An Entrys element containing Entry elements Each Entry has a Key attribute and FileTimeSection child element Map(Range, FileTimeSection, CycleSamplingMode, ClStrip, IProgress, CancellationToken?) Maps the specified step section to time shots using the provided file time section and cycle sampling mode. This method is thread-safe and can be called concurrently. public void Map(Range stepSection, FileTimeSection relFileTimeSection, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode, ClStrip clStrip, IProgress messageHost, CancellationToken? cancellationToken = null) Parameters stepSection Range The range of step indices to process. relFileTimeSection FileTimeSection The file time section containing file path and time range. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode to use. clStrip ClStrip The cutter location strip to map. messageHost IProgress The message host for logging progress. cancellationToken CancellationToken? Optional cancellation token to cancel the operation. MapSeriesByActualTime(string, CycleSamplingMode, ClStrip, IProgress, CancellationToken?) Maps steps to time shots based on actual time. public void MapSeriesByActualTime(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode, ClStrip clStrip, IProgress messageHost, CancellationToken? cancellationToken = null) Parameters timeShotRelFile string The relative file path for time shots. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. clStrip ClStrip The cutter location strip to map. messageHost IProgress The session message host for logging. cancellationToken CancellationToken? The cancellation token. WaitMapping() Waits for all mapping operations to complete. This method blocks until all concurrent mapping tasks have finished. public void WaitMapping()" + "summary": "Class TimeMapping Namespace Hi.Mapping Assembly HiMech.dll Provides mapping between machining steps and time-based measurements (shots). It is one step to many data mapping (one-many). public class TimeMapping : IMakeXmlSource, IDisposable Inheritance object TimeMapping Implements IMakeXmlSource 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 TimeMapping(Func) Initializes a new instance of the TimeMapping class with the specified CL strip and tool house. public TimeMapping(Func baseDirectoryGetter) Parameters baseDirectoryGetter Func The function to get the base directory for file paths. TimeMapping(XElement, Func) Initializes a new instance of the TimeMapping class from XML data. public TimeMapping(XElement src, Func baseDirectoryGetter) Parameters src XElement The XML element containing the mapping data. baseDirectoryGetter Func The function to get the base directory for resolving relative file paths. Remarks This constructor supports legacy XML formats and automatically converts them to the current format. Legacy formats include: NcMapping with MarkIdToFileTimeSection element Entries with MarkID attributes Properties BaseDirectory Gets or sets the base directory for resolving file paths. All relative file paths in the mapping are resolved against this directory. public string BaseDirectory { get; } Property Value string BaseDirectoryGetter Gets or sets the function to get the base directory for resolving file paths. public Func BaseDirectoryGetter { get; set; } Property Value Func KeyToRelFileTimeSectionDictionary Gets or sets the dictionary mapping keys to file time sections. Each entry maps a unique identifier to a file time section that specifies which portion of a measurement file corresponds to a particular machining operation. public Dictionary KeyToRelFileTimeSectionDictionary { get; set; } Property Value Dictionary RelFileToTimeShotListDictionary Gets or sets the cache of time shot lists loaded from files. This is a thread-safe dictionary that maps file paths to tasks that load and parse the files. The cache prevents multiple reads of the same file and enables concurrent access. public ConcurrentDictionary>> RelFileToTimeShotListDictionary { get; set; } Property Value ConcurrentDictionary>> StepToTimeShotListDictionary Gets a concurrent dictionary mapping step indices to their corresponding time shot lists. This dictionary is populated during the mapping process. public ConcurrentDictionary> StepToTimeShotListDictionary { get; } Property Value ConcurrentDictionary> XName Gets the XML element name used for serialization. public static string XName { get; } Property Value string Remarks This name is used as the root element when serializing TimeMapping instances to XML. It matches the class name to maintain consistency between code and XML representation. Methods CallTimeShotByRelFile(string, IProgress, CancellationToken?) Retrieves time shots from a file, using cached results if available. public List CallTimeShotByRelFile(string relFile, IProgress messageHost, CancellationToken? cancellationToken = null) Parameters relFile string The relative path to the file containing time shots. messageHost IProgress The message host for logging progress. cancellationToken CancellationToken? Optional token to cancel the loading operation. Returns List A list of time shots from the file. The results are cached for subsequent calls. If the file is already being loaded by another thread, waits for that operation to complete. Remarks This method is thread-safe and ensures each file is only read once, even with concurrent access. Any exceptions during file reading are captured and can be inspected through the task's exception property. Clear() Clears all mappings and data, including the key-to-file time section dictionary. public void Clear() ClearCache() Clears the cache of loaded time shot data, including file-to-time shot list and step-to-time shot list dictionaries. public void ClearCache() 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 GetShots(int) Gets the time shots associated with a specific step index. public List GetShots(int stepIndex) Parameters stepIndex int The index of the step to get shots for. Returns List A list of time shots associated with the specified step, or null if no shots are found. LoadTimeShotFiles(IProgress, CancellationToken?) Loads all time shot files referenced in the KeyToFileTimeSectionMapping. public void LoadTimeShotFiles(IProgress messageHost, CancellationToken? cancellationToken = null) Parameters messageHost IProgress The message host for logging progress. cancellationToken CancellationToken? Optional cancellation token to cancel the operation. MakeXmlSource(string, string, bool) Creates an XML representation of the time mapping data. relFile is not used in current implementation. 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 containing the complete time mapping data. Remarks The XML structure includes: A root TimeMapping element An Entrys element containing Entry elements Each Entry has a Key attribute and FileTimeSection child element Map(Range, FileTimeSection, CycleSamplingMode, ClStrip, IProgress, CancellationToken?) Maps the specified step section to time shots using the provided file time section and cycle sampling mode. This method is thread-safe and can be called concurrently. public void Map(Range stepSection, FileTimeSection relFileTimeSection, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode, ClStrip clStrip, IProgress messageHost, CancellationToken? cancellationToken = null) Parameters stepSection Range The range of step indices to process. relFileTimeSection FileTimeSection The file time section containing file path and time range. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode to use. clStrip ClStrip The cutter location strip to map. messageHost IProgress The message host for logging progress. cancellationToken CancellationToken? Optional cancellation token to cancel the operation. MapSeriesByActualTime(string, CycleSamplingMode, ClStrip, IProgress, CancellationToken?) Maps steps to time shots based on actual time. public void MapSeriesByActualTime(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode, ClStrip clStrip, IProgress messageHost, CancellationToken? cancellationToken = null) Parameters timeShotRelFile string The relative file path for time shots. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. clStrip ClStrip The cutter location strip to map. messageHost IProgress The session message host for logging. cancellationToken CancellationToken? The cancellation token. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory WaitMapping() Waits for all mapping operations to complete. This method blocks until all concurrent mapping tasks have finished. public void WaitMapping()" }, "api/Hi.Mapping.html": { "href": "api/Hi.Mapping.html", @@ -2257,7 +2257,7 @@ "api/Hi.Mappings.FileTimeSection.html": { "href": "api/Hi.Mappings.FileTimeSection.html", "title": "Class FileTimeSection | HiAPI-C# 2025", - "summary": "Class FileTimeSection Namespace Hi.Mappings Assembly HiGeom.dll Represents a section of a file defined by a time range. public class FileTimeSection : IMakeXmlSource Inheritance object FileTimeSection Implements IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 FileTimeSection() Initializes a new instance of the FileTimeSection class. public FileTimeSection() FileTimeSection(string, Range) Initializes a new instance of the FileTimeSection class with a file and time range. public FileTimeSection(string file, Range range) Parameters file string The file path. range Range The time range. FileTimeSection(string, TimeSpan, TimeSpan) Initializes a new instance of the FileTimeSection class with a file and begin/end times. public FileTimeSection(string file, TimeSpan beginTime, TimeSpan endTime) Parameters file string The file path. beginTime TimeSpan The begin time. endTime TimeSpan The end time. FileTimeSection(XElement) Initializes a new instance of the FileTimeSection class from XML. public FileTimeSection(XElement src) Parameters src XElement The XML element containing the file time section data. Properties BeginTime Gets or sets the begin time as a TimeSpan. public TimeSpan BeginTime { get; set; } Property Value TimeSpan BeginTime_s Gets or sets the begin time in seconds. public double BeginTime_s { get; set; } Property Value double Duration_s Gets the duration in seconds. public double Duration_s { get; } Property Value double EndTime Gets or sets the end time as a TimeSpan. public TimeSpan EndTime { get; set; } Property Value TimeSpan EndTime_s Gets or sets the end time in seconds. public double EndTime_s { get; set; } Property Value double File Gets or sets the file path. public string File { get; set; } Property Value string PrimaryTimeOption Gets or sets the primary time option for XML serialization. public FileTimeSection.TimeOption PrimaryTimeOption { get; set; } Property Value FileTimeSection.TimeOption TimeRange Gets or sets the time range. public Range TimeRange { get; set; } Property Value Range XName Name for XML IO. 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. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class FileTimeSection Namespace Hi.Mappings Assembly HiGeom.dll Represents a section of a file defined by a time range. public class FileTimeSection : IMakeXmlSource Inheritance object FileTimeSection Implements IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 FileTimeSection() Initializes a new instance of the FileTimeSection class. public FileTimeSection() FileTimeSection(string, Range) Initializes a new instance of the FileTimeSection class with a file and time range. public FileTimeSection(string file, Range range) Parameters file string The file path. range Range The time range. FileTimeSection(string, TimeSpan, TimeSpan) Initializes a new instance of the FileTimeSection class with a file and begin/end times. public FileTimeSection(string file, TimeSpan beginTime, TimeSpan endTime) Parameters file string The file path. beginTime TimeSpan The begin time. endTime TimeSpan The end time. FileTimeSection(XElement) Initializes a new instance of the FileTimeSection class from XML. public FileTimeSection(XElement src) Parameters src XElement The XML element containing the file time section data. Properties BeginTime Gets or sets the begin time as a TimeSpan. public TimeSpan BeginTime { get; set; } Property Value TimeSpan BeginTime_s Gets or sets the begin time in seconds. public double BeginTime_s { get; set; } Property Value double Duration_s Gets the duration in seconds. public double Duration_s { get; } Property Value double EndTime Gets or sets the end time as a TimeSpan. public TimeSpan EndTime { get; set; } Property Value TimeSpan EndTime_s Gets or sets the end time in seconds. public double EndTime_s { get; set; } Property Value double File Gets or sets the file path. public string File { get; set; } Property Value string PrimaryTimeOption Gets or sets the primary time option for XML serialization. public FileTimeSection.TimeOption PrimaryTimeOption { get; set; } Property Value FileTimeSection.TimeOption TimeRange Gets or sets the time range. public Range TimeRange { get; set; } Property Value Range XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.Mappings.html": { "href": "api/Hi.Mappings.html", @@ -2267,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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Mech.IGetAnchorToSolidDictionary.html": { "href": "api/Hi.Mech.IGetAnchorToSolidDictionary.html", @@ -2342,22 +2342,22 @@ "api/Hi.Mech.Topo.DynamicFreeform.html": { "href": "api/Hi.Mech.Topo.DynamicFreeform.html", "title": "Class DynamicFreeform | HiAPI-C# 2025", - "summary": "Class DynamicFreeform Namespace Hi.Mech.Topo Assembly HiMech.dll Dynamic Freeform transformer. public class DynamicFreeform : IDynamicTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object DynamicFreeform Implements IDynamicTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 DynamicFreeform(Mat4d) Ctor. public DynamicFreeform(Mat4d mat) Parameters mat Mat4d transform matrix DynamicFreeform(Mat4d, Mat4d) Ctor. public DynamicFreeform(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix DynamicFreeform(XElement) Ctor. public DynamicFreeform(XElement src) Parameters src XElement XML Properties XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. SetMat(Mat4d) public void SetMat(Mat4d mat) Parameters mat Mat4d SetMat(Mat4d, Mat4d) Set transform matrix. public void SetMat(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix ToPresentDto() Convert StaticFreeform 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 matrix properties" + "summary": "Class DynamicFreeform Namespace Hi.Mech.Topo Assembly HiMech.dll Dynamic Freeform transformer. public class DynamicFreeform : IDynamicTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object DynamicFreeform Implements IDynamicTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 DynamicFreeform(Mat4d) Ctor. public DynamicFreeform(Mat4d mat) Parameters mat Mat4d transform matrix DynamicFreeform(Mat4d, Mat4d) Ctor. public DynamicFreeform(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix DynamicFreeform(XElement) Ctor. public DynamicFreeform(XElement src) Parameters src XElement XML Properties XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetMat(Mat4d) public void SetMat(Mat4d mat) Parameters mat Mat4d SetMat(Mat4d, Mat4d) Set transform matrix. public void SetMat(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix ToPresentDto() Convert StaticFreeform 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 matrix properties" }, "api/Hi.Mech.Topo.DynamicRotation.html": { "href": "api/Hi.Mech.Topo.DynamicRotation.html", "title": "Class DynamicRotation | HiAPI-C# 2025", - "summary": "Class DynamicRotation Namespace Hi.Mech.Topo Assembly HiMech.dll Dynamic rotate transformer. public class DynamicRotation : IDynamicRotation, IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object DynamicRotation Implements IDynamicRotation IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto Derived NcRotation 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 DynamicRotation() Ctor. public DynamicRotation() DynamicRotation(Vec3d, double, Vec3d) Ctor. public DynamicRotation(Vec3d axis, double angle_rad = 0, Vec3d pivot = null) Parameters axis Vec3d Axis angle_rad double Angle_rad pivot Vec3d Pivot DynamicRotation(XElement) Ctor. public DynamicRotation(XElement src) Parameters src XElement XML Properties Angle_deg Rotation angle in degree. public double Angle_deg { get; set; } Property Value double Angle_rad Rotation angle in radian. public double Angle_rad { get; set; } Property Value double Axis Rotation axis. public Vec3d Axis { get; set; } Property Value Vec3d Pivot pivot public Vec3d Pivot { get; set; } Property Value Vec3d Step Gets or sets the step. public double Step { get; set; } Property Value double The step. XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public virtual ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Set(DynamicRotation) Copy from src. public void Set(DynamicRotation src) Parameters src DynamicRotation src ToPresentDto() Convert DynamicRotation 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, axis, angleDeg, and pivot properties" + "summary": "Class DynamicRotation Namespace Hi.Mech.Topo Assembly HiMech.dll Dynamic rotate transformer. public class DynamicRotation : IDynamicRotation, IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object DynamicRotation Implements IDynamicRotation IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto Derived NcRotation 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 DynamicRotation() Ctor. public DynamicRotation() DynamicRotation(Vec3d, double, Vec3d) Ctor. public DynamicRotation(Vec3d axis, double angle_rad = 0, Vec3d pivot = null) Parameters axis Vec3d Axis angle_rad double Angle_rad pivot Vec3d Pivot DynamicRotation(XElement) Ctor. public DynamicRotation(XElement src) Parameters src XElement XML Properties Angle_deg Rotation angle in degree. public double Angle_deg { get; set; } Property Value double Angle_rad Rotation angle in radian. public double Angle_rad { get; set; } Property Value double Axis Rotation axis. public Vec3d Axis { get; set; } Property Value Vec3d Pivot pivot public Vec3d Pivot { get; set; } Property Value Vec3d Step Gets or sets the step. public double Step { get; set; } Property Value double The step. XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public virtual ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Set(DynamicRotation) Copy from src. public void Set(DynamicRotation src) Parameters src DynamicRotation src ToPresentDto() Convert DynamicRotation 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, axis, angleDeg, and pivot properties" }, "api/Hi.Mech.Topo.DynamicTranslation.html": { "href": "api/Hi.Mech.Topo.DynamicTranslation.html", "title": "Class DynamicTranslation | HiAPI-C# 2025", - "summary": "Class DynamicTranslation Namespace Hi.Mech.Topo Assembly HiMech.dll Dynamic translate transformer public class DynamicTranslation : IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object DynamicTranslation Implements IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto Derived NcTranslation 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 DynamicTranslation() Ctor. public DynamicTranslation() DynamicTranslation(Vec3d, double) Ctor. public DynamicTranslation(Vec3d axis, double len = 0) Parameters axis Vec3d Translation axis len double length DynamicTranslation(XElement) Ctor. public DynamicTranslation(XElement src) Parameters src XElement XML Properties Axis Translation Axis. public Vec3d Axis { get; set; } Property Value Vec3d Len Length. public double Len { get; set; } Property Value double Step Gets or sets the step. public double Step { get; set; } Property Value double The step. XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public virtual ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Set(DynamicTranslation) Copy from src. public void Set(DynamicTranslation src) Parameters src DynamicTranslation src ToPresentDto() Convert DynamicTranslation 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, axis, and step properties" + "summary": "Class DynamicTranslation Namespace Hi.Mech.Topo Assembly HiMech.dll Dynamic translate transformer public class DynamicTranslation : IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object DynamicTranslation Implements IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto Derived NcTranslation 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 DynamicTranslation() Ctor. public DynamicTranslation() DynamicTranslation(Vec3d, double) Ctor. public DynamicTranslation(Vec3d axis, double len = 0) Parameters axis Vec3d Translation axis len double length DynamicTranslation(XElement) Ctor. public DynamicTranslation(XElement src) Parameters src XElement XML Properties Axis Translation Axis. public Vec3d Axis { get; set; } Property Value Vec3d Len Length. public double Len { get; set; } Property Value double Step Gets or sets the step. public double Step { get; set; } Property Value double The step. XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public virtual ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Set(DynamicTranslation) Copy from src. public void Set(DynamicTranslation src) Parameters src DynamicTranslation src ToPresentDto() Convert DynamicTranslation 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, axis, and step properties" }, "api/Hi.Mech.Topo.GeneralTransform.html": { "href": "api/Hi.Mech.Topo.GeneralTransform.html", "title": "Class GeneralTransform | HiAPI-C# 2025", - "summary": "Class GeneralTransform Namespace Hi.Mech.Topo Assembly HiMech.dll Represents a general transformation that combines scaling, rotation, and translation. public class GeneralTransform : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object GeneralTransform Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 GeneralTransform() Initializes a new instance of the GeneralTransform class. public GeneralTransform() GeneralTransform(Mat4d) Initializes a new instance of the GeneralTransform class from a 4x4 transformation matrix. public GeneralTransform(Mat4d mat) Parameters mat Mat4d The transformation matrix. GeneralTransform(double, StaticRotation, StaticTranslation) Initializes a new instance of the GeneralTransform class with specified scale, rotation, and translation. public GeneralTransform(double scale, StaticRotation rotation, StaticTranslation translation) Parameters scale double The scaling factor. rotation StaticRotation The rotation transformation. translation StaticTranslation The translation transformation. GeneralTransform(XElement) Ctor. public GeneralTransform(XElement src) Parameters src XElement XML Properties Rotation 2th transform. public StaticRotation Rotation { get; } Property Value StaticRotation Scale 1th transform. public double Scale { get; set; } Property Value double Translation 3th transform. public StaticTranslation Translation { get; } Property Value StaticTranslation XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. ToPresentDto() Convert GeneralTransform 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, scale, rotation, and translation properties" + "summary": "Class GeneralTransform Namespace Hi.Mech.Topo Assembly HiMech.dll Represents a general transformation that combines scaling, rotation, and translation. public class GeneralTransform : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object GeneralTransform Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 GeneralTransform() Initializes a new instance of the GeneralTransform class. public GeneralTransform() GeneralTransform(Mat4d) Initializes a new instance of the GeneralTransform class from a 4x4 transformation matrix. public GeneralTransform(Mat4d mat) Parameters mat Mat4d The transformation matrix. GeneralTransform(double, StaticRotation, StaticTranslation) Initializes a new instance of the GeneralTransform class with specified scale, rotation, and translation. public GeneralTransform(double scale, StaticRotation rotation, StaticTranslation translation) Parameters scale double The scaling factor. rotation StaticRotation The rotation transformation. translation StaticTranslation The translation transformation. GeneralTransform(XElement) Ctor. public GeneralTransform(XElement src) Parameters src XElement XML Properties Rotation 2th transform. public StaticRotation Rotation { get; } Property Value StaticRotation Scale 1th transform. public double Scale { get; set; } Property Value double Translation 3th transform. public StaticTranslation Translation { get; } Property Value StaticTranslation XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToPresentDto() Convert GeneralTransform 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, scale, rotation, and translation properties" }, "api/Hi.Mech.Topo.IAnchoredDisplayee.html": { "href": "api/Hi.Mech.Topo.IAnchoredDisplayee.html", @@ -2437,27 +2437,27 @@ "api/Hi.Mech.Topo.NoTransform.html": { "href": "api/Hi.Mech.Topo.NoTransform.html", "title": "Class NoTransform | HiAPI-C# 2025", - "summary": "Class NoTransform Namespace Hi.Mech.Topo Assembly HiMech.dll Static Identity Transformer. public class NoTransform : IStaticTransformer, ITransformer, IMakeXmlSource, IToPresentDto, IGetInverseTransformer Inheritance object NoTransform Implements IStaticTransformer ITransformer IMakeXmlSource IToPresentDto IGetInverseTransformer 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 NoTransform() Ctor. public NoTransform() NoTransform(XElement) Ctor. public NoTransform(XElement src) Parameters src XElement XML Properties XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. ToPresentDto() Convert 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 object properties" + "summary": "Class NoTransform Namespace Hi.Mech.Topo Assembly HiMech.dll Static Identity Transformer. public class NoTransform : IStaticTransformer, ITransformer, IMakeXmlSource, IToPresentDto, IGetInverseTransformer Inheritance object NoTransform Implements IStaticTransformer ITransformer IMakeXmlSource IToPresentDto IGetInverseTransformer 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 NoTransform() Ctor. public NoTransform() NoTransform(XElement) Ctor. public NoTransform(XElement src) Parameters src XElement XML Properties XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToPresentDto() Convert 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 object properties" }, "api/Hi.Mech.Topo.StackTransformer.html": { "href": "api/Hi.Mech.Topo.StackTransformer.html", "title": "Class StackTransformer | HiAPI-C# 2025", - "summary": "Class StackTransformer Namespace Hi.Mech.Topo Assembly HiMech.dll Represents a transformer that maintains a stack of transformations. public class StackTransformer : ITransformer, IMakeXmlSource, IToPresentDto, IDisposable Inheritance object StackTransformer Implements ITransformer IMakeXmlSource IToPresentDto 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 StackTransformer() Initializes a new instance of the StackTransformer class. public StackTransformer() StackTransformer(params ITransformer[]) Initializes a new instance of the StackTransformer class with the specified transformers. public StackTransformer(params ITransformer[] transformers) Parameters transformers ITransformer[] A variable-length array of transformers to add to the stack. StackTransformer(XElement, string, IProgress) Initializes a new instance of the StackTransformer class from XML data. public StackTransformer(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML element containing the transformer stack configuration. baseDirectory string The base directory for resolving relative paths. progress IProgress The progress reporter. Properties Count Gets the number of transformers in the stack. public int Count { get; } Property Value int XName Static name. public static string XName { get; } Property Value string Methods Clear() Removes all transformers from the stack. public void Clear() Clone() Creates a deep copy of this transformer stack. public ITransformer Clone() Returns ITransformer A new StackTransformer instance with cloned transformers. Remarks The children ITransformer on stack are all cloned. Dispose() Releases all resources used by the StackTransformer. public void Dispose() Dispose(bool) Releases the unmanaged resources used by the StackTransformer 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. GetMat() Gets the combined transformation matrix of all transformers in the stack. public Mat4d GetMat() Returns Mat4d The combined 4x4 transformation matrix. Remarks The transformations are applied in order from bottom to top of the stack. GetMatInv() Gets the inverse of the combined transformation matrix of all transformers in the stack. public Mat4d GetMatInv() Returns Mat4d The inverse of the combined 4x4 transformation matrix. Remarks The inverse transformations are applied in reverse order (top to bottom of the stack). If forward mats is ABCD, then the inv-mats: DinvCinvBinvAinv. GetStack() Get the copied transformer stack. public List GetStack() Returns List copied stack 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. Peek() Returns the transformer at the top of the stack without removing it. public ITransformer Peek() Returns ITransformer The transformer at the top of the stack, or null if the stack is empty. Pop() Removes and returns the transformer at the top of the stack. public ITransformer Pop() Returns ITransformer The transformer at the top of the stack, or null if the stack is empty. Push(ITransformer) Pushes a transformer onto the stack. public void Push(ITransformer transformer) Parameters transformer ITransformer The transformer to push. ToPresentDto() Convert StackTransformer 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 stack properties" + "summary": "Class StackTransformer Namespace Hi.Mech.Topo Assembly HiMech.dll Represents a transformer that maintains a stack of transformations. public class StackTransformer : ITransformer, IMakeXmlSource, IToPresentDto, IDisposable Inheritance object StackTransformer Implements ITransformer IMakeXmlSource IToPresentDto 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 StackTransformer() Initializes a new instance of the StackTransformer class. public StackTransformer() StackTransformer(params ITransformer[]) Initializes a new instance of the StackTransformer class with the specified transformers. public StackTransformer(params ITransformer[] transformers) Parameters transformers ITransformer[] A variable-length array of transformers to add to the stack. StackTransformer(XElement, string, IProgress) Initializes a new instance of the StackTransformer class from XML data. public StackTransformer(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML element containing the transformer stack configuration. baseDirectory string The base directory for resolving relative paths. progress IProgress The progress reporter. Properties Count Gets the number of transformers in the stack. public int Count { get; } Property Value int XName Static name. public static string XName { get; } Property Value string Methods Clear() Removes all transformers from the stack. public void Clear() Clone() Creates a deep copy of this transformer stack. public ITransformer Clone() Returns ITransformer A new StackTransformer instance with cloned transformers. Remarks The children ITransformer on stack are all cloned. Dispose() Releases all resources used by the StackTransformer. public void Dispose() Dispose(bool) Releases the unmanaged resources used by the StackTransformer 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. GetMat() Gets the combined transformation matrix of all transformers in the stack. public Mat4d GetMat() Returns Mat4d The combined 4x4 transformation matrix. Remarks The transformations are applied in order from bottom to top of the stack. GetMatInv() Gets the inverse of the combined transformation matrix of all transformers in the stack. public Mat4d GetMatInv() Returns Mat4d The inverse of the combined 4x4 transformation matrix. Remarks The inverse transformations are applied in reverse order (top to bottom of the stack). If forward mats is ABCD, then the inv-mats: DinvCinvBinvAinv. GetStack() Get the copied transformer stack. public List GetStack() Returns List copied stack 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. Peek() Returns the transformer at the top of the stack without removing it. public ITransformer Peek() Returns ITransformer The transformer at the top of the stack, or null if the stack is empty. Pop() Removes and returns the transformer at the top of the stack. public ITransformer Pop() Returns ITransformer The transformer at the top of the stack, or null if the stack is empty. Push(ITransformer) Pushes a transformer onto the stack. public void Push(ITransformer transformer) Parameters transformer ITransformer The transformer to push. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToPresentDto() Convert StackTransformer 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 stack properties" }, "api/Hi.Mech.Topo.StaticFreeform.html": { "href": "api/Hi.Mech.Topo.StaticFreeform.html", "title": "Class StaticFreeform | HiAPI-C# 2025", - "summary": "Class StaticFreeform Namespace Hi.Mech.Topo Assembly HiMech.dll Static Freeform transformer. public class StaticFreeform : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object StaticFreeform Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 StaticFreeform() Ctor. public StaticFreeform() StaticFreeform(Mat4d) Ctor. public StaticFreeform(Mat4d mat) Parameters mat Mat4d transform matrix StaticFreeform(Mat4d, Mat4d) Ctor. public StaticFreeform(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix StaticFreeform(XElement) Ctor. public StaticFreeform(XElement src) Parameters src XElement XML Properties XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. SetMat(Mat4d) public void SetMat(Mat4d mat) Parameters mat Mat4d SetMat(Mat4d, Mat4d) Set transform matrix. public void SetMat(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix ToPresentDto() Convert StaticFreeform 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 matrix properties" + "summary": "Class StaticFreeform Namespace Hi.Mech.Topo Assembly HiMech.dll Static Freeform transformer. public class StaticFreeform : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object StaticFreeform Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 StaticFreeform() Ctor. public StaticFreeform() StaticFreeform(Mat4d) Ctor. public StaticFreeform(Mat4d mat) Parameters mat Mat4d transform matrix StaticFreeform(Mat4d, Mat4d) Ctor. public StaticFreeform(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix StaticFreeform(XElement) Ctor. public StaticFreeform(XElement src) Parameters src XElement XML Properties XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetMat(Mat4d) public void SetMat(Mat4d mat) Parameters mat Mat4d SetMat(Mat4d, Mat4d) Set transform matrix. public void SetMat(Mat4d mat, Mat4d matInv) Parameters mat Mat4d transform matrix matInv Mat4d inversed transform matrix ToPresentDto() Convert StaticFreeform 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 matrix properties" }, "api/Hi.Mech.Topo.StaticRotation.html": { "href": "api/Hi.Mech.Topo.StaticRotation.html", "title": "Class StaticRotation | HiAPI-C# 2025", - "summary": "Class StaticRotation Namespace Hi.Mech.Topo Assembly HiMech.dll Static Rotation. public class StaticRotation : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object StaticRotation Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 StaticRotation() Initializes a new instance of the StaticRotation class. public StaticRotation() StaticRotation(Vec3d, double) Ctor. public StaticRotation(Vec3d axis, double angle_rad) Parameters axis Vec3d Axis angle_rad double Angle_rad StaticRotation(Vec3d, double, Vec3d) Ctor. public StaticRotation(Vec3d axis, double angle_rad, Vec3d pivot) Parameters axis Vec3d angle_rad double pivot Vec3d StaticRotation(XElement) Initializes a new instance of the StaticRotation class from XML data. public StaticRotation(XElement src) Parameters src XElement The XML element containing the rotation data. Properties Angle_deg Gets or sets the rotation angle in degrees. public double Angle_deg { get; set; } Property Value double Angle_rad Gets or sets the rotation angle in radians. public double Angle_rad { get; set; } Property Value double Axis Gets or sets the rotation axis. public Vec3d Axis { get; set; } Property Value Vec3d Pivot Gets or sets the pivot point for the rotation. public Vec3d Pivot { get; set; } Property Value Vec3d XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets a new transformer that represents the inverse of this rotation. public ITransformer GetInverseTransformer() Returns ITransformer An inverse transformer instance. GetMat() Gets the transformation matrix representing this rotation. public Mat4d GetMat() Returns Mat4d A 4x4 transformation matrix. GetMatInv() Gets the inverse transformation matrix of this rotation. public Mat4d GetMatInv() Returns Mat4d A 4x4 inverse transformation matrix. 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. ToPresentDto() Convert StaticRotation 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, axis, angleDeg, and pivot properties" + "summary": "Class StaticRotation Namespace Hi.Mech.Topo Assembly HiMech.dll Static Rotation. public class StaticRotation : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object StaticRotation Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 StaticRotation() Initializes a new instance of the StaticRotation class. public StaticRotation() StaticRotation(Vec3d, double) Ctor. public StaticRotation(Vec3d axis, double angle_rad) Parameters axis Vec3d Axis angle_rad double Angle_rad StaticRotation(Vec3d, double, Vec3d) Ctor. public StaticRotation(Vec3d axis, double angle_rad, Vec3d pivot) Parameters axis Vec3d angle_rad double pivot Vec3d StaticRotation(XElement) Initializes a new instance of the StaticRotation class from XML data. public StaticRotation(XElement src) Parameters src XElement The XML element containing the rotation data. Properties Angle_deg Gets or sets the rotation angle in degrees. public double Angle_deg { get; set; } Property Value double Angle_rad Gets or sets the rotation angle in radians. public double Angle_rad { get; set; } Property Value double Axis Gets or sets the rotation axis. public Vec3d Axis { get; set; } Property Value Vec3d Pivot Gets or sets the pivot point for the rotation. public Vec3d Pivot { get; set; } Property Value Vec3d XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets a new transformer that represents the inverse of this rotation. public ITransformer GetInverseTransformer() Returns ITransformer An inverse transformer instance. GetMat() Gets the transformation matrix representing this rotation. public Mat4d GetMat() Returns Mat4d A 4x4 transformation matrix. GetMatInv() Gets the inverse transformation matrix of this rotation. public Mat4d GetMatInv() Returns Mat4d A 4x4 inverse transformation matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToPresentDto() Convert StaticRotation 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, axis, angleDeg, and pivot properties" }, "api/Hi.Mech.Topo.StaticTranslation.html": { "href": "api/Hi.Mech.Topo.StaticTranslation.html", "title": "Class StaticTranslation | HiAPI-C# 2025", - "summary": "Class StaticTranslation Namespace Hi.Mech.Topo Assembly HiMech.dll Static Translate. public class StaticTranslation : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object StaticTranslation Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 StaticTranslation() Ctor. public StaticTranslation() StaticTranslation(Vec3d) Ctor. public StaticTranslation(Vec3d trans) Parameters trans Vec3d translation StaticTranslation(double, double, double) Ctor. public StaticTranslation(double x, double y, double z) Parameters x double translation x y double translation y z double translation z StaticTranslation(XElement) Ctor. public StaticTranslation(XElement src) Parameters src XElement XML Properties Trans Translation. public Vec3d Trans { get; set; } Property Value Vec3d XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Set(StaticTranslation) Copy from src. public void Set(StaticTranslation src) Parameters src StaticTranslation src ToPresentDto() Convert StaticTranslation 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 translation properties ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class StaticTranslation Namespace Hi.Mech.Topo Assembly HiMech.dll Static Translate. public class StaticTranslation : IStaticTransformer, ITransformer, IMakeXmlSource, IGetInverseTransformer, IToPresentDto Inheritance object StaticTranslation Implements IStaticTransformer ITransformer IMakeXmlSource IGetInverseTransformer IToPresentDto 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 StaticTranslation() Ctor. public StaticTranslation() StaticTranslation(Vec3d) Ctor. public StaticTranslation(Vec3d trans) Parameters trans Vec3d translation StaticTranslation(double, double, double) Ctor. public StaticTranslation(double x, double y, double z) Parameters x double translation x y double translation y z double translation z StaticTranslation(XElement) Ctor. public StaticTranslation(XElement src) Parameters src XElement XML Properties Trans Translation. public Vec3d Trans { get; set; } Property Value Vec3d XName Static name. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public ITransformer Clone() Returns ITransformer clone GetInverseTransformer() Gets the inverse transformer of this transformer. public ITransformer GetInverseTransformer() Returns ITransformer The inverse transformer. GetMat() Gets the transform matrix. public Mat4d GetMat() Returns Mat4d The transform matrix. GetMatInv() Gets the inverse transform matrix. public Mat4d GetMatInv() Returns Mat4d The inverse transform matrix. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Set(StaticTranslation) Copy from src. public void Set(StaticTranslation src) Parameters src StaticTranslation src ToPresentDto() Convert StaticTranslation 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 translation properties ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.Mech.Topo.TopoDisplayee.html": { "href": "api/Hi.Mech.Topo.TopoDisplayee.html", @@ -2482,7 +2482,7 @@ "api/Hi.Mech.Topo.TransformerUtil.html": { "href": "api/Hi.Mech.Topo.TransformerUtil.html", "title": "Class TransformerUtil | HiAPI-C# 2025", - "summary": "Class TransformerUtil Namespace Hi.Mech.Topo Assembly HiMech.dll Utility for ITransformer. public static class TransformerUtil Inheritance object TransformerUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Dummy() The function is for trigger the static constructor of this class. The function is empty. The static constructor register the class to the XFactory. public static void Dummy() GetSteps(IDynamicRegular[]) Gets the steps. public static double[] GetSteps(IDynamicRegular[] dynamics) Parameters dynamics IDynamicRegular[] The dynamics. Returns double[] the steps SetSteps(IDynamicRegular[], double[]) Sets the steps. public static void SetSteps(IDynamicRegular[] dynamics, double[] steps) Parameters dynamics IDynamicRegular[] The dynamics. steps double[] The steps." + "summary": "Class TransformerUtil Namespace Hi.Mech.Topo Assembly HiMech.dll Utility for ITransformer. public static class TransformerUtil Inheritance object TransformerUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetSteps(IDynamicRegular[]) Gets the steps. public static double[] GetSteps(IDynamicRegular[] dynamics) Parameters dynamics IDynamicRegular[] The dynamics. Returns double[] the steps Reg(XFactory) Registers every concrete ITransformer implementation with the given XFactory: NoTransform, StaticTranslation, StaticRotation, StaticFreeform, DynamicTranslation, DynamicRotation, DynamicFreeform, StackTransformer, and GeneralTransform. Composites that deserialize a Branch (whose Transformer child can be any of the above) should chain this from their own Reg(factory). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetSteps(IDynamicRegular[], double[]) Sets the steps. public static void SetSteps(IDynamicRegular[] dynamics, double[] steps) Parameters dynamics IDynamicRegular[] The dynamics. steps double[] The steps." }, "api/Hi.Mech.Topo.html": { "href": "api/Hi.Mech.Topo.html", @@ -2502,32 +2502,32 @@ "api/Hi.Milling.Apts.BallApt.html": { "href": "api/Hi.Milling.Apts.BallApt.html", "title": "Class BallApt | HiAPI-C# 2025", - "summary": "Class BallApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Ball End Apt. public class BallApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IToXElement Inheritance object BallApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate 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 BallApt() Ctor. public BallApt() BallApt(XElement) Ctor. public BallApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class BallApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Ball End Apt. public class BallApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IToXElement Inheritance object BallApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate 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 BallApt() Ctor. public BallApt() BallApt(XElement) Ctor. public BallApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Milling.Apts.BullNoseApt.html": { "href": "api/Hi.Milling.Apts.BullNoseApt.html", "title": "Class BullNoseApt | HiAPI-C# 2025", - "summary": "Class BullNoseApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Bull Nose End APT. public class BullNoseApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptRc, IToXElement Inheritance object BullNoseApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptRc 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 BullNoseApt() Ctor. public BullNoseApt() BullNoseApt(XElement) Ctor. public BullNoseApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double Rc_mm Round corner radius. public double Rc_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class BullNoseApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Bull Nose End APT. public class BullNoseApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptRc, IToXElement Inheritance object BullNoseApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptRc 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 BullNoseApt() Ctor. public BullNoseApt() BullNoseApt(XElement) Ctor. public BullNoseApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double Rc_mm Round corner radius. public double Rc_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Milling.Apts.ColumnApt.html": { "href": "api/Hi.Milling.Apts.ColumnApt.html", "title": "Class ColumnApt | HiAPI-C# 2025", - "summary": "Class ColumnApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Column End APT. The composition is identical to the BullNoseApt. However, the nose radius is generally smaller than the BullNoseApt. public class ColumnApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptRc, IToXElement Inheritance object ColumnApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptRc 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 ColumnApt() Ctor. public ColumnApt() ColumnApt(XElement) Ctor. public ColumnApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double Rc_mm Round corner radius. public double Rc_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class ColumnApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Column End APT. The composition is identical to the BullNoseApt. However, the nose radius is generally smaller than the BullNoseApt. public class ColumnApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptRc, IToXElement Inheritance object ColumnApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptRc 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 ColumnApt() Ctor. public ColumnApt() ColumnApt(XElement) Ctor. public ColumnApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double Rc_mm Round corner radius. public double Rc_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Milling.Apts.ConeApt.html": { "href": "api/Hi.Milling.Apts.ConeApt.html", "title": "Class ConeApt | HiAPI-C# 2025", - "summary": "Class ConeApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Cone End APT. public class ConeApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptAlpha, IToXElement Inheritance object ConeApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptAlpha 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 ConeApt() Ctor. public ConeApt() ConeApt(XElement) Ctor. public ConeApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Alpha_deg Alpha angle in degree. public double Alpha_deg { get; set; } Property Value double Alpha_rad Alpha angle in radian. public double Alpha_rad { get; set; } Property Value double Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class ConeApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Cone End APT. public class ConeApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptAlpha, IToXElement Inheritance object ConeApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptAlpha 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 ConeApt() Ctor. public ConeApt() ConeApt(XElement) Ctor. public ConeApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Alpha_deg Alpha angle in degree. public double Alpha_deg { get; set; } Property Value double Alpha_rad Alpha angle in radian. public double Alpha_rad { get; set; } Property Value double Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Milling.Apts.ExactColumnApt.html": { "href": "api/Hi.Milling.Apts.ExactColumnApt.html", "title": "Class ExactColumnApt | HiAPI-C# 2025", - "summary": "Class ExactColumnApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Column End APT. public class ExactColumnApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IToXElement Inheritance object ExactColumnApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate 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 ExactColumnApt() Ctor. public ExactColumnApt() ExactColumnApt(XElement) Ctor. public ExactColumnApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class ExactColumnApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Column End APT. public class ExactColumnApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IToXElement Inheritance object ExactColumnApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate 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 ExactColumnApt() Ctor. public ExactColumnApt() ExactColumnApt(XElement) Ctor. public ExactColumnApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Flute Height. public double FluteHeight_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Milling.Apts.GeneralApt.html": { "href": "api/Hi.Milling.Apts.GeneralApt.html", "title": "Class GeneralApt | HiAPI-C# 2025", - "summary": "Class GeneralApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll APT standard milling cutter geometry. public class GeneralApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IEquatable, IAptRc, IAptRr, IAptRz, IAptAlpha, IAptBeta, IGetZrContour, IToXElement, IGenStl, IClearCache Inheritance object GeneralApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IEquatable IAptRc IAptRr IAptRz IAptAlpha IAptBeta IGetZrContour IToXElement IGenStl IClearCache 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 GeneralApt() Ctor. public GeneralApt() GeneralApt(GeneralApt) Copy ctor. public GeneralApt(GeneralApt src) Parameters src GeneralApt src GeneralApt(double, double, double, double, double, double, double) Ctor. public GeneralApt(double D, double R0, double Rr, double Rz, double alpha_rad, double beta_rad, double fluteH) Parameters D double see Diameter_mm R0 double see Rc_mm Rr double see Rr_mm Rz double see Rz_mm alpha_rad double see Alpha_rad beta_rad double see Beta_rad fluteH double see FluteHeight_mm GeneralApt(XElement) Ctor. public GeneralApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Alpha_deg Alpha_rad in degree. public double Alpha_deg { get; set; } Property Value double Alpha_rad The angle between horizontal plane and the cone surface of the cutter tip. The angle is downside the cutter round (if exists). If the cutter is cylindrical mill, the angle is 0. The unit is radian. public double Alpha_rad { get; set; } Property Value double AptDerivative Gets the APT derivative object, creating it if it doesn't exist. public AptDerivative AptDerivative { get; } Property Value AptDerivative Beta_deg Beta_rad in degree. public double Beta_deg { get; set; } Property Value double Beta_rad The angle between stick axis and the side plane of cutter. The angle is upside the cutter round (if exists). The unit is radian. public double Beta_rad { get; set; } Property Value double Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Full Height. public double FluteHeight_mm { get; set; } Property Value double Rc_mm Round radius. public double Rc_mm { get; set; } Property Value double Rr_mm Distance between round center to the stick axis. public double Rr_mm { get; set; } Property Value double Rz_mm Center between the tip to the round center. public double Rz_mm { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears the internal cache of APT derivative. 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 Equals(GeneralApt) Indicates whether the current object is equal to another object of the same type. public bool Equals(GeneralApt src) Parameters src GeneralApt 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. 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 GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d polarResolution) Parameters polarResolution IPolarResolution2d Returns Stl A newly created STL. GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetZrContour(double) Gets Z-R contour data as a list of PairZr objects. The Z values should generally be ordered from smallest to largest. public IList GetZrContour(double latitudeAngleResolution_rad) Parameters latitudeAngleResolution_rad double Resolution of latitude angle in radians Returns IList Z-R contour data as a list of PairZr objects 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class GeneralApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll APT standard milling cutter geometry. public class GeneralApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IEquatable, IAptRc, IAptRr, IAptRz, IAptAlpha, IAptBeta, IGetZrContour, IToXElement, IGenStl, IClearCache Inheritance object GeneralApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IEquatable IAptRc IAptRr IAptRz IAptAlpha IAptBeta IGetZrContour IToXElement IGenStl IClearCache 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 GeneralApt() Ctor. public GeneralApt() GeneralApt(GeneralApt) Copy ctor. public GeneralApt(GeneralApt src) Parameters src GeneralApt src GeneralApt(double, double, double, double, double, double, double) Ctor. public GeneralApt(double D, double R0, double Rr, double Rz, double alpha_rad, double beta_rad, double fluteH) Parameters D double see Diameter_mm R0 double see Rc_mm Rr double see Rr_mm Rz double see Rz_mm alpha_rad double see Alpha_rad beta_rad double see Beta_rad fluteH double see FluteHeight_mm GeneralApt(XElement) Ctor. public GeneralApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Alpha_deg Alpha_rad in degree. public double Alpha_deg { get; set; } Property Value double Alpha_rad The angle between horizontal plane and the cone surface of the cutter tip. The angle is downside the cutter round (if exists). If the cutter is cylindrical mill, the angle is 0. The unit is radian. public double Alpha_rad { get; set; } Property Value double AptDerivative Gets the APT derivative object, creating it if it doesn't exist. public AptDerivative AptDerivative { get; } Property Value AptDerivative Beta_deg Beta_rad in degree. public double Beta_deg { get; set; } Property Value double Beta_rad The angle between stick axis and the side plane of cutter. The angle is upside the cutter round (if exists). The unit is radian. public double Beta_rad { get; set; } Property Value double Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Full Height. public double FluteHeight_mm { get; set; } Property Value double Rc_mm Round radius. public double Rc_mm { get; set; } Property Value double Rr_mm Distance between round center to the stick axis. public double Rr_mm { get; set; } Property Value double Rz_mm Center between the tip to the round center. public double Rz_mm { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears the internal cache of APT derivative. 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 Equals(GeneralApt) Indicates whether the current object is equal to another object of the same type. public bool Equals(GeneralApt src) Parameters src GeneralApt 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. 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 GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d polarResolution) Parameters polarResolution IPolarResolution2d Returns Stl A newly created STL. GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetZrContour(double) Gets Z-R contour data as a list of PairZr objects. The Z values should generally be ordered from smallest to largest. public IList GetZrContour(double latitudeAngleResolution_rad) Parameters latitudeAngleResolution_rad double Resolution of latitude angle in radians Returns IList Z-R contour data as a list of PairZr objects MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Milling.Apts.IAptAlpha.html": { "href": "api/Hi.Milling.Apts.IAptAlpha.html", @@ -2572,7 +2572,7 @@ "api/Hi.Milling.Apts.TaperApt.html": { "href": "api/Hi.Milling.Apts.TaperApt.html", "title": "Class TaperApt | HiAPI-C# 2025", - "summary": "Class TaperApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Taper End APT. public class TaperApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptRz, IAptAlpha, IAptBeta, IToXElement Inheritance object TaperApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptRz IAptAlpha IAptBeta 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 TaperApt() Ctor. public TaperApt() TaperApt(XElement) Ctor. public TaperApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Alpha_deg Alpha_rad in degree. public double Alpha_deg { get; set; } Property Value double Alpha_rad The angle between horizontal plane and the cone surface of the cutter tip. The angle is downside the cutter round (if exists). If the cutter is cylindrical mill, the angle is 0. The unit is radian. public double Alpha_rad { get; set; } Property Value double Beta_deg Beta_rad in degree. public double Beta_deg { get; set; } Property Value double Beta_rad The angle between stick axis and the side plane of cutter. The angle is upside the cutter round (if exists). The unit is radian. public double Beta_rad { get; set; } Property Value double Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Height of flute. public double FluteHeight_mm { get; set; } Property Value double Rz_mm Center between the tip to the round center. public double Rz_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class TaperApt Namespace Hi.Milling.Apts Assembly HiCbtr.dll Taper End APT. public class TaperApt : IAptBased, IGetGeneralApt, IAbstractNote, IGetDiameter, IGetFluteHeight, IExpandToBox3d, IMakeXmlSource, IDuplicate, IAptRz, IAptAlpha, IAptBeta, IToXElement Inheritance object TaperApt Implements IAptBased IGetGeneralApt IAbstractNote IGetDiameter IGetFluteHeight IExpandToBox3d IMakeXmlSource IDuplicate IAptRz IAptAlpha IAptBeta 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 TaperApt() Ctor. public TaperApt() TaperApt(XElement) Ctor. public TaperApt(XElement src) Parameters src XElement XML Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Alpha_deg Alpha_rad in degree. public double Alpha_deg { get; set; } Property Value double Alpha_rad The angle between horizontal plane and the cone surface of the cutter tip. The angle is downside the cutter round (if exists). If the cutter is cylindrical mill, the angle is 0. The unit is radian. public double Alpha_rad { get; set; } Property Value double Beta_deg Beta_rad in degree. public double Beta_deg { get; set; } Property Value double Beta_rad The angle between stick axis and the side plane of cutter. The angle is upside the cutter round (if exists). The unit is radian. public double Beta_rad { get; set; } Property Value double Diameter_mm Diameter. public double Diameter_mm { get; set; } Property Value double FluteHeight_mm Height of flute. public double FluteHeight_mm { get; set; } Property Value double Rz_mm Center between the tip to the round center. public double Rz_mm { get; set; } Property Value double 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 GetGeneralApt() Get Apt. public GeneralApt GetGeneralApt() Returns GeneralApt Apt MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Milling.Apts.apt_t.html": { "href": "api/Hi.Milling.Apts.apt_t.html", @@ -2587,17 +2587,17 @@ "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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory UpdateByContent() Updates the profile based on content changes. public void UpdateByContent()" }, "api/Hi.Milling.Cutters.ConstRatioProfile.html": { "href": "api/Hi.Milling.Cutters.ConstRatioProfile.html", "title": "Class ConstRatioProfile | HiAPI-C# 2025", - "summary": "Class ConstRatioProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a constant ratio profile for a milling cutter. This profile maintains a constant ratio between inner and outer radii. public class ConstRatioProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGetStl, IDuplicate, IClearCache, IGenStl, IZrListSourceProperty Inheritance object ConstRatioProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGetStl IDuplicate IClearCache IGenStl IZrListSourceProperty 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 ConstRatioProfile() Initializes a new instance of the ConstRatioProfile class. public ConstRatioProfile() ConstRatioProfile(double) Initializes a new instance of the ConstRatioProfile class with a specified radius ratio. public ConstRatioProfile(double innerRadiusRatio) Parameters innerRadiusRatio double The ratio between inner and outer radii ConstRatioProfile(XElement, string) Initializes a new instance of the ConstRatioProfile class. public ConstRatioProfile(XElement element, string baseDirectory) Parameters element XElement The XML element containing profile data. baseDirectory string The base directory for resolving relative paths. Properties AbstractNote Gets the abstract note describing the profile. public string AbstractNote { get; } Property Value string RadiusRatio Gets or sets the ratio between inner and outer radii. public double RadiusRatio { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZrListSource Get base geometry source. Runtime property. public Func ZrListSource { get; set; } Property Value Func Methods ClearCache() Clears any cached data held by the implementing object. 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object 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." + "summary": "Class ConstRatioProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a constant ratio profile for a milling cutter. This profile maintains a constant ratio between inner and outer radii. public class ConstRatioProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGetStl, IDuplicate, IClearCache, IGenStl, IZrListSourceProperty Inheritance object ConstRatioProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGetStl IDuplicate IClearCache IGenStl IZrListSourceProperty 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 ConstRatioProfile() Initializes a new instance of the ConstRatioProfile class. public ConstRatioProfile() ConstRatioProfile(double) Initializes a new instance of the ConstRatioProfile class with a specified radius ratio. public ConstRatioProfile(double innerRadiusRatio) Parameters innerRadiusRatio double The ratio between inner and outer radii ConstRatioProfile(XElement, string) Initializes a new instance of the ConstRatioProfile class. public ConstRatioProfile(XElement element, string baseDirectory) Parameters element XElement The XML element containing profile data. baseDirectory string The base directory for resolving relative paths. Properties AbstractNote Gets the abstract note describing the profile. public string AbstractNote { get; } Property Value string RadiusRatio Gets or sets the ratio between inner and outer radii. public double RadiusRatio { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZrListSource Get base geometry source. Runtime property. public Func ZrListSource { get; set; } Property Value Func Methods ClearCache() Clears any cached data held by the implementing object. 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Milling.Cutters.CutterUtil.html": { "href": "api/Hi.Milling.Cutters.CutterUtil.html", @@ -2612,7 +2612,7 @@ "api/Hi.Milling.Cutters.FluteDependentRatioProfile.html": { "href": "api/Hi.Milling.Cutters.FluteDependentRatioProfile.html", "title": "Class FluteDependentRatioProfile | HiAPI-C# 2025", - "summary": "Class FluteDependentRatioProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a flute number dependent ratio profile for a milling cutter. This profile determines the ratio between inner and outer radii based on the number of flutes. public class FluteDependentRatioProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGenStl, IGetStl, IDuplicate, IClearCache, IFluteNumSourceProperty, IZrListSourceProperty Inheritance object FluteDependentRatioProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGenStl IGetStl IDuplicate IClearCache IFluteNumSourceProperty IZrListSourceProperty 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 FluteDependentRatioProfile() Initializes a new instance. public FluteDependentRatioProfile() FluteDependentRatioProfile(XElement, string) Initializes a new instance of the FluteDependentRatioProfile class. public FluteDependentRatioProfile(XElement element, string baseDirectory) Parameters element XElement The XML element containing profile data. baseDirectory string The base directory for resolving relative paths. Properties AbstractNote Gets the abstract note describing the profile. public string AbstractNote { get; } Property Value string FluteNumSource Gets or sets a delegate that returns the current flute number. public Func FluteNumSource { get; set; } Property Value Func RadiusRatio Gets the radius ratio based on the current number of flutes. public double RadiusRatio { get; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZrListSource Get base geometry source. Runtime property. public Func ZrListSource { get; set; } Property Value Func Methods ClearCache() Clears any cached data held by the implementing object. 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object 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." + "summary": "Class FluteDependentRatioProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a flute number dependent ratio profile for a milling cutter. This profile determines the ratio between inner and outer radii based on the number of flutes. public class FluteDependentRatioProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGenStl, IGetStl, IDuplicate, IClearCache, IFluteNumSourceProperty, IZrListSourceProperty Inheritance object FluteDependentRatioProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGenStl IGetStl IDuplicate IClearCache IFluteNumSourceProperty IZrListSourceProperty 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 FluteDependentRatioProfile() Initializes a new instance. public FluteDependentRatioProfile() FluteDependentRatioProfile(XElement, string) Initializes a new instance of the FluteDependentRatioProfile class. public FluteDependentRatioProfile(XElement element, string baseDirectory) Parameters element XElement The XML element containing profile data. baseDirectory string The base directory for resolving relative paths. Properties AbstractNote Gets the abstract note describing the profile. public string AbstractNote { get; } Property Value string FluteNumSource Gets or sets a delegate that returns the current flute number. public Func FluteNumSource { get; set; } Property Value Func RadiusRatio Gets the radius ratio based on the current number of flutes. public double RadiusRatio { get; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZrListSource Get base geometry source. Runtime property. public Func ZrListSource { get; set; } Property Value Func Methods ClearCache() Clears any cached data held by the implementing object. 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 geometry data. public Stl GetStl() Returns Stl The STL geometry object 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Milling.Cutters.IShaperProfile.html": { "href": "api/Hi.Milling.Cutters.IShaperProfile.html", @@ -2632,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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -2692,12 +2692,12 @@ "api/Hi.Milling.FluteContours.ConstHelixSideContour.html": { "href": "api/Hi.Milling.FluteContours.ConstHelixSideContour.html", "title": "Class ConstHelixSideContour | HiAPI-C# 2025", - "summary": "Class ConstHelixSideContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a constant helix side contour for milling cutters. public class ConstHelixSideContour : ISideContour, IWorkingContour, IExpandToBox3d, IMakeXmlSource, IUpdateByContent, IClearCache, IEquatable Inheritance object ConstHelixSideContour Implements ISideContour IWorkingContour IExpandToBox3d IMakeXmlSource IUpdateByContent IClearCache IEquatable 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) FluteContourUtil.GetDrawing(ISideContour, out Drawing, out Drawing, out NativeTopoStld) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ConstHelixSideContour(IGetZrList) Initializes a new instance of the ConstHelixSideContour class. public ConstHelixSideContour(IGetZrList zrListHost) Parameters zrListHost IGetZrList The Z-R list host. ConstHelixSideContour(double, double, IGetZrList) Initializes a new instance of the ConstHelixSideContour class. public ConstHelixSideContour(double helix_rad, double radialRakeAngle_rad, IGetZrList zrListHost) Parameters helix_rad double The helix angle in radians. radialRakeAngle_rad double The radial rake angle in radians. zrListHost IGetZrList The Z-R list host. ConstHelixSideContour(XElement, string, IGetZrList) Initializes a new instance of the ConstHelixSideContour class from XML. public ConstHelixSideContour(XElement src, string baseDirectory, IGetZrList zrListHost) Parameters src XElement The XML element containing the configuration. baseDirectory string The base directory for resolving relative paths. zrListHost IGetZrList The Z-R list host. Properties Helix_deg Helix_rad in degree. public double Helix_deg { get; set; } Property Value double Helix_rad Helix angle in radian. public double Helix_rad { get; set; } Property Value double KeyRange Gets the key range of the flute contour. public Range KeyRange { get; } Property Value Range Remarks For ISideContour, this represents the Z-value range (height range) For IBottomContour, this represents the R-value range (radial range) RadialRakeAngle_deg Gets or sets the radial rake angle in degrees. public double RadialRakeAngle_deg { get; set; } Property Value double RadialRakeAngle_rad Gets or sets the radial rake angle in radians. public double RadialRakeAngle_rad { get; set; } Property Value double RadialReliefAngle_deg Gets or sets the radial relief angle in degrees. public double RadialReliefAngle_deg { get; set; } Property Value double RadialReliefAngle_rad Gets or sets the radial relief angle in radians. public double RadialReliefAngle_rad { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZrListHost Gets or sets the Z-R list host. public IGetZrList ZrListHost { get; set; } Property Value IGetZrList Methods ClearCache() Clears the cached data. public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this contour with a new Z-R list host. public IWorkingContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The new Z-R list host. Returns IWorkingContour A duplicate of this contour. Equals(ConstHelixSideContour) Indicates whether the current object is equal to another object of the same type. public bool Equals(ConstHelixSideContour other) Parameters other ConstHelixSideContour 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. 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 GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetSpanContourPosList() Gets a list of span contour positions that define the working contour geometry. public List GetSpanContourPosList() Returns List A list of SpanContourPos4d objects representing the contour geometry Remarks The positions are ordered: For ISideContour, positions are ordered by ascending Z values For IBottomContour, positions are ordered by ascending R values Note: Future implementation may use List> for block flute support. 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 ConstHelixSideContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a constant helix side contour for milling cutters. public class ConstHelixSideContour : ISideContour, IWorkingContour, IExpandToBox3d, IMakeXmlSource, IUpdateByContent, IClearCache, IEquatable Inheritance object ConstHelixSideContour Implements ISideContour IWorkingContour IExpandToBox3d IMakeXmlSource IUpdateByContent IClearCache IEquatable 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) FluteContourUtil.GetDrawing(ISideContour, out Drawing, out Drawing, out NativeTopoStld) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ConstHelixSideContour(IGetZrList) Initializes a new instance of the ConstHelixSideContour class. public ConstHelixSideContour(IGetZrList zrListHost) Parameters zrListHost IGetZrList The Z-R list host. ConstHelixSideContour(double, double, IGetZrList) Initializes a new instance of the ConstHelixSideContour class. public ConstHelixSideContour(double helix_rad, double radialRakeAngle_rad, IGetZrList zrListHost) Parameters helix_rad double The helix angle in radians. radialRakeAngle_rad double The radial rake angle in radians. zrListHost IGetZrList The Z-R list host. ConstHelixSideContour(XElement, string, IGetZrList) Initializes a new instance of the ConstHelixSideContour class from XML. public ConstHelixSideContour(XElement src, string baseDirectory, IGetZrList zrListHost) Parameters src XElement The XML element containing the configuration. baseDirectory string The base directory for resolving relative paths. zrListHost IGetZrList The Z-R list host. Properties Helix_deg Helix_rad in degree. public double Helix_deg { get; set; } Property Value double Helix_rad Helix angle in radian. public double Helix_rad { get; set; } Property Value double KeyRange Gets the key range of the flute contour. public Range KeyRange { get; } Property Value Range Remarks For ISideContour, this represents the Z-value range (height range) For IBottomContour, this represents the R-value range (radial range) RadialRakeAngle_deg Gets or sets the radial rake angle in degrees. public double RadialRakeAngle_deg { get; set; } Property Value double RadialRakeAngle_rad Gets or sets the radial rake angle in radians. public double RadialRakeAngle_rad { get; set; } Property Value double RadialReliefAngle_deg Gets or sets the radial relief angle in degrees. public double RadialReliefAngle_deg { get; set; } Property Value double RadialReliefAngle_rad Gets or sets the radial relief angle in radians. public double RadialReliefAngle_rad { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string ZrListHost Gets or sets the Z-R list host. public IGetZrList ZrListHost { get; set; } Property Value IGetZrList Methods ClearCache() Clears the cached data. public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this contour with a new Z-R list host. public IWorkingContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The new Z-R list host. Returns IWorkingContour A duplicate of this contour. Equals(ConstHelixSideContour) Indicates whether the current object is equal to another object of the same type. public bool Equals(ConstHelixSideContour other) Parameters other ConstHelixSideContour 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. 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 GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetSpanContourPosList() Gets a list of span contour positions that define the working contour geometry. public List GetSpanContourPosList() Returns List A list of SpanContourPos4d objects representing the contour geometry Remarks The positions are ordered: For ISideContour, positions are ordered by ascending Z values For IBottomContour, positions are ordered by ascending R values Note: Future implementation may use List> for block flute support. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" }, "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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -2707,12 +2707,12 @@ "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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", "title": "Class FreeformSideContour | HiAPI-C# 2025", - "summary": "Class FreeformSideContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a freeform side contour for milling tools, allowing arbitrary contour shapes. public class FreeformSideContour : ISideContour, IWorkingContour, IExpandToBox3d, IMakeXmlSource, IUpdateByContent, IClearCache, IEquatable Inheritance object FreeformSideContour Implements ISideContour IWorkingContour IExpandToBox3d IMakeXmlSource IUpdateByContent IClearCache IEquatable 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) FluteContourUtil.GetDrawing(ISideContour, out Drawing, out Drawing, out NativeTopoStld) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks This class provides a flexible way to define side contours with custom shapes: Implements ISideContour for basic side contour functionality Supports XML serialization for data persistence Maintains a list of contour positions ordered by Z-coordinate Constructors FreeformSideContour() Initializes a new instance of the FreeformSideContour class public FreeformSideContour() FreeformSideContour(XElement, string) Initializes a new instance of the FreeformSideContour class from XML data public FreeformSideContour(XElement src, string baseDirectory) Parameters src XElement The source XML element containing the contour data baseDirectory string The base directory for resolving relative paths Properties KeyRange Gets the Z-value range (height range) of the contour public Range KeyRange { get; } Property Value Range Remarks The range is calculated from the first and last points in the SpanContourPosList, which are ordered by Z-coordinate SpanContourPosList Gets or sets the list of contour positions ordered by Z-coordinate public List SpanContourPosList { get; set; } Property Value List Remarks Each position in the list represents a point on the contour with its associated geometric and angular properties XName Gets the XML name for serialization public static string XName { get; } Property Value string Methods ClearCache() Clears the cached key range value public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this freeform side contour public IWorkingContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The host containing Z-R list information Returns IWorkingContour A new instance of FreeformSideContour with the same properties Equals(FreeformSideContour) Determines whether the specified FreeformSideContour is equal to the current FreeformSideContour public bool Equals(FreeformSideContour other) Parameters other FreeformSideContour The FreeformSideContour to compare with the current FreeformSideContour Returns bool true if the specified FreeformSideContour is equal to the current FreeformSideContour; 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 ExpandToBox3d(Box3d) Expands the given bounding box to include this contour public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand GetHashCode() Returns a hash code for this instance public override int GetHashCode() Returns int A hash code value based on the contour positions GetSpanContourPosList() Gets the list of span contour positions that define the contour geometry public List GetSpanContourPosList() Returns List The list of contour positions ordered by Z-coordinate 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 contour's internal state based on its current content public void UpdateByContent()" + "summary": "Class FreeformSideContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a freeform side contour for milling tools, allowing arbitrary contour shapes. public class FreeformSideContour : ISideContour, IWorkingContour, IExpandToBox3d, IMakeXmlSource, IUpdateByContent, IClearCache, IEquatable Inheritance object FreeformSideContour Implements ISideContour IWorkingContour IExpandToBox3d IMakeXmlSource IUpdateByContent IClearCache IEquatable 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) FluteContourUtil.GetDrawing(ISideContour, out Drawing, out Drawing, out NativeTopoStld) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks This class provides a flexible way to define side contours with custom shapes: Implements ISideContour for basic side contour functionality Supports XML serialization for data persistence Maintains a list of contour positions ordered by Z-coordinate Constructors FreeformSideContour() Initializes a new instance of the FreeformSideContour class public FreeformSideContour() FreeformSideContour(XElement, string) Initializes a new instance of the FreeformSideContour class from XML data public FreeformSideContour(XElement src, string baseDirectory) Parameters src XElement The source XML element containing the contour data baseDirectory string The base directory for resolving relative paths Properties KeyRange Gets the Z-value range (height range) of the contour public Range KeyRange { get; } Property Value Range Remarks The range is calculated from the first and last points in the SpanContourPosList, which are ordered by Z-coordinate SpanContourPosList Gets or sets the list of contour positions ordered by Z-coordinate public List SpanContourPosList { get; set; } Property Value List Remarks Each position in the list represents a point on the contour with its associated geometric and angular properties XName Gets the XML name for serialization public static string XName { get; } Property Value string Methods ClearCache() Clears the cached key range value public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this freeform side contour public IWorkingContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The host containing Z-R list information Returns IWorkingContour A new instance of FreeformSideContour with the same properties Equals(FreeformSideContour) Determines whether the specified FreeformSideContour is equal to the current FreeformSideContour public bool Equals(FreeformSideContour other) Parameters other FreeformSideContour The FreeformSideContour to compare with the current FreeformSideContour Returns bool true if the specified FreeformSideContour is equal to the current FreeformSideContour; 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 ExpandToBox3d(Box3d) Expands the given bounding box to include this contour public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand GetHashCode() Returns a hash code for this instance public override int GetHashCode() Returns int A hash code value based on the contour positions GetSpanContourPosList() Gets the list of span contour positions that define the contour geometry public List GetSpanContourPosList() Returns List The list of contour positions ordered by Z-coordinate MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory UpdateByContent() Updates the contour's internal state based on its current content public void UpdateByContent()" }, "api/Hi.Milling.FluteContours.IBottomContour.html": { "href": "api/Hi.Milling.FluteContours.IBottomContour.html", @@ -2747,7 +2747,7 @@ "api/Hi.Milling.FluteContours.ShiftedWorkingContour.html": { "href": "api/Hi.Milling.FluteContours.ShiftedWorkingContour.html", "title": "Class ShiftedWorkingContour | HiAPI-C# 2025", - "summary": "Class ShiftedWorkingContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a working contour that has been shifted by a specified angle. This class wraps another working contour and applies an angular transformation to it. public class ShiftedWorkingContour : IWorkingContour, IExpandToBox3d, IClearCache, IMakeXmlSource, IEquatable Inheritance object ShiftedWorkingContour Implements IWorkingContour IExpandToBox3d IClearCache IMakeXmlSource IEquatable 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 ShiftedWorkingContour() Initializes a new instance of the ShiftedWorkingContour class public ShiftedWorkingContour() ShiftedWorkingContour(double, IWorkingContour) Initializes a new instance of the ShiftedWorkingContour class with a specified shift angle and baseline contour public ShiftedWorkingContour(double shiftAngle_rad, IWorkingContour baselineWorkingContour) Parameters shiftAngle_rad double The shift angle in radians baselineWorkingContour IWorkingContour The baseline working contour to be shifted ShiftedWorkingContour(XElement, string, IWorkingContour) Initializes a new instance of the ShiftedWorkingContour class from XML data public ShiftedWorkingContour(XElement src, string baseDirectory, IWorkingContour baselineWorkingContour) Parameters src XElement The source XML element baseDirectory string The base directory for resolving relative paths baselineWorkingContour IWorkingContour The baseline working contour to be shifted Properties BaselineWorkingContour Gets or sets the baseline working contour that is being shifted public IWorkingContour BaselineWorkingContour { get; set; } Property Value IWorkingContour KeyRange Gets the key range of the baseline working contour public Range KeyRange { get; } Property Value Range ShiftAngle_deg Gets or sets the shift angle in degrees public double ShiftAngle_deg { get; set; } Property Value double ShiftAngle_rad Gets or sets the shift angle in radians public double ShiftAngle_rad { get; set; } Property Value double XName Gets the XML name for serialization 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 with a new Z-radius list provider. public IWorkingContour Duplicate(IGetZrList zrList) Parameters zrList IGetZrList The Z-radius list provider for the duplicate. Returns IWorkingContour A new instance of ShiftedWorkingContour. Equals(ShiftedWorkingContour) Determines whether the specified ShiftedWorkingContour is equal to the current ShiftedWorkingContour public bool Equals(ShiftedWorkingContour contour) Parameters contour ShiftedWorkingContour The ShiftedWorkingContour to compare with the current ShiftedWorkingContour Returns bool true if the specified ShiftedWorkingContour is equal to the current ShiftedWorkingContour; 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 ExpandToBox3d(Box3d) Expands the given bounding box to include this shifted working contour public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand GetHashCode() Returns a hash code for this instance public override int GetHashCode() Returns int A hash code value GetSpanContourPosList() Gets the list of span contour positions after applying the shift transformation public List GetSpanContourPosList() Returns List A list of transformed span contour positions 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. Operators operator ==(ShiftedWorkingContour, ShiftedWorkingContour) Determines whether two ShiftedWorkingContour instances are equal public static bool operator ==(ShiftedWorkingContour left, ShiftedWorkingContour right) Parameters left ShiftedWorkingContour The first ShiftedWorkingContour to compare right ShiftedWorkingContour The second ShiftedWorkingContour to compare Returns bool true if the specified ShiftedWorkingContour instances are equal; otherwise, false operator !=(ShiftedWorkingContour, ShiftedWorkingContour) Determines whether two ShiftedWorkingContour instances are not equal public static bool operator !=(ShiftedWorkingContour left, ShiftedWorkingContour right) Parameters left ShiftedWorkingContour The first ShiftedWorkingContour to compare right ShiftedWorkingContour The second ShiftedWorkingContour to compare Returns bool true if the specified ShiftedWorkingContour instances are not equal; otherwise, false" + "summary": "Class ShiftedWorkingContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a working contour that has been shifted by a specified angle. This class wraps another working contour and applies an angular transformation to it. public class ShiftedWorkingContour : IWorkingContour, IExpandToBox3d, IClearCache, IMakeXmlSource, IEquatable Inheritance object ShiftedWorkingContour Implements IWorkingContour IExpandToBox3d IClearCache IMakeXmlSource IEquatable 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 ShiftedWorkingContour() Initializes a new instance of the ShiftedWorkingContour class public ShiftedWorkingContour() ShiftedWorkingContour(double, IWorkingContour) Initializes a new instance of the ShiftedWorkingContour class with a specified shift angle and baseline contour public ShiftedWorkingContour(double shiftAngle_rad, IWorkingContour baselineWorkingContour) Parameters shiftAngle_rad double The shift angle in radians baselineWorkingContour IWorkingContour The baseline working contour to be shifted ShiftedWorkingContour(XElement, string, IWorkingContour) Initializes a new instance of the ShiftedWorkingContour class from XML data public ShiftedWorkingContour(XElement src, string baseDirectory, IWorkingContour baselineWorkingContour) Parameters src XElement The source XML element baseDirectory string The base directory for resolving relative paths baselineWorkingContour IWorkingContour The baseline working contour to be shifted Properties BaselineWorkingContour Gets or sets the baseline working contour that is being shifted public IWorkingContour BaselineWorkingContour { get; set; } Property Value IWorkingContour KeyRange Gets the key range of the baseline working contour public Range KeyRange { get; } Property Value Range ShiftAngle_deg Gets or sets the shift angle in degrees public double ShiftAngle_deg { get; set; } Property Value double ShiftAngle_rad Gets or sets the shift angle in radians public double ShiftAngle_rad { get; set; } Property Value double XName Gets the XML name for serialization 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 with a new Z-radius list provider. public IWorkingContour Duplicate(IGetZrList zrList) Parameters zrList IGetZrList The Z-radius list provider for the duplicate. Returns IWorkingContour A new instance of ShiftedWorkingContour. Equals(ShiftedWorkingContour) Determines whether the specified ShiftedWorkingContour is equal to the current ShiftedWorkingContour public bool Equals(ShiftedWorkingContour contour) Parameters contour ShiftedWorkingContour The ShiftedWorkingContour to compare with the current ShiftedWorkingContour Returns bool true if the specified ShiftedWorkingContour is equal to the current ShiftedWorkingContour; 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 ExpandToBox3d(Box3d) Expands the given bounding box to include this shifted working contour public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand GetHashCode() Returns a hash code for this instance public override int GetHashCode() Returns int A hash code value GetSpanContourPosList() Gets the list of span contour positions after applying the shift transformation public List GetSpanContourPosList() Returns List A list of transformed span contour positions MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Operators operator ==(ShiftedWorkingContour, ShiftedWorkingContour) Determines whether two ShiftedWorkingContour instances are equal public static bool operator ==(ShiftedWorkingContour left, ShiftedWorkingContour right) Parameters left ShiftedWorkingContour The first ShiftedWorkingContour to compare right ShiftedWorkingContour The second ShiftedWorkingContour to compare Returns bool true if the specified ShiftedWorkingContour instances are equal; otherwise, false operator !=(ShiftedWorkingContour, ShiftedWorkingContour) Determines whether two ShiftedWorkingContour instances are not equal public static bool operator !=(ShiftedWorkingContour left, ShiftedWorkingContour right) Parameters left ShiftedWorkingContour The first ShiftedWorkingContour to compare right ShiftedWorkingContour The second ShiftedWorkingContour to compare Returns bool true if the specified ShiftedWorkingContour instances are not equal; otherwise, false" }, "api/Hi.Milling.FluteContours.SideContourDisplayee.html": { "href": "api/Hi.Milling.FluteContours.SideContourDisplayee.html", @@ -2757,7 +2757,7 @@ "api/Hi.Milling.FluteContours.SlideBottomContour.html": { "href": "api/Hi.Milling.FluteContours.SlideBottomContour.html", "title": "Class SlideBottomContour | HiAPI-C# 2025", - "summary": "Class SlideBottomContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a slide bottom contour for milling cutters. public class SlideBottomContour : IBottomContour, IWorkingContour, IMakeXmlSource, IExpandToBox3d, IClearCache Inheritance object SlideBottomContour Implements IBottomContour IWorkingContour IMakeXmlSource IExpandToBox3d 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 SlideBottomContour() Initializes a new instance of the SlideBottomContour class. public SlideBottomContour() SlideBottomContour(XElement, string) Ctor by XML. public SlideBottomContour(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties AxialRakeAngle_deg AxialRakeAngle_rad in degree. public double AxialRakeAngle_deg { get; set; } Property Value double AxialRakeAngle_rad Axial rake angle. Sometimes it is equal to Helix angle from side contour. in radian. public double AxialRakeAngle_rad { get; set; } Property Value double CutterLengthOnBottomProjection_mm cutter length projection from outer edge on bottom plane. public double CutterLengthOnBottomProjection_mm { get; set; } Property Value double DiskAngle_deg angle between bottom surface and horizontal plane. unit is degree. public double DiskAngle_deg { get; set; } Property Value double DiskAngle_rad angle between bottom surface and horizontal plane. unit is radian. public double DiskAngle_rad { get; set; } Property Value double EccentricAngle_deg Gets or sets the eccentric angle in degrees. public double EccentricAngle_deg { get; set; } Property Value double EccentricAngle_rad Projection angle between the line from outer edge tip to center and bottom flute contour on bottom plane. Sometimes it is equal to Radial Rake Angle from side contour. in radian. public double EccentricAngle_rad { get; set; } Property Value double InnerHeight_mm Gets the inner height of the contour in millimeters. public double InnerHeight_mm { get; } Property Value double KeyRange Gets the key range of the flute contour. public Range KeyRange { get; } Property Value Range Remarks For ISideContour, this represents the Z-value range (height range) For IBottomContour, this represents the R-value range (radial range) OuterRadius_mm Gets or sets the outer radius of the contour in millimeters. public double OuterRadius_mm { get; set; } Property Value double 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 with the specified ZR list host. public IWorkingContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The ZR list host to use for the duplicate Returns IWorkingContour A new working contour 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 GetSpanContourPos4d(double) public SpanContourPos4d GetSpanContourPos4d(double r) Parameters r double specific radius Returns SpanContourPos4d GetSpanContourPosList() Gets a list of span contour positions that define the working contour geometry. public List GetSpanContourPosList() Returns List A list of SpanContourPos4d objects representing the contour geometry Remarks The positions are ordered: For ISideContour, positions are ordered by ascending Z values For IBottomContour, positions are ordered by ascending R values Note: Future implementation may use List> for block flute support. 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 SlideBottomContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a slide bottom contour for milling cutters. public class SlideBottomContour : IBottomContour, IWorkingContour, IMakeXmlSource, IExpandToBox3d, IClearCache Inheritance object SlideBottomContour Implements IBottomContour IWorkingContour IMakeXmlSource IExpandToBox3d 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 SlideBottomContour() Initializes a new instance of the SlideBottomContour class. public SlideBottomContour() SlideBottomContour(XElement, string) Ctor by XML. public SlideBottomContour(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties AxialRakeAngle_deg AxialRakeAngle_rad in degree. public double AxialRakeAngle_deg { get; set; } Property Value double AxialRakeAngle_rad Axial rake angle. Sometimes it is equal to Helix angle from side contour. in radian. public double AxialRakeAngle_rad { get; set; } Property Value double CutterLengthOnBottomProjection_mm cutter length projection from outer edge on bottom plane. public double CutterLengthOnBottomProjection_mm { get; set; } Property Value double DiskAngle_deg angle between bottom surface and horizontal plane. unit is degree. public double DiskAngle_deg { get; set; } Property Value double DiskAngle_rad angle between bottom surface and horizontal plane. unit is radian. public double DiskAngle_rad { get; set; } Property Value double EccentricAngle_deg Gets or sets the eccentric angle in degrees. public double EccentricAngle_deg { get; set; } Property Value double EccentricAngle_rad Projection angle between the line from outer edge tip to center and bottom flute contour on bottom plane. Sometimes it is equal to Radial Rake Angle from side contour. in radian. public double EccentricAngle_rad { get; set; } Property Value double InnerHeight_mm Gets the inner height of the contour in millimeters. public double InnerHeight_mm { get; } Property Value double KeyRange Gets the key range of the flute contour. public Range KeyRange { get; } Property Value Range Remarks For ISideContour, this represents the Z-value range (height range) For IBottomContour, this represents the R-value range (radial range) OuterRadius_mm Gets or sets the outer radius of the contour in millimeters. public double OuterRadius_mm { get; set; } Property Value double 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 with the specified ZR list host. public IWorkingContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The ZR list host to use for the duplicate Returns IWorkingContour A new working contour 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 GetSpanContourPos4d(double) public SpanContourPos4d GetSpanContourPos4d(double r) Parameters r double specific radius Returns SpanContourPos4d GetSpanContourPosList() Gets a list of span contour positions that define the working contour geometry. public List GetSpanContourPosList() Returns List A list of SpanContourPos4d objects representing the contour geometry Remarks The positions are ordered: For ISideContour, positions are ordered by ascending Z values For IBottomContour, positions are ordered by ascending R values Note: Future implementation may use List> for block flute support. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Milling.FluteContours.SpanContourPos4d.html": { "href": "api/Hi.Milling.FluteContours.SpanContourPos4d.html", @@ -2767,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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" }, "api/Hi.Milling.FluteContours.html": { "href": "api/Hi.Milling.FluteContours.html", @@ -2812,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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Milling.MillingTools.MillingToolAnchorReference.html": { "href": "api/Hi.Milling.MillingTools.MillingToolAnchorReference.html", @@ -2837,7 +2837,7 @@ "api/Hi.Milling.SpindleCapability.html": { "href": "api/Hi.Milling.SpindleCapability.html", "title": "Class SpindleCapability | HiAPI-C# 2025", - "summary": "Class SpindleCapability Namespace Hi.Milling Assembly HiMech.dll Represents the capability of a spindle, including power, torque, and thermal characteristics. Internal Use Only public class SpindleCapability : IMakeXmlSource, INameNote Inheritance object SpindleCapability Implements IMakeXmlSource INameNote 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 SpindleCapability() Ctor. public SpindleCapability() SpindleCapability(XElement, string, params object[]) Initializes a new instance of the SpindleCapability class. public SpindleCapability(XElement src, string baseDirectory, params object[] res) Parameters src XElement The XML element containing spindle data. baseDirectory string The base directory for resolving relative paths. res object[] Additional resolution parameters. Properties DryRunFrictionPowerCoefficient_mWdrpm Dry Run Friction Power Coefficient. unit is mW/rpm. DryRunFrictionPower = DryRunFrictionPowerCoefficient * S. public double DryRunFrictionPowerCoefficient_mWdrpm { get; set; } Property Value double Remarks default value 4.82 is estimated by paper: The Friction of Radially Loaded Hybrid Spindle Bearings under High Speeds. Figure 13. At 9k rpm, Torque 0.046Nm. DryRunWindagePowerCoefficient_pWdrpm3 Dry Run Windage Power Coefficient. unit is pW/(rpm^3). DryRunWindagePower = DryRunWindagePowerCoefficient * (S^3). public double DryRunWindagePowerCoefficient_pWdrpm3 { get; set; } Property Value double Remarks default value 90 is estimated by paper: CFD Study on the Windage Power Loss of High Speed Gear. rpm W 5000 12 6000 20 7000 29 EnergyEfficiency Energy Conversion Efficiency. Where is Ouput/Input. public double EnergyEfficiency { get; set; } Property Value double GearShiftSpindleSpeed_cycleds Crossover speed. Gear Shift speed. spindle speed at shifting point between low gear mode and high gear mode. null means there is no gear shift mechanism. public double? GearShiftSpindleSpeed_cycleds { get; set; } Property Value double? GearShiftSpindleSpeed_rpm Gear shift spindle speed in RPM. public double? GearShiftSpindleSpeed_rpm { get; set; } Property Value double? InfInsistentSpindleSpeedToPower_cycleDs_kW SpindleSpeed(cycle/sec) to Power(kW) at infinte workable time. public List InfInsistentSpindleSpeedToPower_cycleDs_kW { get; set; } Property Value List InfInsistentSpindleSpeedToTorque_cycleDs_Nm SpindleSpeed(cycle/sec) to Torque(Nm) at 100% insistent ratio. public List InfInsistentSpindleSpeedToTorque_cycleDs_Nm { get; set; } Property Value List Name Name. public string Name { get; set; } Property Value string Note Note. public string Note { get; set; } Property Value string WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW WorkableDuration To SpindleSpeedToPowerContours. The dictionary is workable time (min) to (x:SpindleSpeed(cycle/sec), y:Power(kW)) public Dictionary> WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW { get; set; } Property Value Dictionary> WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm WorkableDuration To SpindleSpeedToTorqueContours. The dictionary is workable time (min) to (x:SpindleSpeed(cycle/sec), y:Torque(Nm)). public Dictionary> WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm { get; set; } Property Value Dictionary> WorkingTemperatureUpperBoundary_C Upper boundary of working temperature in Celsius. public double WorkingTemperatureUpperBoundary_C { get; set; } Property Value double WorkingTemperatureUpperBoundary_K Upper boundary of working temperature in Kelvin. public double WorkingTemperatureUpperBoundary_K { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods GetHeatPara(double) Gets thermal parameters for the spindle at a given speed. Internal Use Only public (double HeatCapacity_JdK, double ConvectionPara_WdK) GetHeatPara(double spindleSpeed_cycleDs) Parameters spindleSpeed_cycleDs double Spindle speed in cycles per second Returns (double HeatCapacity_JdK, double ConvectionPara_WdK) A tuple containing heat capacity and convection parameter 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 SpindleCapability Namespace Hi.Milling Assembly HiMech.dll Represents the capability of a spindle, including power, torque, and thermal characteristics. Internal Use Only public class SpindleCapability : IMakeXmlSource, INameNote Inheritance object SpindleCapability Implements IMakeXmlSource INameNote 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 SpindleCapability() Ctor. public SpindleCapability() SpindleCapability(XElement, string, params object[]) Initializes a new instance of the SpindleCapability class. public SpindleCapability(XElement src, string baseDirectory, params object[] res) Parameters src XElement The XML element containing spindle data. baseDirectory string The base directory for resolving relative paths. res object[] Additional resolution parameters. Properties DryRunFrictionPowerCoefficient_mWdrpm Dry Run Friction Power Coefficient. unit is mW/rpm. DryRunFrictionPower = DryRunFrictionPowerCoefficient * S. public double DryRunFrictionPowerCoefficient_mWdrpm { get; set; } Property Value double Remarks default value 4.82 is estimated by paper: The Friction of Radially Loaded Hybrid Spindle Bearings under High Speeds. Figure 13. At 9k rpm, Torque 0.046Nm. DryRunWindagePowerCoefficient_pWdrpm3 Dry Run Windage Power Coefficient. unit is pW/(rpm^3). DryRunWindagePower = DryRunWindagePowerCoefficient * (S^3). public double DryRunWindagePowerCoefficient_pWdrpm3 { get; set; } Property Value double Remarks default value 90 is estimated by paper: CFD Study on the Windage Power Loss of High Speed Gear. rpm W 5000 12 6000 20 7000 29 EnergyEfficiency Energy Conversion Efficiency. Where is Ouput/Input. public double EnergyEfficiency { get; set; } Property Value double GearShiftSpindleSpeed_cycleds Crossover speed. Gear Shift speed. spindle speed at shifting point between low gear mode and high gear mode. null means there is no gear shift mechanism. public double? GearShiftSpindleSpeed_cycleds { get; set; } Property Value double? GearShiftSpindleSpeed_rpm Gear shift spindle speed in RPM. public double? GearShiftSpindleSpeed_rpm { get; set; } Property Value double? InfInsistentSpindleSpeedToPower_cycleDs_kW SpindleSpeed(cycle/sec) to Power(kW) at infinte workable time. public List InfInsistentSpindleSpeedToPower_cycleDs_kW { get; set; } Property Value List InfInsistentSpindleSpeedToTorque_cycleDs_Nm SpindleSpeed(cycle/sec) to Torque(Nm) at 100% insistent ratio. public List InfInsistentSpindleSpeedToTorque_cycleDs_Nm { get; set; } Property Value List Name Name. public string Name { get; set; } Property Value string Note Note. public string Note { get; set; } Property Value string WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW WorkableDuration To SpindleSpeedToPowerContours. The dictionary is workable time (min) to (x:SpindleSpeed(cycle/sec), y:Power(kW)) public Dictionary> WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW { get; set; } Property Value Dictionary> WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm WorkableDuration To SpindleSpeedToTorqueContours. The dictionary is workable time (min) to (x:SpindleSpeed(cycle/sec), y:Torque(Nm)). public Dictionary> WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm { get; set; } Property Value Dictionary> WorkingTemperatureUpperBoundary_C Upper boundary of working temperature in Celsius. public double WorkingTemperatureUpperBoundary_C { get; set; } Property Value double WorkingTemperatureUpperBoundary_K Upper boundary of working temperature in Kelvin. public double WorkingTemperatureUpperBoundary_K { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods GetHeatPara(double) Gets thermal parameters for the spindle at a given speed. Internal Use Only public (double HeatCapacity_JdK, double ConvectionPara_WdK) GetHeatPara(double spindleSpeed_cycleDs) Parameters spindleSpeed_cycleDs double Spindle speed in cycles per second Returns (double HeatCapacity_JdK, double ConvectionPara_WdK) A tuple containing heat capacity and convection parameter MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Milling.html": { "href": "api/Hi.Milling.html", @@ -2977,12 +2977,12 @@ "api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html": { "href": "api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html", "title": "Class LocalProfileMillingPara | HiAPI-C# 2025", - "summary": "Class LocalProfileMillingPara Namespace Hi.MillingForces.ProfileMillingParas Assembly HiMech.dll Milling parameter of altintas model. public class LocalProfileMillingPara : IEquatable, IMakeXmlSource, IGetLocalProfileMillingPara, ICsvRowIo Inheritance object LocalProfileMillingPara Implements IEquatable IMakeXmlSource IGetLocalProfileMillingPara ICsvRowIo 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 LocalProfileMillingPara() Ctor. public LocalProfileMillingPara() LocalProfileMillingPara(Vec3d, Vec3d) Ctor. public LocalProfileMillingPara(Vec3d shearPara, Vec3d ploughPara) Parameters shearPara Vec3d shear milling parameter. (x,y,z)=(Ktc,Krc,Kac) ploughPara Vec3d plough milling parameter. (x,y,z)=(Kte,Kre,Kae) LocalProfileMillingPara(LocalProfileMillingPara) Copy constructor. public LocalProfileMillingPara(LocalProfileMillingPara srcPara) Parameters srcPara LocalProfileMillingPara Source parameter to copy from. LocalProfileMillingPara(double, double, double, double, double, double) Constructor with specific milling parameters. public LocalProfileMillingPara(double Krc, double Ktc, double Kac, double Kre, double Kte, double Kae) Parameters Krc double Radial shear coefficient. Ktc double Tangential shear coefficient. Kac double Axial shear coefficient. Kre double Radial plough coefficient. Kte double Tangential plough coefficient. Kae double Axial plough coefficient. LocalProfileMillingPara(XElement) Ctor by XML. public LocalProfileMillingPara(XElement src) Parameters src XElement XML Fields Zero Gets a LocalProfileMillingPara instance with all parameters set to zero. public static LocalProfileMillingPara Zero Field Value LocalProfileMillingPara Properties AA7075 Gets milling parameters for AA7075 aluminum alloy. public static LocalProfileMillingPara AA7075 { get; } Property Value LocalProfileMillingPara Al6061T6 Al6061T6. Build by 20190213 PMC end-mill exp. public static LocalProfileMillingPara Al6061T6 { get; } Property Value LocalProfileMillingPara Al6061T6_ Milling parameters for Al6061T6 material (older version). Determined by NCCU. public static LocalProfileMillingPara Al6061T6_ { get; } Property Value LocalProfileMillingPara Al6061T6_R0p5 Milling parameters for Al6061T6 material with 0.5mm radius. Built by PMC on 2019-02-13. public static LocalProfileMillingPara Al6061T6_R0p5 { get; } Property Value LocalProfileMillingPara CsvText Csv text. public string CsvText { get; set; } Property Value string CsvTitleText Csv titles text. public string CsvTitleText { get; } Property Value string Inconel718 Gets milling parameters for Inconel 718 material. public static LocalProfileMillingPara Inconel718 { get; } Property Value LocalProfileMillingPara Kp Coefficient of (Kpr,Kpt,Kpa). public Vec3d Kp { get; set; } Property Value Vec3d Kpa Coefficient of axial plough force. public double Kpa { get; set; } Property Value double Kpr Coefficient of radial plough force. public double Kpr { get; set; } Property Value double Kpt Coefficient of tangential plough force. public double Kpt { get; set; } Property Value double Ks Coefficient of (Ksr,Kst,Ksa). public Vec3d Ks { get; set; } Property Value Vec3d Ksa Coefficient of axial shear force. public double Ksa { get; set; } Property Value double Ksr Coefficient of radial shear force. public double Ksr { get; set; } Property Value double Kst Coefficient of tangential shear force. public double Kst { get; set; } Property Value double NaN Gets a LocalProfileMillingPara instance with all parameters set to NaN (Not a Number). public static LocalProfileMillingPara NaN { get; } Property Value LocalProfileMillingPara S45C_ColumnEnd Gets milling parameters for S45C material with column end configuration. public static LocalProfileMillingPara S45C_ColumnEnd { get; } Property Value LocalProfileMillingPara SS304 Milling parameters for SS304 stainless steel. Reference: “The effect of cutting force model coefficient variability on process planning in milling”, Firat Eren, University of New Hampshire, Durham. public static LocalProfileMillingPara SS304 { get; } Property Value LocalProfileMillingPara SS304_R0 Gets milling parameters for SS304 stainless steel with no radius (R0). public static LocalProfileMillingPara SS304_R0 { get; } Property Value LocalProfileMillingPara SS304_R0p5 Gets milling parameters for SS304 stainless steel with 0.5mm radius (R0.5) and 4 flutes. public static LocalProfileMillingPara SS304_R0p5 { get; } Property Value LocalProfileMillingPara SS304_R3 Gets milling parameters for SS304 stainless steel with 3mm radius (R3) and 4 flutes. public static LocalProfileMillingPara SS304_R3 { get; } Property Value LocalProfileMillingPara Steel17_4PH Milling parameters for Steel 17-4PH material. public static LocalProfileMillingPara Steel17_4PH { get; } Property Value LocalProfileMillingPara Ti6Al4V Gets milling parameters for Ti6Al4V material. public static LocalProfileMillingPara Ti6Al4V { get; } Property Value LocalProfileMillingPara Ti6Al4V_Altintas2001 Gets milling parameters for Ti6Al4V material based on Altintas 2001 research. public static LocalProfileMillingPara Ti6Al4V_Altintas2001 { get; } Property Value LocalProfileMillingPara XName Name for XML IO. public static string XName { get; } Property Value string Methods Equals(LocalProfileMillingPara) Indicates whether the current object is equal to another object of the same type. public bool Equals(LocalProfileMillingPara other) Parameters other LocalProfileMillingPara 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. GetElementByIndex(RtaMillingParaKey) Gets the parameter value by the specified key. public double GetElementByIndex(RtaMillingParaKey key) Parameters key RtaMillingParaKey The parameter key to retrieve. Returns double The parameter value corresponding to the key. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetMillingPara() Get LocalProfileMillingPara. public LocalProfileMillingPara GetMillingPara() Returns LocalProfileMillingPara LocalProfileMillingPara 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. SetElementByIndex(RtaMillingParaKey, double) Sets the parameter value for the specified key. public void SetElementByIndex(RtaMillingParaKey key, double v) Parameters key RtaMillingParaKey The parameter key to set. v double The value to set. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class LocalProfileMillingPara Namespace Hi.MillingForces.ProfileMillingParas Assembly HiMech.dll Milling parameter of altintas model. public class LocalProfileMillingPara : IEquatable, IMakeXmlSource, IGetLocalProfileMillingPara, ICsvRowIo Inheritance object LocalProfileMillingPara Implements IEquatable IMakeXmlSource IGetLocalProfileMillingPara ICsvRowIo 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 LocalProfileMillingPara() Ctor. public LocalProfileMillingPara() LocalProfileMillingPara(Vec3d, Vec3d) Ctor. public LocalProfileMillingPara(Vec3d shearPara, Vec3d ploughPara) Parameters shearPara Vec3d shear milling parameter. (x,y,z)=(Ktc,Krc,Kac) ploughPara Vec3d plough milling parameter. (x,y,z)=(Kte,Kre,Kae) LocalProfileMillingPara(LocalProfileMillingPara) Copy constructor. public LocalProfileMillingPara(LocalProfileMillingPara srcPara) Parameters srcPara LocalProfileMillingPara Source parameter to copy from. LocalProfileMillingPara(double, double, double, double, double, double) Constructor with specific milling parameters. public LocalProfileMillingPara(double Krc, double Ktc, double Kac, double Kre, double Kte, double Kae) Parameters Krc double Radial shear coefficient. Ktc double Tangential shear coefficient. Kac double Axial shear coefficient. Kre double Radial plough coefficient. Kte double Tangential plough coefficient. Kae double Axial plough coefficient. LocalProfileMillingPara(XElement) Ctor by XML. public LocalProfileMillingPara(XElement src) Parameters src XElement XML Fields Zero Gets a LocalProfileMillingPara instance with all parameters set to zero. public static LocalProfileMillingPara Zero Field Value LocalProfileMillingPara Properties AA7075 Gets milling parameters for AA7075 aluminum alloy. public static LocalProfileMillingPara AA7075 { get; } Property Value LocalProfileMillingPara Al6061T6 Al6061T6. Build by 20190213 PMC end-mill exp. public static LocalProfileMillingPara Al6061T6 { get; } Property Value LocalProfileMillingPara Al6061T6_ Milling parameters for Al6061T6 material (older version). Determined by NCCU. public static LocalProfileMillingPara Al6061T6_ { get; } Property Value LocalProfileMillingPara Al6061T6_R0p5 Milling parameters for Al6061T6 material with 0.5mm radius. Built by PMC on 2019-02-13. public static LocalProfileMillingPara Al6061T6_R0p5 { get; } Property Value LocalProfileMillingPara CsvText Csv text. public string CsvText { get; set; } Property Value string CsvTitleText Csv titles text. public string CsvTitleText { get; } Property Value string Inconel718 Gets milling parameters for Inconel 718 material. public static LocalProfileMillingPara Inconel718 { get; } Property Value LocalProfileMillingPara Kp Coefficient of (Kpr,Kpt,Kpa). public Vec3d Kp { get; set; } Property Value Vec3d Kpa Coefficient of axial plough force. public double Kpa { get; set; } Property Value double Kpr Coefficient of radial plough force. public double Kpr { get; set; } Property Value double Kpt Coefficient of tangential plough force. public double Kpt { get; set; } Property Value double Ks Coefficient of (Ksr,Kst,Ksa). public Vec3d Ks { get; set; } Property Value Vec3d Ksa Coefficient of axial shear force. public double Ksa { get; set; } Property Value double Ksr Coefficient of radial shear force. public double Ksr { get; set; } Property Value double Kst Coefficient of tangential shear force. public double Kst { get; set; } Property Value double NaN Gets a LocalProfileMillingPara instance with all parameters set to NaN (Not a Number). public static LocalProfileMillingPara NaN { get; } Property Value LocalProfileMillingPara S45C_ColumnEnd Gets milling parameters for S45C material with column end configuration. public static LocalProfileMillingPara S45C_ColumnEnd { get; } Property Value LocalProfileMillingPara SS304 Milling parameters for SS304 stainless steel. Reference: “The effect of cutting force model coefficient variability on process planning in milling”, Firat Eren, University of New Hampshire, Durham. public static LocalProfileMillingPara SS304 { get; } Property Value LocalProfileMillingPara SS304_R0 Gets milling parameters for SS304 stainless steel with no radius (R0). public static LocalProfileMillingPara SS304_R0 { get; } Property Value LocalProfileMillingPara SS304_R0p5 Gets milling parameters for SS304 stainless steel with 0.5mm radius (R0.5) and 4 flutes. public static LocalProfileMillingPara SS304_R0p5 { get; } Property Value LocalProfileMillingPara SS304_R3 Gets milling parameters for SS304 stainless steel with 3mm radius (R3) and 4 flutes. public static LocalProfileMillingPara SS304_R3 { get; } Property Value LocalProfileMillingPara Steel17_4PH Milling parameters for Steel 17-4PH material. public static LocalProfileMillingPara Steel17_4PH { get; } Property Value LocalProfileMillingPara Ti6Al4V Gets milling parameters for Ti6Al4V material. public static LocalProfileMillingPara Ti6Al4V { get; } Property Value LocalProfileMillingPara Ti6Al4V_Altintas2001 Gets milling parameters for Ti6Al4V material based on Altintas 2001 research. public static LocalProfileMillingPara Ti6Al4V_Altintas2001 { get; } Property Value LocalProfileMillingPara XName Name for XML IO. public static string XName { get; } Property Value string Methods Equals(LocalProfileMillingPara) Indicates whether the current object is equal to another object of the same type. public bool Equals(LocalProfileMillingPara other) Parameters other LocalProfileMillingPara 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. GetElementByIndex(RtaMillingParaKey) Gets the parameter value by the specified key. public double GetElementByIndex(RtaMillingParaKey key) Parameters key RtaMillingParaKey The parameter key to retrieve. Returns double The parameter value corresponding to the key. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. GetMillingPara() Get LocalProfileMillingPara. public LocalProfileMillingPara GetMillingPara() Returns LocalProfileMillingPara LocalProfileMillingPara MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetElementByIndex(RtaMillingParaKey, double) Sets the parameter value for the specified key. public void SetElementByIndex(RtaMillingParaKey key, double v) Parameters key RtaMillingParaKey The parameter key to set. v double The value to set. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html": { "href": "api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html", "title": "Class ProfileMillingParaMap | HiAPI-C# 2025", - "summary": "Class ProfileMillingParaMap Namespace Hi.MillingForces.ProfileMillingParas Assembly HiMech.dll Represents a mapping of milling parameters for profile milling operations. This class manages cutting parameters for both side and bottom milling operations. public class ProfileMillingParaMap : ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote Inheritance object ProfileMillingParaMap Implements ICuttingPara IGetCuttingPara IMakeXmlSource INameNote Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 ProfileMillingParaMap(LocalProfileMillingPara, LocalProfileMillingPara, bool) Ctor for single LocalProfileMillingPara. public ProfileMillingParaMap(LocalProfileMillingPara sidePara, LocalProfileMillingPara bottomPara = null, bool containUpperSide = false) Parameters sidePara LocalProfileMillingPara milling parameter on side bottomPara LocalProfileMillingPara milling parameter on bottom containUpperSide bool Whether to include upper side parameters ProfileMillingParaMap(ProfileMillingParaMap) Copy ctor. public ProfileMillingParaMap(ProfileMillingParaMap src) Parameters src ProfileMillingParaMap src ProfileMillingParaMap(int, int, int, bool) Initializes a new instance of the ProfileMillingParaMap class with specified dimensions. public ProfileMillingParaMap(int fluteNum, int yDivisionNum, int zDivisionNum, bool isUpperSideContained = false) Parameters fluteNum int The number of flutes. yDivisionNum int The number of divisions in Y direction. zDivisionNum int The number of divisions in Z direction. isUpperSideContained bool Whether to include the upper side of the milling profile. ProfileMillingParaMap(XElement, string, bool) Initializes a new instance of the ProfileMillingParaMap class from XML data. public ProfileMillingParaMap(XElement src, string baseDirectory, bool isRtaVersion) Parameters src XElement The XML element containing the parameter data. baseDirectory string The base directory for resolving relative paths. isRtaVersion bool Whether the data is in RTA format. Properties BottomShearParas Gets the bottom shear parameters array. Each element contains cutting coefficients for each flute. public Vec3d[] BottomShearParas { get; } Property Value Vec3d[] ElementNum Gets the total number of elements in the parameter map. public int ElementNum { get; } Property Value int FluteFormNum Gets the number of flute forms in the parameter map. The number should be 1 or be equal to the flute number of the cutter. public int FluteFormNum { get; } Property Value int IsUpperSideContained Gets a value indicating whether the upper side of the milling profile is included in calculations. public bool IsUpperSideContained { get; } Property Value bool Name Gets or sets the name of the parameter map. public string Name { get; set; } Property Value string Note Gets or sets additional notes or descriptions for the parameter map. public string Note { get; set; } Property Value string PloughPara Gets the ploughing force coefficients (Kpr, Kpt, Kpa) for the entire tool. public Vec3d PloughPara { get; } Property Value Vec3d SideShearParas Gets the side shear parameters array. The dimensions represent [flute form, Y division, Z division]. Each element contains cutting coefficients (Ksr, Kst, Ksa) for the corresponding position. public Vec3d[,,] SideShearParas { get; } Property Value Vec3d[,,] SideYParaNum Gets the number of divisions in the Y direction for side milling parameters. public int SideYParaNum { get; } Property Value int SideZParaNum Gets the number of divisions in the Z direction for side milling parameters. public int SideZParaNum { get; } Property Value int XName Name for XML IO. public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods CloneTemplate() Creates a template clone of this parameter map. public ICuttingPara CloneTemplate() Returns ICuttingPara A new instance with the same dimensions but zero values. GenUnitParas() Generates a list of unit cutting parameters. public List GenUnitParas() Returns List A list of unit cutting parameters. GetBottomMillingPara(int) Gets the milling parameters for the bottom of a specific flute. public LocalProfileMillingPara GetBottomMillingPara(int fluteIndex) Parameters fluteIndex int The index of the flute. Returns LocalProfileMillingPara The local milling parameters for the bottom of the specified flute. GetCuttingPara() Gets the cutting parameter interface for this instance. public ICuttingPara GetCuttingPara() Returns ICuttingPara The cutting parameter interface. GetElementByIndex(int) Gets a parameter value by its element index. public double GetElementByIndex(int elementIndex) Parameters elementIndex int The index of the element to get. Returns double The value at the specified index. GetElements() Gets the elements as an array of values. public double[] GetElements() Returns double[] An array containing all parameter values. GetSideMillingPara(int, double, double) Gets the milling parameters for a specific side position. public LocalProfileMillingPara GetSideMillingPara(int fluteIndex, double atanYX_rad, double atanZX_rad) Parameters fluteIndex int The index of the flute. atanYX_rad double The YX angle in radians. atanZX_rad double The ZX angle in radians. Returns LocalProfileMillingPara The local milling parameters for the specified position. 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. SetElementByIndex(int, double) Sets a parameter value by its element index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set. v double The value to set. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToTemplateXElement() Creates a template XML element for the parameter map. public XElement ToTemplateXElement() Returns XElement A template XML element." + "summary": "Class ProfileMillingParaMap Namespace Hi.MillingForces.ProfileMillingParas Assembly HiMech.dll Represents a mapping of milling parameters for profile milling operations. This class manages cutting parameters for both side and bottom milling operations. public class ProfileMillingParaMap : ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote Inheritance object ProfileMillingParaMap Implements ICuttingPara IGetCuttingPara IMakeXmlSource INameNote Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 ProfileMillingParaMap(LocalProfileMillingPara, LocalProfileMillingPara, bool) Ctor for single LocalProfileMillingPara. public ProfileMillingParaMap(LocalProfileMillingPara sidePara, LocalProfileMillingPara bottomPara = null, bool containUpperSide = false) Parameters sidePara LocalProfileMillingPara milling parameter on side bottomPara LocalProfileMillingPara milling parameter on bottom containUpperSide bool Whether to include upper side parameters ProfileMillingParaMap(ProfileMillingParaMap) Copy ctor. public ProfileMillingParaMap(ProfileMillingParaMap src) Parameters src ProfileMillingParaMap src ProfileMillingParaMap(int, int, int, bool) Initializes a new instance of the ProfileMillingParaMap class with specified dimensions. public ProfileMillingParaMap(int fluteNum, int yDivisionNum, int zDivisionNum, bool isUpperSideContained = false) Parameters fluteNum int The number of flutes. yDivisionNum int The number of divisions in Y direction. zDivisionNum int The number of divisions in Z direction. isUpperSideContained bool Whether to include the upper side of the milling profile. ProfileMillingParaMap(XElement, string, bool) Initializes a new instance of the ProfileMillingParaMap class from XML data. public ProfileMillingParaMap(XElement src, string baseDirectory, bool isRtaVersion) Parameters src XElement The XML element containing the parameter data. baseDirectory string The base directory for resolving relative paths. isRtaVersion bool Whether the data is in RTA format. Properties BottomShearParas Gets the bottom shear parameters array. Each element contains cutting coefficients for each flute. public Vec3d[] BottomShearParas { get; } Property Value Vec3d[] ElementNum Gets the total number of elements in the parameter map. public int ElementNum { get; } Property Value int FluteFormNum Gets the number of flute forms in the parameter map. The number should be 1 or be equal to the flute number of the cutter. public int FluteFormNum { get; } Property Value int IsUpperSideContained Gets a value indicating whether the upper side of the milling profile is included in calculations. public bool IsUpperSideContained { get; } Property Value bool Name Gets or sets the name of the parameter map. public string Name { get; set; } Property Value string Note Gets or sets additional notes or descriptions for the parameter map. public string Note { get; set; } Property Value string PloughPara Gets the ploughing force coefficients (Kpr, Kpt, Kpa) for the entire tool. public Vec3d PloughPara { get; } Property Value Vec3d SideShearParas Gets the side shear parameters array. The dimensions represent [flute form, Y division, Z division]. Each element contains cutting coefficients (Ksr, Kst, Ksa) for the corresponding position. public Vec3d[,,] SideShearParas { get; } Property Value Vec3d[,,] SideYParaNum Gets the number of divisions in the Y direction for side milling parameters. public int SideYParaNum { get; } Property Value int SideZParaNum Gets the number of divisions in the Z direction for side milling parameters. public int SideZParaNum { get; } Property Value int XName Name for XML IO. public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods CloneTemplate() Creates a template clone of this parameter map. public ICuttingPara CloneTemplate() Returns ICuttingPara A new instance with the same dimensions but zero values. GenUnitParas() Generates a list of unit cutting parameters. public List GenUnitParas() Returns List A list of unit cutting parameters. GetBottomMillingPara(int) Gets the milling parameters for the bottom of a specific flute. public LocalProfileMillingPara GetBottomMillingPara(int fluteIndex) Parameters fluteIndex int The index of the flute. Returns LocalProfileMillingPara The local milling parameters for the bottom of the specified flute. GetCuttingPara() Gets the cutting parameter interface for this instance. public ICuttingPara GetCuttingPara() Returns ICuttingPara The cutting parameter interface. GetElementByIndex(int) Gets a parameter value by its element index. public double GetElementByIndex(int elementIndex) Parameters elementIndex int The index of the element to get. Returns double The value at the specified index. GetElements() Gets the elements as an array of values. public double[] GetElements() Returns double[] An array containing all parameter values. GetSideMillingPara(int, double, double) Gets the milling parameters for a specific side position. public LocalProfileMillingPara GetSideMillingPara(int fluteIndex, double atanYX_rad, double atanZX_rad) Parameters fluteIndex int The index of the flute. atanYX_rad double The YX angle in radians. atanZX_rad double The ZX angle in radians. Returns LocalProfileMillingPara The local milling parameters for the specified position. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetElementByIndex(int, double) Sets a parameter value by its element index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set. v double The value to set. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToTemplateXElement() Creates a template XML element for the parameter map. public XElement ToTemplateXElement() Returns XElement A template XML element." }, "api/Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html": { "href": "api/Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html", @@ -3007,22 +3007,22 @@ "api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html": { "href": "api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html", "title": "Class MultiFormRakeFaceCuttingPara | HiAPI-C# 2025", - "summary": "Class MultiFormRakeFaceCuttingPara Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents a multi-form rake face cutting parameter set that can handle multiple flute forms. Internal Use Only. public class MultiFormRakeFaceCuttingPara : ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote Inheritance object MultiFormRakeFaceCuttingPara Implements ICuttingPara IGetCuttingPara IMakeXmlSource INameNote Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 MultiFormRakeFaceCuttingPara(int) Initializes a new instance of the MultiFormRakeFaceCuttingPara class with the specified number of flute forms. public MultiFormRakeFaceCuttingPara(int fluteFormNum) Parameters fluteFormNum int The number of flute forms to initialize. MultiFormRakeFaceCuttingPara(XElement, string) Initializes a new instance of the MultiFormRakeFaceCuttingPara class from XML data. public MultiFormRakeFaceCuttingPara(XElement src, string baseDirectory) Parameters src XElement The source XML element. baseDirectory string The base directory for resolving relative paths. Properties ElementNum Gets the total number of elements in this parameter set. public int ElementNum { get; } Property Value int FluteFormNum Gets the number of flute forms in this parameter set. public int FluteFormNum { get; } Property Value int LocalRakeFaceCuttingParas Gets or sets the array of local rake face cutting parameters for each flute form. public RakeFaceCuttingPara3d[] LocalRakeFaceCuttingParas { get; set; } Property Value RakeFaceCuttingPara3d[] Name Gets or sets the name of this parameter set. public string Name { get; set; } Property Value string Note Gets or sets additional notes about this parameter set. public string Note { get; set; } Property Value string XName Gets the XML element name for this type. public static string XName { get; } Property Value string XmlSourceFile Gets or sets the XML source file path. public string XmlSourceFile { get; set; } Property Value string Methods CloneTemplate() Creates a clone of this parameter set as a template. public ICuttingPara CloneTemplate() Returns ICuttingPara A cloned instance of this parameter set. GenUnitParas() Generates a list of unit cutting parameters. public List GenUnitParas() Returns List A list of unit cutting parameters. GetCuttingPara() Gets this instance as an ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara This instance. GetElementByIndex(int) Gets the value of an element at the specified index. public double GetElementByIndex(int elementIndex) Parameters elementIndex int The index of the element to get. Returns double The value of the element at the specified index. GetLocalRakeFaceCuttingPara(int) Gets the local rake face cutting parameters for the specified flute index. public RakeFaceCuttingPara3d GetLocalRakeFaceCuttingPara(int fluteIndex) Parameters fluteIndex int The zero-based index of the flute. Returns RakeFaceCuttingPara3d The rake face cutting parameters for the specified flute. 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. SetElementByIndex(int, double) Sets the value of an element at the specified index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set. v double The value to set. ToString() Returns a string representation of this parameter set. public override string ToString() Returns string A string containing the name and note of this parameter set. ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" + "summary": "Class MultiFormRakeFaceCuttingPara Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents a multi-form rake face cutting parameter set that can handle multiple flute forms. Internal Use Only. public class MultiFormRakeFaceCuttingPara : ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote Inheritance object MultiFormRakeFaceCuttingPara Implements ICuttingPara IGetCuttingPara IMakeXmlSource INameNote Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 MultiFormRakeFaceCuttingPara(int) Initializes a new instance of the MultiFormRakeFaceCuttingPara class with the specified number of flute forms. public MultiFormRakeFaceCuttingPara(int fluteFormNum) Parameters fluteFormNum int The number of flute forms to initialize. MultiFormRakeFaceCuttingPara(XElement, string) Initializes a new instance of the MultiFormRakeFaceCuttingPara class from XML data. public MultiFormRakeFaceCuttingPara(XElement src, string baseDirectory) Parameters src XElement The source XML element. baseDirectory string The base directory for resolving relative paths. Properties ElementNum Gets the total number of elements in this parameter set. public int ElementNum { get; } Property Value int FluteFormNum Gets the number of flute forms in this parameter set. public int FluteFormNum { get; } Property Value int LocalRakeFaceCuttingParas Gets or sets the array of local rake face cutting parameters for each flute form. public RakeFaceCuttingPara3d[] LocalRakeFaceCuttingParas { get; set; } Property Value RakeFaceCuttingPara3d[] Name Gets or sets the name of this parameter set. public string Name { get; set; } Property Value string Note Gets or sets additional notes about this parameter set. public string Note { get; set; } Property Value string XName Gets the XML element name for this type. public static string XName { get; } Property Value string XmlSourceFile Gets or sets the XML source file path. public string XmlSourceFile { get; set; } Property Value string Methods CloneTemplate() Creates a clone of this parameter set as a template. public ICuttingPara CloneTemplate() Returns ICuttingPara A cloned instance of this parameter set. GenUnitParas() Generates a list of unit cutting parameters. public List GenUnitParas() Returns List A list of unit cutting parameters. GetCuttingPara() Gets this instance as an ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara This instance. GetElementByIndex(int) Gets the value of an element at the specified index. public double GetElementByIndex(int elementIndex) Parameters elementIndex int The index of the element to get. Returns double The value of the element at the specified index. GetLocalRakeFaceCuttingPara(int) Gets the local rake face cutting parameters for the specified flute index. public RakeFaceCuttingPara3d GetLocalRakeFaceCuttingPara(int fluteIndex) Parameters fluteIndex int The zero-based index of the flute. Returns RakeFaceCuttingPara3d The rake face cutting parameters for the specified flute. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetElementByIndex(int, double) Sets the value of an element at the specified index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set. v double The value to set. ToString() Returns a string representation of this parameter set. public override string ToString() Returns string A string containing the name and note of this parameter set. ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" }, "api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html": { "href": "api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html", "title": "Class RakeFaceCuttingPara2d | HiAPI-C# 2025", - "summary": "Class RakeFaceCuttingPara2d Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents a 2D cutting parameter for rake face cutting operations. public class RakeFaceCuttingPara2d : IRakeFaceCuttingPara, ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote, IDuplicate Inheritance object RakeFaceCuttingPara2d Implements IRakeFaceCuttingPara ICuttingPara IGetCuttingPara IMakeXmlSource INameNote IDuplicate Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 RakeFaceCuttingPara2d() Initializes a new instance of the RakeFaceCuttingPara2d class. public RakeFaceCuttingPara2d() RakeFaceCuttingPara2d(RakeFaceCuttingPara2d) Initializes a new instance of the RakeFaceCuttingPara2d class by copying from another instance. public RakeFaceCuttingPara2d(RakeFaceCuttingPara2d src) Parameters src RakeFaceCuttingPara2d The source instance to copy from. RakeFaceCuttingPara2d(XElement, string) Initializes a new instance of the RakeFaceCuttingPara2d class from XML. public RakeFaceCuttingPara2d(XElement src, string baseDirectory) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. Fields element_num Gets the number of elements in the cutting parameter. public const int element_num = 4 Field Value int Properties AnchorRakeAngle_deg Gets or sets the anchor rake angle in degrees. public double AnchorRakeAngle_deg { get; set; } Property Value double AnchorRakeAngle_rad Gets or sets the anchor rake angle in radians. Different rake angles may have different ploughing parameters but share the same shearing parameters. public double AnchorRakeAngle_rad { get; set; } Property Value double ElementNum Element number. public int ElementNum { get; } Property Value int FluteFormNum Flute form number. public int FluteFormNum { get; } Property Value int Kp Gets the ploughing coefficient vector in ECN coordinates. public Vec2d Kp { get; set; } Property Value Vec2d Kpc Gets or sets the ploughing coefficient along the rake face cross line (c). Unit: N/mm. public double Kpc { get; set; } Property Value double Kpn Gets or sets the ploughing coefficient along the rake face normal direction (n). Unit: N/mm. public double Kpn { get; set; } Property Value double Ks Gets the shear coefficient vector in ECN coordinates. public Vec2d Ks { get; set; } Property Value Vec2d Ksc Gets or sets the shear coefficient along the rake face cross line (c). Direction is from outer to center on side cutting. Unit: N/mm². public double Ksc { get; set; } Property Value double Ksn Gets or sets the shear coefficient along the rake face normal direction (n). Unit: N/mm². public double Ksn { get; set; } Property Value double Name Gets or sets the name of the cutting parameter. public string Name { get; set; } Property Value string Note Gets or sets additional notes about the cutting parameter. public string Note { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods CloneTemplate() Clone template. public ICuttingPara CloneTemplate() Returns ICuttingPara clone template 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 GenUnitParas() Generate ICuttingParas. The elements of each ICuttingPara are (1,0,0,0,..),(0,1,0,0,..),.… For parameter training. public List GenUnitParas() Returns List unit parameters. GetCuttingPara() Get ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara ICuttingPara GetElementByIndex(int) Gets the cutting parameter element at the specified index. public double GetElementByIndex(int index) Parameters index int The index of the element to retrieve. Returns double The cutting parameter element at the specified index. 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. SetElementByIndex(int, double) Sets the value of an element at the specified index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set (0-5). v double The value to set. Remarks Index mapping: 0 - Kse (N/mm²) 1 - Ksc (N/mm²) 2 - Ksn (N/mm²) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm) ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" + "summary": "Class RakeFaceCuttingPara2d Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents a 2D cutting parameter for rake face cutting operations. public class RakeFaceCuttingPara2d : IRakeFaceCuttingPara, ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote, IDuplicate Inheritance object RakeFaceCuttingPara2d Implements IRakeFaceCuttingPara ICuttingPara IGetCuttingPara IMakeXmlSource INameNote IDuplicate Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 RakeFaceCuttingPara2d() Initializes a new instance of the RakeFaceCuttingPara2d class. public RakeFaceCuttingPara2d() RakeFaceCuttingPara2d(RakeFaceCuttingPara2d) Initializes a new instance of the RakeFaceCuttingPara2d class by copying from another instance. public RakeFaceCuttingPara2d(RakeFaceCuttingPara2d src) Parameters src RakeFaceCuttingPara2d The source instance to copy from. RakeFaceCuttingPara2d(XElement, string) Initializes a new instance of the RakeFaceCuttingPara2d class from XML. public RakeFaceCuttingPara2d(XElement src, string baseDirectory) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. Fields element_num Gets the number of elements in the cutting parameter. public const int element_num = 4 Field Value int Properties AnchorRakeAngle_deg Gets or sets the anchor rake angle in degrees. public double AnchorRakeAngle_deg { get; set; } Property Value double AnchorRakeAngle_rad Gets or sets the anchor rake angle in radians. Different rake angles may have different ploughing parameters but share the same shearing parameters. public double AnchorRakeAngle_rad { get; set; } Property Value double ElementNum Element number. public int ElementNum { get; } Property Value int FluteFormNum Flute form number. public int FluteFormNum { get; } Property Value int Kp Gets the ploughing coefficient vector in ECN coordinates. public Vec2d Kp { get; set; } Property Value Vec2d Kpc Gets or sets the ploughing coefficient along the rake face cross line (c). Unit: N/mm. public double Kpc { get; set; } Property Value double Kpn Gets or sets the ploughing coefficient along the rake face normal direction (n). Unit: N/mm. public double Kpn { get; set; } Property Value double Ks Gets the shear coefficient vector in ECN coordinates. public Vec2d Ks { get; set; } Property Value Vec2d Ksc Gets or sets the shear coefficient along the rake face cross line (c). Direction is from outer to center on side cutting. Unit: N/mm�. public double Ksc { get; set; } Property Value double Ksn Gets or sets the shear coefficient along the rake face normal direction (n). Unit: N/mm�. public double Ksn { get; set; } Property Value double Name Gets or sets the name of the cutting parameter. public string Name { get; set; } Property Value string Note Gets or sets additional notes about the cutting parameter. public string Note { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods CloneTemplate() Clone template. public ICuttingPara CloneTemplate() Returns ICuttingPara clone template 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 GenUnitParas() Generate ICuttingParas. The elements of each ICuttingPara are (1,0,0,0,..),(0,1,0,0,..),.… For parameter training. public List GenUnitParas() Returns List unit parameters. GetCuttingPara() Get ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara ICuttingPara GetElementByIndex(int) Gets the cutting parameter element at the specified index. public double GetElementByIndex(int index) Parameters index int The index of the element to retrieve. Returns double The cutting parameter element at the specified index. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetElementByIndex(int, double) Sets the value of an element at the specified index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set (0-5). v double The value to set. Remarks Index mapping: 0 - Kse (N/mm�) 1 - Ksc (N/mm�) 2 - Ksn (N/mm�) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm) ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" }, "api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html": { "href": "api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html", "title": "Class RakeFaceCuttingPara3d | HiAPI-C# 2025", - "summary": "Class RakeFaceCuttingPara3d Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents local ECN (Edge-Cross-Normal) cutting parameters for rake face cutting. E: cutting edge direction C: Cross vector, along the rake face cross line, perpendicular to cutting edge N: rake face normal direction Internal Use Only. public class RakeFaceCuttingPara3d : IRakeFaceCuttingPara, ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote, IDuplicate Inheritance object RakeFaceCuttingPara3d Implements IRakeFaceCuttingPara ICuttingPara IGetCuttingPara IMakeXmlSource INameNote IDuplicate Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 Velocity is measured relative to the cutter Resulting force is applied to the cutter Constructors RakeFaceCuttingPara3d() Initializes a new instance of the RakeFaceCuttingPara class. public RakeFaceCuttingPara3d() RakeFaceCuttingPara3d(Vec3d, Vec3d, double) Initializes a new instance of the RakeFaceCuttingPara class with specified shear and plough vectors. public RakeFaceCuttingPara3d(Vec3d shearEcn, Vec3d ploughEcn, double anchorRakeAngle_rad = NaN) Parameters shearEcn Vec3d The shear coefficient vector in ECN coordinates (N/mm²). ploughEcn Vec3d The plough coefficient vector in ECN coordinates (N/mm). anchorRakeAngle_rad double The anchor rake angle in radians. RakeFaceCuttingPara3d(RakeFaceCuttingPara3d) Initializes a new instance of the RakeFaceCuttingPara class by copying from another instance. public RakeFaceCuttingPara3d(RakeFaceCuttingPara3d src) Parameters src RakeFaceCuttingPara3d The source instance to copy from. RakeFaceCuttingPara3d(double, double, double, double, double, double, double) Initializes a new instance of the RakeFaceCuttingPara class with individual coefficient values. public RakeFaceCuttingPara3d(double kse, double ksc, double ksn, double kpe, double kpc, double kpn, double anchorRakeAngle_rad) Parameters kse double The shear coefficient along the cutting edge direction (N/mm²). ksc double The shear coefficient along the rake face cross line (N/mm²). ksn double The shear coefficient along the rake face normal direction (N/mm²). kpe double The plough coefficient along the cutting edge direction (N/mm). kpc double The plough coefficient along the rake face cross line (N/mm). kpn double The plough coefficient along the rake face normal direction (N/mm). anchorRakeAngle_rad double The anchor rake angle in radians. RakeFaceCuttingPara3d(XElement, string) Ctor by XML. public RakeFaceCuttingPara3d(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties AnchorRakeAngle_deg Gets or sets the anchor rake angle in degrees. public double AnchorRakeAngle_deg { get; set; } Property Value double AnchorRakeAngle_rad Gets or sets the anchor rake angle in radians. Different rake angles may have different ploughing parameters but share the same shearing parameters. public double AnchorRakeAngle_rad { get; set; } Property Value double ChipFlowAngle_deg Gets the chip flow angle in degrees. public double ChipFlowAngle_deg { get; } Property Value double ChipFlowAngle_rad Gets or sets the chip flow angle in radians. public double ChipFlowAngle_rad { get; } Property Value double CsvText Gets or sets the cutting parameters as a comma-separated value string. Format: Kse,Ksc,Ksn,Kpe,Kpc,Kpn,AnchorRakeAngle_deg public string CsvText { get; set; } Property Value string ElementNum Element number: 6 for (Shear(e,c,n),Plough(e,c,n)). public int ElementNum { get; } Property Value int FluteFormNum Gets the number of flute forms in this parameter set. Always returns 1 as this class represents a single form. public int FluteFormNum { get; } Property Value int FrictionAngle_deg Gets the friction angle in degrees. public double FrictionAngle_deg { get; } Property Value double FrictionAngle_rad Gets the friction angle in radians. public double FrictionAngle_rad { get; } Property Value double Kp Gets the ploughing coefficient vector in ECN coordinates. public Vec3d Kp { get; set; } Property Value Vec3d KpOnZeroRakeAngleCoordinate Plough parameter remains constant on any rake angle. The vector changed by the view of coordinate transformation. public Vec3d KpOnZeroRakeAngleCoordinate { get; } Property Value Vec3d Kpc Gets or sets the ploughing coefficient along the rake face cross line (c). Unit: N/mm. public double Kpc { get; set; } Property Value double Kpe Gets or sets the ploughing coefficient along the cutting edge direction (e). Unit: N/mm. public double Kpe { get; set; } Property Value double Kpn Gets or sets the ploughing coefficient along the rake face normal direction (n). Unit: N/mm. public double Kpn { get; set; } Property Value double Ks Gets the shear coefficient vector in ECN coordinates. public Vec3d Ks { get; set; } Property Value Vec3d Ksc Gets or sets the shear coefficient along the rake face cross line (c). Direction is from outer to center on side cutting. Unit: N/mm². public double Ksc { get; set; } Property Value double Kse Gets or sets the shear coefficient along the cutting edge direction (e). Direction is from lower to upper on side cutting. Unit: N/mm². public double Kse { get; set; } Property Value double Ksn Gets or sets the shear coefficient along the rake face normal direction (n). Unit: N/mm². public double Ksn { get; set; } Property Value double Name Gets or sets the name of this parameter set. public string Name { get; set; } Property Value string Note Gets or sets additional notes about this parameter set. public string Note { get; set; } Property Value string XName Gets the XML element name for this type. public static string XName { get; } Property Value string Methods CloneTemplate() Creates a clone of this parameter set as a template. public ICuttingPara CloneTemplate() Returns ICuttingPara A new instance with the same anchor rake angle. Duplicate(params object[]) Creates a deep copy of this instance. public object Duplicate(params object[] res) Parameters res object[] Optional parameters (not used). Returns object A new instance with the same values. GenUnitParas() Generate ICuttingParas. The elements of each ICuttingPara are (1,0,0,0,..),(0,1,0,0,..),.… For parameter training. public List GenUnitParas() Returns List unit parameters. GetCuttingPara() Gets this instance as an ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara This instance. GetElementByIndex(int) value of (Shear(e,c,n),Plough(e,c,n)) by index. public double GetElementByIndex(int index) Parameters index int The index of the element to get (0-5). Returns double The value at the specified index. Remarks Index mapping: 0 - Kse (N/mm²) 1 - Ksc (N/mm²) 2 - Ksn (N/mm²) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm) 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. SetElementByIndex(int, double) Sets the value of an element at the specified index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set (0-5). v double The value to set. Remarks Index mapping: 0 - Kse (N/mm²) 1 - Ksc (N/mm²) 2 - Ksn (N/mm²) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm) ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" + "summary": "Class RakeFaceCuttingPara3d Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents local ECN (Edge-Cross-Normal) cutting parameters for rake face cutting. E: cutting edge direction C: Cross vector, along the rake face cross line, perpendicular to cutting edge N: rake face normal direction Internal Use Only. public class RakeFaceCuttingPara3d : IRakeFaceCuttingPara, ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote, IDuplicate Inheritance object RakeFaceCuttingPara3d Implements IRakeFaceCuttingPara ICuttingPara IGetCuttingPara IMakeXmlSource INameNote IDuplicate Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 Velocity is measured relative to the cutter Resulting force is applied to the cutter Constructors RakeFaceCuttingPara3d() Initializes a new instance of the RakeFaceCuttingPara class. public RakeFaceCuttingPara3d() RakeFaceCuttingPara3d(Vec3d, Vec3d, double) Initializes a new instance of the RakeFaceCuttingPara class with specified shear and plough vectors. public RakeFaceCuttingPara3d(Vec3d shearEcn, Vec3d ploughEcn, double anchorRakeAngle_rad = NaN) Parameters shearEcn Vec3d The shear coefficient vector in ECN coordinates (N/mm�). ploughEcn Vec3d The plough coefficient vector in ECN coordinates (N/mm). anchorRakeAngle_rad double The anchor rake angle in radians. RakeFaceCuttingPara3d(RakeFaceCuttingPara3d) Initializes a new instance of the RakeFaceCuttingPara class by copying from another instance. public RakeFaceCuttingPara3d(RakeFaceCuttingPara3d src) Parameters src RakeFaceCuttingPara3d The source instance to copy from. RakeFaceCuttingPara3d(double, double, double, double, double, double, double) Initializes a new instance of the RakeFaceCuttingPara class with individual coefficient values. public RakeFaceCuttingPara3d(double kse, double ksc, double ksn, double kpe, double kpc, double kpn, double anchorRakeAngle_rad) Parameters kse double The shear coefficient along the cutting edge direction (N/mm�). ksc double The shear coefficient along the rake face cross line (N/mm�). ksn double The shear coefficient along the rake face normal direction (N/mm�). kpe double The plough coefficient along the cutting edge direction (N/mm). kpc double The plough coefficient along the rake face cross line (N/mm). kpn double The plough coefficient along the rake face normal direction (N/mm). anchorRakeAngle_rad double The anchor rake angle in radians. RakeFaceCuttingPara3d(XElement, string) Ctor by XML. public RakeFaceCuttingPara3d(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties AnchorRakeAngle_deg Gets or sets the anchor rake angle in degrees. public double AnchorRakeAngle_deg { get; set; } Property Value double AnchorRakeAngle_rad Gets or sets the anchor rake angle in radians. Different rake angles may have different ploughing parameters but share the same shearing parameters. public double AnchorRakeAngle_rad { get; set; } Property Value double ChipFlowAngle_deg Gets the chip flow angle in degrees. public double ChipFlowAngle_deg { get; } Property Value double ChipFlowAngle_rad Gets or sets the chip flow angle in radians. public double ChipFlowAngle_rad { get; } Property Value double CsvText Gets or sets the cutting parameters as a comma-separated value string. Format: Kse,Ksc,Ksn,Kpe,Kpc,Kpn,AnchorRakeAngle_deg public string CsvText { get; set; } Property Value string ElementNum Element number: 6 for (Shear(e,c,n),Plough(e,c,n)). public int ElementNum { get; } Property Value int FluteFormNum Gets the number of flute forms in this parameter set. Always returns 1 as this class represents a single form. public int FluteFormNum { get; } Property Value int FrictionAngle_deg Gets the friction angle in degrees. public double FrictionAngle_deg { get; } Property Value double FrictionAngle_rad Gets the friction angle in radians. public double FrictionAngle_rad { get; } Property Value double Kp Gets the ploughing coefficient vector in ECN coordinates. public Vec3d Kp { get; set; } Property Value Vec3d KpOnZeroRakeAngleCoordinate Plough parameter remains constant on any rake angle. The vector changed by the view of coordinate transformation. public Vec3d KpOnZeroRakeAngleCoordinate { get; } Property Value Vec3d Kpc Gets or sets the ploughing coefficient along the rake face cross line (c). Unit: N/mm. public double Kpc { get; set; } Property Value double Kpe Gets or sets the ploughing coefficient along the cutting edge direction (e). Unit: N/mm. public double Kpe { get; set; } Property Value double Kpn Gets or sets the ploughing coefficient along the rake face normal direction (n). Unit: N/mm. public double Kpn { get; set; } Property Value double Ks Gets the shear coefficient vector in ECN coordinates. public Vec3d Ks { get; set; } Property Value Vec3d Ksc Gets or sets the shear coefficient along the rake face cross line (c). Direction is from outer to center on side cutting. Unit: N/mm�. public double Ksc { get; set; } Property Value double Kse Gets or sets the shear coefficient along the cutting edge direction (e). Direction is from lower to upper on side cutting. Unit: N/mm�. public double Kse { get; set; } Property Value double Ksn Gets or sets the shear coefficient along the rake face normal direction (n). Unit: N/mm�. public double Ksn { get; set; } Property Value double Name Gets or sets the name of this parameter set. public string Name { get; set; } Property Value string Note Gets or sets additional notes about this parameter set. public string Note { get; set; } Property Value string XName Gets the XML element name for this type. public static string XName { get; } Property Value string Methods CloneTemplate() Creates a clone of this parameter set as a template. public ICuttingPara CloneTemplate() Returns ICuttingPara A new instance with the same anchor rake angle. Duplicate(params object[]) Creates a deep copy of this instance. public object Duplicate(params object[] res) Parameters res object[] Optional parameters (not used). Returns object A new instance with the same values. GenUnitParas() Generate ICuttingParas. The elements of each ICuttingPara are (1,0,0,0,..),(0,1,0,0,..),.… For parameter training. public List GenUnitParas() Returns List unit parameters. GetCuttingPara() Gets this instance as an ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara This instance. GetElementByIndex(int) value of (Shear(e,c,n),Plough(e,c,n)) by index. public double GetElementByIndex(int index) Parameters index int The index of the element to get (0-5). Returns double The value at the specified index. Remarks Index mapping: 0 - Kse (N/mm�) 1 - Ksc (N/mm�) 2 - Ksn (N/mm�) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm) MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetElementByIndex(int, double) Sets the value of an element at the specified index. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int The index of the element to set (0-5). v double The value to set. Remarks Index mapping: 0 - Kse (N/mm�) 1 - Ksc (N/mm�) 2 - Ksn (N/mm�) 3 - Kpe (N/mm) 4 - Kpc (N/mm) 5 - Kpn (N/mm) ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" }, "api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html": { "href": "api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html", "title": "Class RakeFaceCuttingParaMap | HiAPI-C# 2025", - "summary": "Class RakeFaceCuttingParaMap Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents a map of rake face cutting parameters. public class RakeFaceCuttingParaMap : ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote, ICloneable Inheritance object RakeFaceCuttingParaMap Implements ICuttingPara IGetCuttingPara IMakeXmlSource INameNote ICloneable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 RakeFaceCuttingParaMap(RakeFaceCuttingParaMap) Creates a copy of this parameter map. public RakeFaceCuttingParaMap(RakeFaceCuttingParaMap source) Parameters source RakeFaceCuttingParaMap The source parameter map to copy from. RakeFaceCuttingParaMap(int, int, int) Initializes a new instance of the RakeFaceCuttingParaMap class. public RakeFaceCuttingParaMap(int fluteFormNum, int nAngleDivisionNum, int ecAngleDivisionNum) Parameters fluteFormNum int The number of flute forms. nAngleDivisionNum int The number of normal angle divisions. ecAngleDivisionNum int The number of eccentric angle divisions. RakeFaceCuttingParaMap(XElement, string) Ctor by XML. public RakeFaceCuttingParaMap(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties CircleParas CircleParas[FluteFormIndex,NAngleIndex,EcAngleIndex]. public Vec3d[,,] CircleParas { get; } Property Value Vec3d[,,] EcAngleDivisionNum Angle division number from +E axis on EC plane. Note that range of EcAngle is -pi~pi. public int EcAngleDivisionNum { get; } Property Value int EcAngleInterval_deg Gets or sets the eccentric angle interval in degrees. public double EcAngleInterval_deg { get; } Property Value double EcAngleInterval_rad Gets or sets the eccentric angle interval in radians. public double EcAngleInterval_rad { get; } Property Value double ElementNum Element number. public int ElementNum { get; } Property Value int FluteFormNum Gets or sets the number of flute forms. public int FluteFormNum { get; } Property Value int NAngleDivisionNum Angle division number from N axis. Like R on polar coordinate, but it expresses by angle. Note that range of NAngle is 0~pi/2. public int NAngleDivisionNum { get; } Property Value int NAngleInterval_deg Gets or sets the normal angle interval in degrees. public double NAngleInterval_deg { get; } Property Value double NAngleInterval_rad Gets or sets the normal angle interval in radians. public double NAngleInterval_rad { get; } Property Value double Name Gets or sets the name of the parameter map. public string Name { get; set; } Property Value string Note Gets or sets the note for the parameter map. public string Note { get; set; } Property Value string PloughParas Gets or sets the ploughing parameters. public Vec3d[] PloughParas { get; } Property Value Vec3d[] TipParas TipParas[FluteFormIndex]. tip shear para. public Vec3d[] TipParas { get; } Property Value Vec3d[] XName Name for XML IO. public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods Clone() Creates a new object that is a copy of the current instance. public object Clone() Returns object A new object that is a copy of this instance. CloneTemplate() Clone template. public ICuttingPara CloneTemplate() Returns ICuttingPara clone template GenUnitParas() Generate ICuttingParas. The elements of each ICuttingPara are (1,0,0,0,..),(0,1,0,0,..),.… For parameter training. public List GenUnitParas() Returns List unit parameters. GetCuttingPara() Get ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara ICuttingPara GetElementByIndex(int) Get element by index. For parameter training. public double GetElementByIndex(int elementIndex) Parameters elementIndex int element index Returns double value GetLocalRakeFaceCuttingPara(int, double, double) Gets the local rake face cutting parameters for the specified conditions. public RakeFaceCuttingPara3d GetLocalRakeFaceCuttingPara(int fluteIndex, double nAngle_rad, double ecAngle_rad) Parameters fluteIndex int The index of the flute. nAngle_rad double The normal angle in radians. ecAngle_rad double The effective cutting angle in radians. Returns RakeFaceCuttingPara3d A rake face cutting parameter 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. SetElementByIndex(int, double) Set element by index. For parameter training. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int element index v double value Test() Test method for validating the interpolation functionality of the RakeFaceCuttingParaMap. Creates a sample map and outputs interpolated values at various angles. public static void Test() ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" + "summary": "Class RakeFaceCuttingParaMap Namespace Hi.MillingForces.RakeFaceCuttingParas Assembly HiMech.dll Represents a map of rake face cutting parameters. public class RakeFaceCuttingParaMap : ICuttingPara, IGetCuttingPara, IMakeXmlSource, INameNote, ICloneable Inheritance object RakeFaceCuttingParaMap Implements ICuttingPara IGetCuttingPara IMakeXmlSource INameNote ICloneable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CuttingParaUtil.ToRakeFaceCuttingPara(ICuttingPara) DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 RakeFaceCuttingParaMap(RakeFaceCuttingParaMap) Creates a copy of this parameter map. public RakeFaceCuttingParaMap(RakeFaceCuttingParaMap source) Parameters source RakeFaceCuttingParaMap The source parameter map to copy from. RakeFaceCuttingParaMap(int, int, int) Initializes a new instance of the RakeFaceCuttingParaMap class. public RakeFaceCuttingParaMap(int fluteFormNum, int nAngleDivisionNum, int ecAngleDivisionNum) Parameters fluteFormNum int The number of flute forms. nAngleDivisionNum int The number of normal angle divisions. ecAngleDivisionNum int The number of eccentric angle divisions. RakeFaceCuttingParaMap(XElement, string) Ctor by XML. public RakeFaceCuttingParaMap(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties CircleParas CircleParas[FluteFormIndex,NAngleIndex,EcAngleIndex]. public Vec3d[,,] CircleParas { get; } Property Value Vec3d[,,] EcAngleDivisionNum Angle division number from +E axis on EC plane. Note that range of EcAngle is -pi~pi. public int EcAngleDivisionNum { get; } Property Value int EcAngleInterval_deg Gets or sets the eccentric angle interval in degrees. public double EcAngleInterval_deg { get; } Property Value double EcAngleInterval_rad Gets or sets the eccentric angle interval in radians. public double EcAngleInterval_rad { get; } Property Value double ElementNum Element number. public int ElementNum { get; } Property Value int FluteFormNum Gets or sets the number of flute forms. public int FluteFormNum { get; } Property Value int NAngleDivisionNum Angle division number from N axis. Like R on polar coordinate, but it expresses by angle. Note that range of NAngle is 0~pi/2. public int NAngleDivisionNum { get; } Property Value int NAngleInterval_deg Gets or sets the normal angle interval in degrees. public double NAngleInterval_deg { get; } Property Value double NAngleInterval_rad Gets or sets the normal angle interval in radians. public double NAngleInterval_rad { get; } Property Value double Name Gets or sets the name of the parameter map. public string Name { get; set; } Property Value string Note Gets or sets the note for the parameter map. public string Note { get; set; } Property Value string PloughParas Gets or sets the ploughing parameters. public Vec3d[] PloughParas { get; } Property Value Vec3d[] TipParas TipParas[FluteFormIndex]. tip shear para. public Vec3d[] TipParas { get; } Property Value Vec3d[] XName Name for XML IO. public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods Clone() Creates a new object that is a copy of the current instance. public object Clone() Returns object A new object that is a copy of this instance. CloneTemplate() Clone template. public ICuttingPara CloneTemplate() Returns ICuttingPara clone template GenUnitParas() Generate ICuttingParas. The elements of each ICuttingPara are (1,0,0,0,..),(0,1,0,0,..),.… For parameter training. public List GenUnitParas() Returns List unit parameters. GetCuttingPara() Get ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara ICuttingPara GetElementByIndex(int) Get element by index. For parameter training. public double GetElementByIndex(int elementIndex) Parameters elementIndex int element index Returns double value GetLocalRakeFaceCuttingPara(int, double, double) Gets the local rake face cutting parameters for the specified conditions. public RakeFaceCuttingPara3d GetLocalRakeFaceCuttingPara(int fluteIndex, double nAngle_rad, double ecAngle_rad) Parameters fluteIndex int The index of the flute. nAngle_rad double The normal angle in radians. ecAngle_rad double The effective cutting angle in radians. Returns RakeFaceCuttingPara3d A rake face cutting parameter 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetElementByIndex(int, double) Set element by index. For parameter training. public void SetElementByIndex(int elementIndex, double v) Parameters elementIndex int element index v double value Test() Test method for validating the interpolation functionality of the RakeFaceCuttingParaMap. Creates a sample map and outputs interpolated values at various angles. public static void Test() ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToTemplateXElement() Get XElement for templating. public XElement ToTemplateXElement() Returns XElement" }, "api/Hi.MillingForces.RakeFaceCuttingParas.html": { "href": "api/Hi.MillingForces.RakeFaceCuttingParas.html", @@ -3052,7 +3052,7 @@ "api/Hi.MillingProcs.MillingGuide.html": { "href": "api/Hi.MillingProcs.MillingGuide.html", "title": "Class MillingGuide | HiAPI-C# 2025", - "summary": "Class MillingGuide Namespace Hi.MillingProcs Assembly HiNc.dll Provides guidance and configuration for milling visualization and analysis. public class MillingGuide : IMakeXmlSource Inheritance object MillingGuide 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 MillingGuide() Initializes a new instance of the MillingGuide class with default configurations. public MillingGuide() MillingGuide(XElement, string, IProgress) Initializes a new instance of the MillingGuide class from XML data. public MillingGuide(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for XML deserialization. Properties ClStripChartConfig Gets or sets the configuration for cutter location strip charts. public ClStripChartConfig ClStripChartConfig { get; set; } Property Value ClStripChartConfig DictionaryColorGuide Gets or sets the dictionary of color guides for visualizing different properties. public DictionaryColorGuide DictionaryColorGuide { get; set; } Property Value DictionaryColorGuide ForceWCycleLineDivConfig Gets or sets the configuration for force cycle line division. public ForceCycleLineDivConfig ForceWCycleLineDivConfig { get; set; } Property Value ForceCycleLineDivConfig SensorSpindleMomentCycleLineDivConfig Gets or sets the configuration for sensor spindle moment cycle line division. public SpindleMomentCycleLineDivConfig SensorSpindleMomentCycleLineDivConfig { get; set; } Property Value SpindleMomentCycleLineDivConfig SimSpindleMomentCycleLineDivConfig Gets or sets the configuration for simulation spindle moment cycle line division. public SpindleMomentCycleLineDivConfig SimSpindleMomentCycleLineDivConfig { get; set; } Property Value SpindleMomentCycleLineDivConfig XName Name for XML IO. 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 MillingGuide Namespace Hi.MillingProcs Assembly HiNc.dll Provides guidance and configuration for milling visualization and analysis. public class MillingGuide : IMakeXmlSource Inheritance object MillingGuide 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 MillingGuide() Initializes a new instance of the MillingGuide class with default configurations. public MillingGuide() MillingGuide(XElement, string, IProgress) Initializes a new instance of the MillingGuide class from XML data. public MillingGuide(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element containing configuration data baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for XML deserialization. Properties ClStripChartConfig Gets or sets the configuration for cutter location strip charts. public ClStripChartConfig ClStripChartConfig { get; set; } Property Value ClStripChartConfig DictionaryColorGuide Gets or sets the dictionary of color guides for visualizing different properties. public DictionaryColorGuide DictionaryColorGuide { get; set; } Property Value DictionaryColorGuide ForceWCycleLineDivConfig Gets or sets the configuration for force cycle line division. public ForceCycleLineDivConfig ForceWCycleLineDivConfig { get; set; } Property Value ForceCycleLineDivConfig SensorSpindleMomentCycleLineDivConfig Gets or sets the configuration for sensor spindle moment cycle line division. public SpindleMomentCycleLineDivConfig SensorSpindleMomentCycleLineDivConfig { get; set; } Property Value SpindleMomentCycleLineDivConfig SimSpindleMomentCycleLineDivConfig Gets or sets the configuration for simulation spindle moment cycle line division. public SpindleMomentCycleLineDivConfig SimSpindleMomentCycleLineDivConfig { get; set; } Property Value SpindleMomentCycleLineDivConfig XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.MillingProcs.html": { "href": "api/Hi.MillingProcs.html", @@ -3062,12 +3062,12 @@ "api/Hi.MillingStepUtils.ClStripChartConfig.html": { "href": "api/Hi.MillingStepUtils.ClStripChartConfig.html", "title": "Class ClStripChartConfig | HiAPI-C# 2025", - "summary": "Class ClStripChartConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for ClStrip charts. public class ClStripChartConfig : IMakeXmlSource Inheritance object ClStripChartConfig 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 ClStripChartConfig() Initializes a new instance of the ClStripChartConfig class. public ClStripChartConfig() ClStripChartConfig(XElement) Ctor. public ClStripChartConfig(XElement src) Parameters src XElement XML Properties ItemConfigDictionary Dictionary of chart item configurations, indexed by key. public Dictionary ItemConfigDictionary { get; set; } Property Value Dictionary XName Name for XML IO. 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 ClStripChartConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for ClStrip charts. public class ClStripChartConfig : IMakeXmlSource Inheritance object ClStripChartConfig 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 ClStripChartConfig() Initializes a new instance of the ClStripChartConfig class. public ClStripChartConfig() ClStripChartConfig(XElement) Ctor. public ClStripChartConfig(XElement src) Parameters src XElement XML Properties ItemConfigDictionary Dictionary of chart item configurations, indexed by key. public Dictionary ItemConfigDictionary { get; set; } Property Value Dictionary XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.MillingStepUtils.ClStripChartItemConfig.html": { "href": "api/Hi.MillingStepUtils.ClStripChartItemConfig.html", "title": "Class ClStripChartItemConfig | HiAPI-C# 2025", - "summary": "Class ClStripChartItemConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for an individual ClStrip chart item. public class ClStripChartItemConfig : IMakeXmlSource Inheritance object ClStripChartItemConfig Implements IMakeXmlSource 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 ClStripChartItemConfig() Ctor. public ClStripChartItemConfig() ClStripChartItemConfig(XElement) Ctor. public ClStripChartItemConfig(XElement src) Parameters src XElement XML Properties TimeChartYConfig Gets or sets the Y-axis configuration for time charts. public TimeChartYConfig TimeChartYConfig { get; set; } Property Value TimeChartYConfig XName Name for XML IO. 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. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class ClStripChartItemConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for an individual ClStrip chart item. public class ClStripChartItemConfig : IMakeXmlSource Inheritance object ClStripChartItemConfig Implements IMakeXmlSource 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 ClStripChartItemConfig() Ctor. public ClStripChartItemConfig() ClStripChartItemConfig(XElement) Ctor. public ClStripChartItemConfig(XElement src) Parameters src XElement XML Properties TimeChartYConfig Gets or sets the Y-axis configuration for time charts. public TimeChartYConfig TimeChartYConfig { get; set; } Property Value TimeChartYConfig XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.MillingStepUtils.ForceCycleFlag.html": { "href": "api/Hi.MillingStepUtils.ForceCycleFlag.html", @@ -3077,7 +3077,7 @@ "api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html": { "href": "api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html", "title": "Class ForceCycleLineDivConfig | HiAPI-C# 2025", - "summary": "Class ForceCycleLineDivConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for force cycle line division display and analysis. public class ForceCycleLineDivConfig : TimeChartYConfig, IMakeXmlSource Inheritance object TimeChartYConfig ForceCycleLineDivConfig Implements IMakeXmlSource Inherited Members TimeChartYConfig.VRangeMode TimeChartYConfig.VRange TimeChartYConfig.ToString() 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 ForceCycleLineDivConfig() Default constructor with initial range settings. public ForceCycleLineDivConfig() ForceCycleLineDivConfig(XElement) Ctor. public ForceCycleLineDivConfig(XElement src) Parameters src XElement XML Properties MainForceCycleFlag Gets or sets the main force cycle flag determining how forces are represented. public ForceCycleFlag MainForceCycleFlag { get; set; } Property Value ForceCycleFlag XName Name for XML IO. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement" + "summary": "Class ForceCycleLineDivConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for force cycle line division display and analysis. public class ForceCycleLineDivConfig : TimeChartYConfig, IMakeXmlSource Inheritance object TimeChartYConfig ForceCycleLineDivConfig Implements IMakeXmlSource Inherited Members TimeChartYConfig.VRangeMode TimeChartYConfig.VRange TimeChartYConfig.ToString() 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 ForceCycleLineDivConfig() Default constructor with initial range settings. public ForceCycleLineDivConfig() ForceCycleLineDivConfig(XElement) Ctor. public ForceCycleLineDivConfig(XElement src) Parameters src XElement XML Properties MainForceCycleFlag Gets or sets the main force cycle flag determining how forces are represented. public ForceCycleFlag MainForceCycleFlag { get; set; } Property Value ForceCycleFlag XName Name for XML IO. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.MillingStepUtils.LineChartVRangeMode.html": { "href": "api/Hi.MillingStepUtils.LineChartVRangeMode.html", @@ -3087,12 +3087,12 @@ "api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html": { "href": "api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html", "title": "Class SpindleMomentCycleLineDivConfig | HiAPI-C# 2025", - "summary": "Class SpindleMomentCycleLineDivConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for spindle moment cycle line division display and analysis. public class SpindleMomentCycleLineDivConfig : IMakeXmlSource Inheritance object SpindleMomentCycleLineDivConfig 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 SpindleMomentCycleLineDivConfig() Ctor. public SpindleMomentCycleLineDivConfig() SpindleMomentCycleLineDivConfig(XElement) Ctor. public SpindleMomentCycleLineDivConfig(XElement src) Parameters src XElement XML Properties TimeChartYConfig Gets or sets the Y-axis configuration for the time chart display. public TimeChartYConfig TimeChartYConfig { get; set; } Property Value TimeChartYConfig XName Name for XML IO. 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 SpindleMomentCycleLineDivConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for spindle moment cycle line division display and analysis. public class SpindleMomentCycleLineDivConfig : IMakeXmlSource Inheritance object SpindleMomentCycleLineDivConfig 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 SpindleMomentCycleLineDivConfig() Ctor. public SpindleMomentCycleLineDivConfig() SpindleMomentCycleLineDivConfig(XElement) Ctor. public SpindleMomentCycleLineDivConfig(XElement src) Parameters src XElement XML Properties TimeChartYConfig Gets or sets the Y-axis configuration for the time chart display. public TimeChartYConfig TimeChartYConfig { get; set; } Property Value TimeChartYConfig XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.MillingStepUtils.TimeChartYConfig.html": { "href": "api/Hi.MillingStepUtils.TimeChartYConfig.html", "title": "Class TimeChartYConfig | HiAPI-C# 2025", - "summary": "Class TimeChartYConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for Y-axis settings in time charts. public class TimeChartYConfig : IMakeXmlSource Inheritance object TimeChartYConfig Implements IMakeXmlSource Derived ForceCycleLineDivConfig 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 TimeChartYConfig() Ctor. public TimeChartYConfig() TimeChartYConfig(XElement) Ctor. public TimeChartYConfig(XElement src) Parameters src XElement XML Properties VRange Minimum and maximum values for the vertical range. public Range VRange { get; set; } Property Value Range VRangeMode Vertical range mode. public LineChartVRangeMode VRangeMode { get; set; } Property Value LineChartVRangeMode XName Name for XML IO. 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. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class TimeChartYConfig Namespace Hi.MillingStepUtils Assembly HiNc.dll Configuration for Y-axis settings in time charts. public class TimeChartYConfig : IMakeXmlSource Inheritance object TimeChartYConfig Implements IMakeXmlSource Derived ForceCycleLineDivConfig 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 TimeChartYConfig() Ctor. public TimeChartYConfig() TimeChartYConfig(XElement) Ctor. public TimeChartYConfig(XElement src) Parameters src XElement XML Properties VRange Minimum and maximum values for the vertical range. public Range VRange { get; set; } Property Value Range VRangeMode Vertical range mode. public LineChartVRangeMode VRangeMode { get; set; } Property Value LineChartVRangeMode XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.MillingStepUtils.html": { "href": "api/Hi.MillingStepUtils.html", @@ -3277,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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -3287,7 +3287,7 @@ "api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html": { "href": "api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html", "title": "Class FixtureEditorDisplayeeConfig | HiAPI-C# 2025", - "summary": "Class FixtureEditorDisplayeeConfig Namespace Hi.NcMech.Fixtures Assembly HiMech.dll Configuration settings for fixture editor display features. public class FixtureEditorDisplayeeConfig : IMakeXmlSource Inheritance object FixtureEditorDisplayeeConfig 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 FixtureEditorDisplayeeConfig() Initializes a new instance of the FixtureEditorDisplayeeConfig class. public FixtureEditorDisplayeeConfig() FixtureEditorDisplayeeConfig(XElement) Initializes a new instance from XML. public FixtureEditorDisplayeeConfig(XElement element) Parameters element XElement Properties RenderingMode Gets or sets the rendering mode of the solid. public Solid.RenderingModeEnum RenderingMode { get; set; } Property Value Solid.RenderingModeEnum ShowGeomAnchor Gets or sets whether to show the geometry anchor. public bool ShowGeomAnchor { get; set; } Property Value bool ShowTableBuckle Gets or sets whether to show the table buckle. public bool ShowTableBuckle { get; set; } Property Value bool ShowWorkpieceBuckle Gets or sets whether to show the workpiece buckle. public bool ShowWorkpieceBuckle { get; set; } Property Value bool XName Name for XML IO. 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 FixtureEditorDisplayeeConfig Namespace Hi.NcMech.Fixtures Assembly HiMech.dll Configuration settings for fixture editor display features. public class FixtureEditorDisplayeeConfig : IMakeXmlSource Inheritance object FixtureEditorDisplayeeConfig 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 FixtureEditorDisplayeeConfig() Initializes a new instance of the FixtureEditorDisplayeeConfig class. public FixtureEditorDisplayeeConfig() FixtureEditorDisplayeeConfig(XElement) Initializes a new instance from XML. public FixtureEditorDisplayeeConfig(XElement element) Parameters element XElement Properties RenderingMode Gets or sets the rendering mode of the solid. public Solid.RenderingModeEnum RenderingMode { get; set; } Property Value Solid.RenderingModeEnum ShowGeomAnchor Gets or sets whether to show the geometry anchor. public bool ShowGeomAnchor { get; set; } Property Value bool ShowTableBuckle Gets or sets whether to show the table buckle. public bool ShowTableBuckle { get; set; } Property Value bool ShowWorkpieceBuckle Gets or sets whether to show the workpiece buckle. public bool ShowWorkpieceBuckle { get; set; } Property Value bool XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcMech.Fixtures.html": { "href": "api/Hi.NcMech.Fixtures.html", @@ -3297,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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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()" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -3337,7 +3337,7 @@ "api/Hi.NcMech.Solids.Solid.html": { "href": "api/Hi.NcMech.Solids.Solid.html", "title": "Class Solid | HiAPI-C# 2025", - "summary": "Class Solid Namespace Hi.NcMech.Solids Assembly HiMech.dll Represents a solid geometry object with display, collision detection, and STL capabilities. Provides thread-safe access to geometry data and caching mechanisms. public class Solid : IGetTriTree, ICollidable, IGetCollidable, IDisplayee, IExpandToBox3d, IStlSource, IGetStl, IPolarResolution2dSourceProperty, IDisposable, IMakeXmlSource, IGetSolid, IUpdateByContent, IClearCache Inheritance object Solid Implements IGetTriTree ICollidable IGetCollidable IDisplayee IExpandToBox3d IStlSource IGetStl IPolarResolution2dSourceProperty IDisposable IMakeXmlSource IGetSolid IUpdateByContent IClearCache Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) 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 Solid() Initializes a new instance of the Solid class. public Solid() Solid(IGetStl) Initializes a new instance of the Solid class with the specified STL geometry source. public Solid(IGetStl geom) Parameters geom IGetStl The STL geometry source. Solid(XElement, string, IProgress) Initializes a new instance of the Solid class from XML. public Solid(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. progress IProgress The progress reporter. Fields XName Gets the XML element name for serialization. public static string XName Field Value string Properties CollisionFlag Gets or sets the collision flag indicating the collision state of this solid. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag Geom Gets or sets the STL geometry source. Setting this property will clear the cached data. public IGetStl Geom { get; set; } Property Value IGetStl NativeSmoothTopoStl Gets the native smooth topology STL representation. The data is created from the STL representation when first accessed. public NativeTopoStld NativeSmoothTopoStl { get; } Property Value NativeTopoStld NativeStl Gets the native STL representation. The data is created from the STL representation when first accessed. public NativeStl NativeStl { get; } Property Value NativeStl PolarResolution2dSource The provider of IPolarResolution2d. public Func PolarResolution2dSource { get; set; } Property Value Func Prepared Gets or sets whether the solid geometry is prepared for use. Setting this to true will ensure all necessary data structures are initialized. Setting this to false will clear the cached data. public bool Prepared { get; set; } Property Value bool Stl Gets the STL representation of the solid geometry. The STL data is cached after first access. public Stl Stl { get; } Property Value Stl TriTree Gets the triangle tree representation for collision detection. The tree is built from the native STL data when first accessed. public TriTree TriTree { get; } Property Value TriTree Methods ClearCache() Manually clears the cached data if the content of Geom has changed. The cache determines the behavior of the Solid. 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. Display(Bind, RenderingModeEnum) Displays the solid according to the specified rendering mode. public void Display(Bind bind, Solid.RenderingModeEnum renderingMode) Parameters bind Bind Display binding context. renderingMode Solid.RenderingModeEnum Rendering mode. DisplayFeatureEdges(Bind) Displays the feature edges of the solid. public void DisplayFeatureEdges(Bind bind) Parameters bind Bind Display binding context. 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. 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 GetCollidable() Get ICollidable. public ICollidable GetCollidable() Returns ICollidable The collidable object. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. GetSourceGeom() Gets the source geometry object. public IGetStl GetSourceGeom() Returns IGetStl The source geometry object. GetStl() Gets the STL geometry data. public Stl GetStl() Returns Stl The STL geometry object GetTriTree() Get TriTree. public TriTree GetTriTree() Returns TriTree TriTree 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. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" + "summary": "Class Solid Namespace Hi.NcMech.Solids Assembly HiMech.dll Represents a solid geometry object with display, collision detection, and STL capabilities. Provides thread-safe access to geometry data and caching mechanisms. public class Solid : IGetTriTree, ICollidable, IGetCollidable, IDisplayee, IExpandToBox3d, IStlSource, IGetStl, IPolarResolution2dSourceProperty, IDisposable, IMakeXmlSource, IGetSolid, IUpdateByContent, IClearCache Inheritance object Solid Implements IGetTriTree ICollidable IGetCollidable IDisplayee IExpandToBox3d IStlSource IGetStl IPolarResolution2dSourceProperty IDisposable IMakeXmlSource IGetSolid IUpdateByContent IClearCache Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) 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 Solid() Initializes a new instance of the Solid class. public Solid() Solid(IGetStl) Initializes a new instance of the Solid class with the specified STL geometry source. public Solid(IGetStl geom) Parameters geom IGetStl The STL geometry source. Solid(XElement, string, IProgress) Initializes a new instance of the Solid class from XML. public Solid(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. progress IProgress The progress reporter. Fields XName Gets the XML element name for serialization. public static string XName Field Value string Properties CollisionFlag Gets or sets the collision flag indicating the collision state of this solid. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag Geom Gets or sets the STL geometry source. Setting this property will clear the cached data. public IGetStl Geom { get; set; } Property Value IGetStl NativeSmoothTopoStl Gets the native smooth topology STL representation. The data is created from the STL representation when first accessed. public NativeTopoStld NativeSmoothTopoStl { get; } Property Value NativeTopoStld NativeStl Gets the native STL representation. The data is created from the STL representation when first accessed. public NativeStl NativeStl { get; } Property Value NativeStl PolarResolution2dSource The provider of IPolarResolution2d. public Func PolarResolution2dSource { get; set; } Property Value Func Prepared Gets or sets whether the solid geometry is prepared for use. Setting this to true will ensure all necessary data structures are initialized. Setting this to false will clear the cached data. public bool Prepared { get; set; } Property Value bool Stl Gets the STL representation of the solid geometry. The STL data is cached after first access. public Stl Stl { get; } Property Value Stl TriTree Gets the triangle tree representation for collision detection. The tree is built from the native STL data when first accessed. public TriTree TriTree { get; } Property Value TriTree Methods ClearCache() Manually clears the cached data if the content of Geom has changed. The cache determines the behavior of the Solid. 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. Display(Bind, RenderingModeEnum) Displays the solid according to the specified rendering mode. public void Display(Bind bind, Solid.RenderingModeEnum renderingMode) Parameters bind Bind Display binding context. renderingMode Solid.RenderingModeEnum Rendering mode. DisplayFeatureEdges(Bind) Displays the feature edges of the solid. public void DisplayFeatureEdges(Bind bind) Parameters bind Bind Display binding context. 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. 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 GetCollidable() Get ICollidable. public ICollidable GetCollidable() Returns ICollidable The collidable object. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. GetSourceGeom() Gets the source geometry object. public IGetStl GetSourceGeom() Returns IGetStl The source geometry object. GetStl() Gets the STL geometry data. public Stl GetStl() Returns Stl The STL geometry object GetTriTree() Get TriTree. public TriTree GetTriTree() Returns TriTree TriTree MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" }, "api/Hi.NcMech.Solids.SolidFuncSource.html": { "href": "api/Hi.NcMech.Solids.SolidFuncSource.html", @@ -3367,12 +3367,12 @@ "api/Hi.NcMech.Topo.NcRotation.html": { "href": "api/Hi.NcMech.Topo.NcRotation.html", "title": "Class NcRotation | HiAPI-C# 2025", - "summary": "Class NcRotation Namespace Hi.NcMech.Topo Assembly HiMech.dll Represents a rotational transformer for NC machine tool axes. Provides functionality for rotational motion with stroke and speed limits. public class NcRotation : DynamicRotation, IDynamicRotation, IGetInverseTransformer, INcTransformer, IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IToPresentDto, INcStroke Inheritance object DynamicRotation NcRotation Implements IDynamicRotation IGetInverseTransformer INcTransformer IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IToPresentDto INcStroke Inherited Members DynamicRotation.Set(DynamicRotation) DynamicRotation.Step DynamicRotation.GetMat() DynamicRotation.GetMatInv() DynamicRotation.GetInverseTransformer() DynamicRotation.Axis DynamicRotation.Angle_rad DynamicRotation.Angle_deg DynamicRotation.Pivot DynamicRotation.ToPresentDto() 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 NcRotation() Initializes a new instance of the NcRotation class. public NcRotation() NcRotation(Vec3d, double) Initializes a new instance of the NcRotation class with the specified axis and angle. public NcRotation(Vec3d axis, double angle_rad = 0) Parameters axis Vec3d The rotation axis vector. angle_rad double The rotation angle in radians. NcRotation(Vec3d, double, Vec3d) Initializes a new instance of the NcRotation class with the specified axis, angle and pivot point. public NcRotation(Vec3d axis, double angle_rad, Vec3d pivot) Parameters axis Vec3d The rotation axis vector. angle_rad double The rotation angle in radians. pivot Vec3d The pivot point for rotation. NcRotation(XElement) Initializes a new instance of the NcRotation class from XML. public NcRotation(XElement src) Parameters src XElement The XML source element. Properties KeyCode Gets or sets the key code of the motion axis. public string KeyCode { get; set; } Property Value string SpeedLimit_radds Gets or sets the speed limit in radians per second. public double SpeedLimit_radds { get; set; } Property Value double SpeedLimit_rpm Gets or sets the speed limit in revolutions per minute. public double SpeedLimit_rpm { get; set; } Property Value double StrokeMax_deg Gets or sets the maximum stroke angle in degrees. public double StrokeMax_deg { get; set; } Property Value double StrokeMax_rad Gets or sets the maximum stroke angle in radians. public double StrokeMax_rad { get; set; } Property Value double StrokeMin_deg Gets or sets the minimum stroke angle in degrees. public double StrokeMin_deg { get; set; } Property Value double StrokeMin_rad Gets or sets the minimum stroke angle in radians. public double StrokeMin_rad { get; set; } Property Value double XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public override ITransformer Clone() Returns ITransformer clone GetKeyCode() Get key code of the motion axis. public string GetKeyCode() Returns string GetSpeedLimit() Get speed limit. public double GetSpeedLimit() Returns double Remarks Gets the speed limit in radians per second. GetStrokeMax() Get positivest stroke. public double GetStrokeMax() Returns double Remarks Gets the maximum stroke angle in radians. GetStrokeMin() Get negativest stroke. public double GetStrokeMin() Returns double Remarks Gets the minimum stroke angle in radians. 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 NcRotation Namespace Hi.NcMech.Topo Assembly HiMech.dll Represents a rotational transformer for NC machine tool axes. Provides functionality for rotational motion with stroke and speed limits. public class NcRotation : DynamicRotation, IDynamicRotation, IGetInverseTransformer, INcTransformer, IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IToPresentDto, INcStroke Inheritance object DynamicRotation NcRotation Implements IDynamicRotation IGetInverseTransformer INcTransformer IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IToPresentDto INcStroke Inherited Members DynamicRotation.Set(DynamicRotation) DynamicRotation.Step DynamicRotation.GetMat() DynamicRotation.GetMatInv() DynamicRotation.GetInverseTransformer() DynamicRotation.Axis DynamicRotation.Angle_rad DynamicRotation.Angle_deg DynamicRotation.Pivot DynamicRotation.ToPresentDto() 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 NcRotation() Initializes a new instance of the NcRotation class. public NcRotation() NcRotation(Vec3d, double) Initializes a new instance of the NcRotation class with the specified axis and angle. public NcRotation(Vec3d axis, double angle_rad = 0) Parameters axis Vec3d The rotation axis vector. angle_rad double The rotation angle in radians. NcRotation(Vec3d, double, Vec3d) Initializes a new instance of the NcRotation class with the specified axis, angle and pivot point. public NcRotation(Vec3d axis, double angle_rad, Vec3d pivot) Parameters axis Vec3d The rotation axis vector. angle_rad double The rotation angle in radians. pivot Vec3d The pivot point for rotation. NcRotation(XElement) Initializes a new instance of the NcRotation class from XML. public NcRotation(XElement src) Parameters src XElement The XML source element. Properties KeyCode Gets or sets the key code of the motion axis. public string KeyCode { get; set; } Property Value string SpeedLimit_radds Gets or sets the speed limit in radians per second. public double SpeedLimit_radds { get; set; } Property Value double SpeedLimit_rpm Gets or sets the speed limit in revolutions per minute. public double SpeedLimit_rpm { get; set; } Property Value double StrokeMax_deg Gets or sets the maximum stroke angle in degrees. public double StrokeMax_deg { get; set; } Property Value double StrokeMax_rad Gets or sets the maximum stroke angle in radians. public double StrokeMax_rad { get; set; } Property Value double StrokeMin_deg Gets or sets the minimum stroke angle in degrees. public double StrokeMin_deg { get; set; } Property Value double StrokeMin_rad Gets or sets the minimum stroke angle in radians. public double StrokeMin_rad { get; set; } Property Value double XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public override ITransformer Clone() Returns ITransformer clone GetKeyCode() Get key code of the motion axis. public string GetKeyCode() Returns string GetSpeedLimit() Get speed limit. public double GetSpeedLimit() Returns double Remarks Gets the speed limit in radians per second. GetStrokeMax() Get positivest stroke. public double GetStrokeMax() Returns double Remarks Gets the maximum stroke angle in radians. GetStrokeMin() Get negativest stroke. public double GetStrokeMin() Returns double Remarks Gets the minimum stroke angle in radians. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcMech.Topo.NcTranslation.html": { "href": "api/Hi.NcMech.Topo.NcTranslation.html", "title": "Class NcTranslation | HiAPI-C# 2025", - "summary": "Class NcTranslation Namespace Hi.NcMech.Topo Assembly HiMech.dll Represents a translational transformer for NC machine tool axes. Provides functionality for linear motion with stroke and speed limits. public class NcTranslation : DynamicTranslation, IGetInverseTransformer, INcTransformer, IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IToPresentDto, INcStroke Inheritance object DynamicTranslation NcTranslation Implements IGetInverseTransformer INcTransformer IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IToPresentDto INcStroke Inherited Members DynamicTranslation.Set(DynamicTranslation) DynamicTranslation.Step DynamicTranslation.GetMat() DynamicTranslation.GetMatInv() DynamicTranslation.GetInverseTransformer() DynamicTranslation.Axis DynamicTranslation.Len DynamicTranslation.ToPresentDto() 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 NcTranslation() Initializes a new instance of the NcTranslation class. public NcTranslation() NcTranslation(Vec3d, double) Initializes a new instance of the NcTranslation class with the specified translation vector and length. public NcTranslation(Vec3d trans, double len = 0) Parameters trans Vec3d The translation vector. len double The translation length. NcTranslation(XElement) Initializes a new instance of the NcTranslation class from XML. public NcTranslation(XElement src) Parameters src XElement The XML source element. Properties KeyCode Gets or sets the key code of the motion axis. public string KeyCode { get; set; } Property Value string SpeedLimit_mmdmin Gets or sets the speed limit in millimeters per minute. public double SpeedLimit_mmdmin { get; set; } Property Value double SpeedLimit_mmds Gets or sets the speed limit in millimeters per second. public double SpeedLimit_mmds { get; set; } Property Value double StrokeMax_mm Gets or sets the maximum stroke distance in millimeters. public double StrokeMax_mm { get; set; } Property Value double StrokeMin_mm Gets or sets the minimum stroke distance in millimeters. public double StrokeMin_mm { get; set; } Property Value double XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public override ITransformer Clone() Returns ITransformer clone GetKeyCode() Get key code of the motion axis. public string GetKeyCode() Returns string GetSpeedLimit() Get speed limit. public double GetSpeedLimit() Returns double Remarks Gets the speed limit in millimeters per second. GetStrokeMax() Get positivest stroke. public double GetStrokeMax() Returns double Remarks Gets the maximum stroke distance in millimeters. GetStrokeMin() Get negativest stroke. public double GetStrokeMin() Returns double Remarks Gets the minimum stroke distance in millimeters. 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 NcTranslation Namespace Hi.NcMech.Topo Assembly HiMech.dll Represents a translational transformer for NC machine tool axes. Provides functionality for linear motion with stroke and speed limits. public class NcTranslation : DynamicTranslation, IGetInverseTransformer, INcTransformer, IDynamicRegular, IDynamicTransformer, ITransformer, IMakeXmlSource, IToPresentDto, INcStroke Inheritance object DynamicTranslation NcTranslation Implements IGetInverseTransformer INcTransformer IDynamicRegular IDynamicTransformer ITransformer IMakeXmlSource IToPresentDto INcStroke Inherited Members DynamicTranslation.Set(DynamicTranslation) DynamicTranslation.Step DynamicTranslation.GetMat() DynamicTranslation.GetMatInv() DynamicTranslation.GetInverseTransformer() DynamicTranslation.Axis DynamicTranslation.Len DynamicTranslation.ToPresentDto() 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 NcTranslation() Initializes a new instance of the NcTranslation class. public NcTranslation() NcTranslation(Vec3d, double) Initializes a new instance of the NcTranslation class with the specified translation vector and length. public NcTranslation(Vec3d trans, double len = 0) Parameters trans Vec3d The translation vector. len double The translation length. NcTranslation(XElement) Initializes a new instance of the NcTranslation class from XML. public NcTranslation(XElement src) Parameters src XElement The XML source element. Properties KeyCode Gets or sets the key code of the motion axis. public string KeyCode { get; set; } Property Value string SpeedLimit_mmdmin Gets or sets the speed limit in millimeters per minute. public double SpeedLimit_mmdmin { get; set; } Property Value double SpeedLimit_mmds Gets or sets the speed limit in millimeters per second. public double SpeedLimit_mmds { get; set; } Property Value double StrokeMax_mm Gets or sets the maximum stroke distance in millimeters. public double StrokeMax_mm { get; set; } Property Value double StrokeMin_mm Gets or sets the minimum stroke distance in millimeters. public double StrokeMin_mm { get; set; } Property Value double XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods Clone() Clones this instance. public override ITransformer Clone() Returns ITransformer clone GetKeyCode() Get key code of the motion axis. public string GetKeyCode() Returns string GetSpeedLimit() Get speed limit. public double GetSpeedLimit() Returns double Remarks Gets the speed limit in millimeters per second. GetStrokeMax() Get positivest stroke. public double GetStrokeMax() Returns double Remarks Gets the maximum stroke distance in millimeters. GetStrokeMin() Get negativest stroke. public double GetStrokeMin() Returns double Remarks Gets the minimum stroke distance in millimeters. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcMech.Topo.SolidSourceTopoBrick.html": { "href": "api/Hi.NcMech.Topo.SolidSourceTopoBrick.html", @@ -3392,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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html": { "href": "api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html", @@ -3402,7 +3402,7 @@ "api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html": { "href": "api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html", "title": "Class WorkpieceEditorDisplayeeConfig | HiAPI-C# 2025", - "summary": "Class WorkpieceEditorDisplayeeConfig Namespace Hi.NcMech.Workpieces Assembly HiMech.dll Configuration settings for workpiece editor display. public class WorkpieceEditorDisplayeeConfig : IMakeXmlSource Inheritance object WorkpieceEditorDisplayeeConfig 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 WorkpieceEditorDisplayeeConfig() Initializes a new instance of the WorkpieceEditorDisplayeeConfig class. public WorkpieceEditorDisplayeeConfig() WorkpieceEditorDisplayeeConfig(XElement) Initializes a new instance from XML. public WorkpieceEditorDisplayeeConfig(XElement element) Parameters element XElement Properties FixtureRenderingMode Rendering mode for fixture geometry. public Solid.RenderingModeEnum FixtureRenderingMode { get; set; } Property Value Solid.RenderingModeEnum IdealGeomRenderingMode Rendering mode for ideal geometry. public Solid.RenderingModeEnum IdealGeomRenderingMode { get; set; } Property Value Solid.RenderingModeEnum RawGeomRenderingMode Rendering mode for raw geometry. public Solid.RenderingModeEnum RawGeomRenderingMode { get; set; } Property Value Solid.RenderingModeEnum ShowFixtureBuckle Whether to show fixture buckle. public bool ShowFixtureBuckle { get; set; } Property Value bool ShowGeomAnchor Whether to show geometry anchor. public bool ShowGeomAnchor { get; set; } Property Value bool ShowProgramZeroAnchor Whether to show program zero anchor. public bool ShowProgramZeroAnchor { get; set; } Property Value bool ShowRuntimeGeom Whether to show runtime geometry. public bool ShowRuntimeGeom { get; set; } Property Value bool XName Name for XML IO. 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 WorkpieceEditorDisplayeeConfig Namespace Hi.NcMech.Workpieces Assembly HiMech.dll Configuration settings for workpiece editor display. public class WorkpieceEditorDisplayeeConfig : IMakeXmlSource Inheritance object WorkpieceEditorDisplayeeConfig 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 WorkpieceEditorDisplayeeConfig() Initializes a new instance of the WorkpieceEditorDisplayeeConfig class. public WorkpieceEditorDisplayeeConfig() WorkpieceEditorDisplayeeConfig(XElement) Initializes a new instance from XML. public WorkpieceEditorDisplayeeConfig(XElement element) Parameters element XElement Properties FixtureRenderingMode Rendering mode for fixture geometry. public Solid.RenderingModeEnum FixtureRenderingMode { get; set; } Property Value Solid.RenderingModeEnum IdealGeomRenderingMode Rendering mode for ideal geometry. public Solid.RenderingModeEnum IdealGeomRenderingMode { get; set; } Property Value Solid.RenderingModeEnum RawGeomRenderingMode Rendering mode for raw geometry. public Solid.RenderingModeEnum RawGeomRenderingMode { get; set; } Property Value Solid.RenderingModeEnum ShowFixtureBuckle Whether to show fixture buckle. public bool ShowFixtureBuckle { get; set; } Property Value bool ShowGeomAnchor Whether to show geometry anchor. public bool ShowGeomAnchor { get; set; } Property Value bool ShowProgramZeroAnchor Whether to show program zero anchor. public bool ShowProgramZeroAnchor { get; set; } Property Value bool ShowRuntimeGeom Whether to show runtime geometry. public bool ShowRuntimeGeom { get; set; } Property Value bool XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcMech.Workpieces.WorkpieceService.html": { "href": "api/Hi.NcMech.Workpieces.WorkpieceService.html", @@ -3417,17 +3417,17 @@ "api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html": { "href": "api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html", "title": "Class CodeXyzabcMachineTool | HiAPI-C# 2025", - "summary": "Class CodeXyzabcMachineTool Namespace Hi.NcMech.Xyzabc Assembly HiMech.dll For legacy compatible. Use GeneralXyzabcMachineTool instead. public class CodeXyzabcMachineTool : IXyzabcMachineTool, IDisplayee, IGetCollisionIndexPairs, IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IMakeXmlSource, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, INameNote Inheritance object CodeXyzabcMachineTool Implements IXyzabcMachineTool IDisplayee IGetCollisionIndexPairs IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IMakeXmlSource IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d 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) MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CodeXyzabcMachineTool(CodeXyzabcChain) Initializes a new instance of the CodeXyzabcMachineTool class. public CodeXyzabcMachineTool(CodeXyzabcChain xyzabcChain) Parameters xyzabcChain CodeXyzabcChain The XYZABC chain instance. CodeXyzabcMachineTool(string, bool) Builds a machine tool from a compact CodeXyzabcChain axis string and vertical/horizontal layout flag. public CodeXyzabcMachineTool(string chainCode = \"[O][Z][C][w];[O][Y][X][B][S][t]\", bool isVertical = true) Parameters chainCode string Bracket token string consumed by CodeXyzabcChain (defaults to a common 5-axis layout). isVertical bool Whether the Z column is treated as vertical for the generated chain. CodeXyzabcMachineTool(XElement, string, IProgress) Initializes a new instance from XML. public CodeXyzabcMachineTool(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. progress IProgress The progress reporter. Properties CollisionIndexPairs Gets or sets the collection of collision index pairs. public HashSet CollisionIndexPairs { get; set; } Property Value HashSet EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded Gets or sets whether to automatically generate collision index pairs when loading from XML. public bool EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded { get; set; } Property Value bool McCodes Gets the machine codes array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine transformers array. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] 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 TableAnchor Anchor to attach fixture or workpiece. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetTableBuckle. public Anchor TableAnchor { get; } Property Value Anchor ToolAnchor Anchor to attach tool. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetToolBuckle. public Anchor ToolAnchor { get; } Property Value Anchor XName Name of XML element. public static string XName { get; } Property Value string XyzabcChain Gets the XYZABC chain instance. public IXyzabcChain XyzabcChain { get; } Property Value IXyzabcChain 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 GenerateCollisionIndexPairs() Generates collision index pairs for the machine tool components. public void GenerateCollisionIndexPairs() 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. GetCollisionIndexPairs() Gets a collection of collision index pairs for collision detection. public IEnumerable GetCollisionIndexPairs() Returns IEnumerable A collection of CollisionIndexPair objects. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetMcCodeTransformerDictionary() public Dictionary GetMcCodeTransformerDictionary() Returns Dictionary GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain GetXyzabcMachineTool() public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool 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 CodeXyzabcMachineTool Namespace Hi.NcMech.Xyzabc Assembly HiMech.dll For legacy compatible. Use GeneralXyzabcMachineTool instead. public class CodeXyzabcMachineTool : IXyzabcMachineTool, IDisplayee, IGetCollisionIndexPairs, IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IMakeXmlSource, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, INameNote Inheritance object CodeXyzabcMachineTool Implements IXyzabcMachineTool IDisplayee IGetCollisionIndexPairs IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IMakeXmlSource IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d 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) MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CodeXyzabcMachineTool(CodeXyzabcChain) Initializes a new instance of the CodeXyzabcMachineTool class. public CodeXyzabcMachineTool(CodeXyzabcChain xyzabcChain) Parameters xyzabcChain CodeXyzabcChain The XYZABC chain instance. CodeXyzabcMachineTool(string, bool) Builds a machine tool from a compact CodeXyzabcChain axis string and vertical/horizontal layout flag. public CodeXyzabcMachineTool(string chainCode = \"[O][Z][C][w];[O][Y][X][B][S][t]\", bool isVertical = true) Parameters chainCode string Bracket token string consumed by CodeXyzabcChain (defaults to a common 5-axis layout). isVertical bool Whether the Z column is treated as vertical for the generated chain. CodeXyzabcMachineTool(XElement, string, IProgress) Initializes a new instance from XML. public CodeXyzabcMachineTool(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. progress IProgress The progress reporter. Properties CollisionIndexPairs Gets or sets the collection of collision index pairs. public HashSet CollisionIndexPairs { get; set; } Property Value HashSet EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded Gets or sets whether to automatically generate collision index pairs when loading from XML. public bool EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded { get; set; } Property Value bool McCodes Gets the machine codes array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine transformers array. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] 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 TableAnchor Anchor to attach fixture or workpiece. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetTableBuckle. public Anchor TableAnchor { get; } Property Value Anchor ToolAnchor Anchor to attach tool. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetToolBuckle. public Anchor ToolAnchor { get; } Property Value Anchor XName Name of XML element. public static string XName { get; } Property Value string XyzabcChain Gets the XYZABC chain instance. public IXyzabcChain XyzabcChain { get; } Property Value IXyzabcChain 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 GenerateCollisionIndexPairs() Generates collision index pairs for the machine tool components. public void GenerateCollisionIndexPairs() 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. GetCollisionIndexPairs() Gets a collection of collision index pairs for collision detection. public IEnumerable GetCollisionIndexPairs() Returns IEnumerable A collection of CollisionIndexPair objects. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetMcCodeTransformerDictionary() public Dictionary GetMcCodeTransformerDictionary() Returns Dictionary GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain GetXyzabcMachineTool() public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html": { "href": "api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html", "title": "Class CodeXyzabcMachineToolUri | HiAPI-C# 2025", - "summary": "Class CodeXyzabcMachineToolUri Namespace Hi.NcMech.Xyzabc Assembly HiMech.dll Represents a URI-based container for CodeXyzabcMachineTool. public class CodeXyzabcMachineToolUri : IGetCodeXyzabcMachineTool, IMakeXmlSource, IUriGetter Inheritance object CodeXyzabcMachineToolUri Implements IGetCodeXyzabcMachineTool IMakeXmlSource IUriGetter 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 CodeXyzabcMachineToolUri(string, CodeXyzabcMachineTool) Initializes a new instance of the CodeXyzabcMachineToolUri class. public CodeXyzabcMachineToolUri(string uri, CodeXyzabcMachineTool data) Parameters uri string URI location. data CodeXyzabcMachineTool Machine tool data. CodeXyzabcMachineToolUri(XElement, string, IProgress, object[]) Ctor. public CodeXyzabcMachineToolUri(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement XML element source. baseDirectory string Base directory. progress IProgress Progress reporter passed to LoadFromUri(string, IProgress, object[]). res object[] Additional resources. Properties IsEncrypted Gets or sets whether the content is encrypted. public bool IsEncrypted { get; set; } Property Value bool MachineTool Gets or sets the machine tool. public CodeXyzabcMachineTool MachineTool { get; } Property Value CodeXyzabcMachineTool Uri Gets the URI string. public string Uri { get; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetXyzabcMachineTool() Get CodeXyzabcMachineTool. public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool Machine tool. LoadFromUri(string, IProgress, object[]) Loads the machine tool data from the URI. public void LoadFromUri(string baseDirectory, IProgress progress, object[] res) Parameters baseDirectory string Base directory. progress IProgress Progress reporter for nested XML / factory loading. res object[] Additional resources. 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. SaveToUri(string) Saves the machine tool data to the URI. public void SaveToUri(string baseDirectory) Parameters baseDirectory string Base directory." + "summary": "Class CodeXyzabcMachineToolUri Namespace Hi.NcMech.Xyzabc Assembly HiMech.dll Represents a URI-based container for CodeXyzabcMachineTool. public class CodeXyzabcMachineToolUri : IGetCodeXyzabcMachineTool, IMakeXmlSource, IUriGetter Inheritance object CodeXyzabcMachineToolUri Implements IGetCodeXyzabcMachineTool IMakeXmlSource IUriGetter 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 CodeXyzabcMachineToolUri(string, CodeXyzabcMachineTool) Initializes a new instance of the CodeXyzabcMachineToolUri class. public CodeXyzabcMachineToolUri(string uri, CodeXyzabcMachineTool data) Parameters uri string URI location. data CodeXyzabcMachineTool Machine tool data. CodeXyzabcMachineToolUri(XElement, string, IProgress, object[]) Ctor. public CodeXyzabcMachineToolUri(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement XML element source. baseDirectory string Base directory. progress IProgress Progress reporter passed to LoadFromUri(string, IProgress, object[]). res object[] Additional resources. Properties IsEncrypted Gets or sets whether the content is encrypted. public bool IsEncrypted { get; set; } Property Value bool MachineTool Gets or sets the machine tool. public CodeXyzabcMachineTool MachineTool { get; } Property Value CodeXyzabcMachineTool Uri Gets the URI string. public string Uri { get; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetXyzabcMachineTool() Get CodeXyzabcMachineTool. public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool Machine tool. LoadFromUri(string, IProgress, object[]) Loads the machine tool data from the URI. public void LoadFromUri(string baseDirectory, IProgress progress, object[] res) Parameters baseDirectory string Base directory. progress IProgress Progress reporter for nested XML / factory loading. res object[] Additional resources. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SaveToUri(string) Saves the machine tool data to the URI. public void SaveToUri(string baseDirectory) Parameters baseDirectory string Base directory." }, "api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html": { "href": "api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html", "title": "Class GeneralXyzabcMachineTool | HiAPI-C# 2025", - "summary": "Class GeneralXyzabcMachineTool Namespace Hi.NcMech.Xyzabc Assembly HiMech.dll General implementation of an XYZABC machine tool. public class GeneralXyzabcMachineTool : IXyzabcMachineTool, IDisplayee, IGetCollisionIndexPairs, IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IMakeXmlSource, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, INameNote Inheritance object GeneralXyzabcMachineTool Implements IXyzabcMachineTool IDisplayee IGetCollisionIndexPairs IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IMakeXmlSource IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d 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) MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GeneralXyzabcMachineTool(IXyzabcChain) Initializes a new instance of the GeneralXyzabcMachineTool class. public GeneralXyzabcMachineTool(IXyzabcChain xyzabcChain) Parameters xyzabcChain IXyzabcChain XYZABC chain to use. GeneralXyzabcMachineTool(XElement, string, IProgress) Initializes a new instance of the GeneralXyzabcMachineTool class from XML. public GeneralXyzabcMachineTool(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element source. baseDirectory string Base directory. progress IProgress Progress reporter for loading XyzabcChain and related children. Fields XName Name of XML element. public static string XName Field Value string Properties CollisionIndexPairs Collection of collision index pairs for collision detection. public HashSet CollisionIndexPairs { get; } Property Value HashSet EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded Gets or sets whether to automatically generate collision index pairs when loaded from XML. public bool EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded { get; set; } Property Value bool McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] 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 TableAnchor Anchor to attach fixture or workpiece. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetTableBuckle. public Anchor TableAnchor { get; } Property Value Anchor ToolAnchor Anchor to attach tool. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetToolBuckle. public Anchor ToolAnchor { get; } Property Value Anchor XyzabcChain XYZABC chain for this machine tool. public IXyzabcChain XyzabcChain { get; } Property Value IXyzabcChain XyzabcChainFile File path for XYZABC chain. public string XyzabcChainFile { get; set; } 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. GetCollisionIndexPairs() Gets a collection of collision index pairs for collision detection. public IEnumerable GetCollisionIndexPairs() Returns IEnumerable A collection of CollisionIndexPair objects. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetMcCodeTransformerDictionary() public Dictionary GetMcCodeTransformerDictionary() Returns Dictionary GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain GetXyzabcMachineTool() public GeneralXyzabcMachineTool GetXyzabcMachineTool() Returns GeneralXyzabcMachineTool 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 GeneralXyzabcMachineTool Namespace Hi.NcMech.Xyzabc Assembly HiMech.dll General implementation of an XYZABC machine tool. public class GeneralXyzabcMachineTool : IXyzabcMachineTool, IDisplayee, IGetCollisionIndexPairs, IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IMakeXmlSource, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, INameNote Inheritance object GeneralXyzabcMachineTool Implements IXyzabcMachineTool IDisplayee IGetCollisionIndexPairs IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IMakeXmlSource IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d 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) MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GeneralXyzabcMachineTool(IXyzabcChain) Initializes a new instance of the GeneralXyzabcMachineTool class. public GeneralXyzabcMachineTool(IXyzabcChain xyzabcChain) Parameters xyzabcChain IXyzabcChain XYZABC chain to use. GeneralXyzabcMachineTool(XElement, string, IProgress) Initializes a new instance of the GeneralXyzabcMachineTool class from XML. public GeneralXyzabcMachineTool(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element source. baseDirectory string Base directory. progress IProgress Progress reporter for loading XyzabcChain and related children. Fields XName Name of XML element. public static string XName Field Value string Properties CollisionIndexPairs Collection of collision index pairs for collision detection. public HashSet CollisionIndexPairs { get; } Property Value HashSet EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded Gets or sets whether to automatically generate collision index pairs when loaded from XML. public bool EnableAutoGeneratingCollisionIndexPairsOnXmlLoaded { get; set; } Property Value bool McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] 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 TableAnchor Anchor to attach fixture or workpiece. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetTableBuckle. public Anchor TableAnchor { get; } Property Value Anchor ToolAnchor Anchor to attach tool. The anchor is the same as IXyzabcChain.Hi.Numerical.Xyzabc.IXyzabcChain.GetToolBuckle. public Anchor ToolAnchor { get; } Property Value Anchor XyzabcChain XYZABC chain for this machine tool. public IXyzabcChain XyzabcChain { get; } Property Value IXyzabcChain XyzabcChainFile File path for XYZABC chain. public string XyzabcChainFile { get; set; } 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. GetCollisionIndexPairs() Gets a collection of collision index pairs for collision detection. public IEnumerable GetCollisionIndexPairs() Returns IEnumerable A collection of CollisionIndexPair objects. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetMcCodeTransformerDictionary() public Dictionary GetMcCodeTransformerDictionary() Returns Dictionary GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain GetXyzabcMachineTool() public GeneralXyzabcMachineTool GetXyzabcMachineTool() Returns GeneralXyzabcMachineTool MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html": { "href": "api/Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html", @@ -3452,17 +3452,17 @@ "api/Hi.NcOpt.CuttingVelocityOptLimit.html": { "href": "api/Hi.NcOpt.CuttingVelocityOptLimit.html", "title": "Class CuttingVelocityOptLimit | HiAPI-C# 2025", - "summary": "Class CuttingVelocityOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents optimization limits for cutting velocity parameters. public class CuttingVelocityOptLimit : ICuttingVelocityOptLimit, IMakeXmlSource, IDuplicate, IToXElement Inheritance object CuttingVelocityOptLimit Implements ICuttingVelocityOptLimit IMakeXmlSource IDuplicate 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 CuttingVelocityOptLimit() Initializes a new instance of the CuttingVelocityOptLimit class. public CuttingVelocityOptLimit() CuttingVelocityOptLimit(XElement, string) Initializes a new instance of the CuttingVelocityOptLimit class from XML. public CuttingVelocityOptLimit(XElement src, string baseDirectory) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. Properties MaxCuttingVelocity_mmdmin Gets or sets the maximum cutting velocity in millimeters per minute. public double MaxCuttingVelocity_mmdmin { get; set; } Property Value double MaxCuttingVelocity_mmds Gets or sets the maximum cutting velocity in millimeters per second. public double MaxCuttingVelocity_mmds { get; set; } Property Value double MinCuttingVelocity_mmdmin Gets or sets the minimum cutting velocity in millimeters per minute. public double MinCuttingVelocity_mmdmin { get; set; } Property Value double MinCuttingVelocity_mmds Gets or sets the minimum cutting velocity in millimeters per second. public double MinCuttingVelocity_mmds { get; set; } Property Value double 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 GetMaxCuttingVelocity_mmds() Gets the maximum cutting velocity in millimeters per second. public double GetMaxCuttingVelocity_mmds() Returns double The maximum cutting velocity in millimeters per second. GetMinCuttingVelocity_mmds() Gets the minimum cutting velocity in millimeters per second. public double GetMinCuttingVelocity_mmds() Returns double The minimum cutting velocity in millimeters per second. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class CuttingVelocityOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents optimization limits for cutting velocity parameters. public class CuttingVelocityOptLimit : ICuttingVelocityOptLimit, IMakeXmlSource, IDuplicate, IToXElement Inheritance object CuttingVelocityOptLimit Implements ICuttingVelocityOptLimit IMakeXmlSource IDuplicate 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 CuttingVelocityOptLimit() Initializes a new instance of the CuttingVelocityOptLimit class. public CuttingVelocityOptLimit() CuttingVelocityOptLimit(XElement, string) Initializes a new instance of the CuttingVelocityOptLimit class from XML. public CuttingVelocityOptLimit(XElement src, string baseDirectory) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. Properties MaxCuttingVelocity_mmdmin Gets or sets the maximum cutting velocity in millimeters per minute. public double MaxCuttingVelocity_mmdmin { get; set; } Property Value double MaxCuttingVelocity_mmds Gets or sets the maximum cutting velocity in millimeters per second. public double MaxCuttingVelocity_mmds { get; set; } Property Value double MinCuttingVelocity_mmdmin Gets or sets the minimum cutting velocity in millimeters per minute. public double MinCuttingVelocity_mmdmin { get; set; } Property Value double MinCuttingVelocity_mmds Gets or sets the minimum cutting velocity in millimeters per second. public double MinCuttingVelocity_mmds { get; set; } Property Value double 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 GetMaxCuttingVelocity_mmds() Gets the maximum cutting velocity in millimeters per second. public double GetMaxCuttingVelocity_mmds() Returns double The maximum cutting velocity in millimeters per second. GetMinCuttingVelocity_mmds() Gets the minimum cutting velocity in millimeters per second. public double GetMinCuttingVelocity_mmds() Returns double The minimum cutting velocity in millimeters per second. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html": { "href": "api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html", "title": "Class FixedFeedPerCycleOptLimit | HiAPI-C# 2025", - "summary": "Class FixedFeedPerCycleOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents fixed feed-per-cycle optimization limits. Provides implementation for feed-per-cycle optimization with fixed minimum and maximum values. public class FixedFeedPerCycleOptLimit : IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IClearCache, IToXElement Inheritance object FixedFeedPerCycleOptLimit Implements IFeedPerToothOptLimit IMakeXmlSource IDuplicate IClearCache 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 FixedFeedPerCycleOptLimit(Func, double) Initializes a new instance of the FixedFeedPerCycleOptLimit class with specified parameters. public FixedFeedPerCycleOptLimit(Func fluteNumFunc, double maxFeedPerCycle_mm) Parameters fluteNumFunc Func Function that returns the number of flutes maxFeedPerCycle_mm double Maximum feed per cycle in millimeters FixedFeedPerCycleOptLimit(XElement, string, MillingCutter) Ctor. public FixedFeedPerCycleOptLimit(XElement src, string baseDirectory, MillingCutter cutter) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths cutter MillingCutter The milling cutter to use for flute number calculation Properties FluteNum Gets the number of flutes. public int FluteNum { get; } Property Value int MaxFeedPerCycle_mm Gets or sets the maximum feed per cycle value in millimeters. public double MaxFeedPerCycle_mm { get; set; } Property Value double MinFeedPerCycle_mm Gets or sets the minimum feed per cycle value in millimeters. public double MinFeedPerCycle_mm { get; set; } Property Value double 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(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 GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class FixedFeedPerCycleOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents fixed feed-per-cycle optimization limits. Provides implementation for feed-per-cycle optimization with fixed minimum and maximum values. public class FixedFeedPerCycleOptLimit : IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IClearCache, IToXElement Inheritance object FixedFeedPerCycleOptLimit Implements IFeedPerToothOptLimit IMakeXmlSource IDuplicate IClearCache 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 FixedFeedPerCycleOptLimit(Func, double) Initializes a new instance of the FixedFeedPerCycleOptLimit class with specified parameters. public FixedFeedPerCycleOptLimit(Func fluteNumFunc, double maxFeedPerCycle_mm) Parameters fluteNumFunc Func Function that returns the number of flutes maxFeedPerCycle_mm double Maximum feed per cycle in millimeters FixedFeedPerCycleOptLimit(XElement, string, MillingCutter) Ctor. public FixedFeedPerCycleOptLimit(XElement src, string baseDirectory, MillingCutter cutter) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths cutter MillingCutter The milling cutter to use for flute number calculation Properties FluteNum Gets the number of flutes. public int FluteNum { get; } Property Value int MaxFeedPerCycle_mm Gets or sets the maximum feed per cycle value in millimeters. public double MaxFeedPerCycle_mm { get; set; } Property Value double MinFeedPerCycle_mm Gets or sets the minimum feed per cycle value in millimeters. public double MinFeedPerCycle_mm { get; set; } Property Value double 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(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 GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcOpt.FixedFeedPerToothOptLimit.html": { "href": "api/Hi.NcOpt.FixedFeedPerToothOptLimit.html", "title": "Class FixedFeedPerToothOptLimit | HiAPI-C# 2025", - "summary": "Class FixedFeedPerToothOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents fixed feed-per-tooth optimization limits. Provides implementation for feed-per-tooth optimization with fixed minimum and maximum values. public class FixedFeedPerToothOptLimit : IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IToXElement Inheritance object FixedFeedPerToothOptLimit Implements IFeedPerToothOptLimit IMakeXmlSource IDuplicate IToXElement 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 FixedFeedPerToothOptLimit() Ctor. public FixedFeedPerToothOptLimit() FixedFeedPerToothOptLimit(XElement, string) Initializes a new instance of the FixedFeedPerToothOptLimit class. public FixedFeedPerToothOptLimit(XElement element, string baseDirectory) Parameters element XElement The XML element containing optimization limit data. baseDirectory string The base directory for resolving relative paths. Properties MaxFeedPerTooth_mm Gets or sets the maximum feed per tooth value in millimeters. public double MaxFeedPerTooth_mm { get; set; } Property Value double MinFeedPerTooth_mm Gets or sets the minimum feed per tooth value in millimeters. public double MinFeedPerTooth_mm { get; set; } Property Value double 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 GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class FixedFeedPerToothOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents fixed feed-per-tooth optimization limits. Provides implementation for feed-per-tooth optimization with fixed minimum and maximum values. public class FixedFeedPerToothOptLimit : IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IToXElement Inheritance object FixedFeedPerToothOptLimit Implements IFeedPerToothOptLimit IMakeXmlSource IDuplicate IToXElement 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 FixedFeedPerToothOptLimit() Ctor. public FixedFeedPerToothOptLimit() FixedFeedPerToothOptLimit(XElement, string) Initializes a new instance of the FixedFeedPerToothOptLimit class. public FixedFeedPerToothOptLimit(XElement element, string baseDirectory) Parameters element XElement The XML element containing optimization limit data. baseDirectory string The base directory for resolving relative paths. Properties MaxFeedPerTooth_mm Gets or sets the maximum feed per tooth value in millimeters. public double MaxFeedPerTooth_mm { get; set; } Property Value double MinFeedPerTooth_mm Gets or sets the minimum feed per tooth value in millimeters. public double MinFeedPerTooth_mm { get; set; } Property Value double 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 GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcOpt.ICutterOptLimitHost.html": { "href": "api/Hi.NcOpt.ICutterOptLimitHost.html", @@ -3487,17 +3487,17 @@ "api/Hi.NcOpt.MillingCutterOptOption.html": { "href": "api/Hi.NcOpt.MillingCutterOptOption.html", "title": "Class MillingCutterOptOption | HiAPI-C# 2025", - "summary": "Class MillingCutterOptOption Namespace Hi.NcOpt Assembly HiMech.dll Represents NC optimization option for milling cutters. public class MillingCutterOptOption : ICutterOptOption, IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IClearCache, IToXElement Inheritance object MillingCutterOptOption Implements ICutterOptOption IFeedPerToothOptLimit IMakeXmlSource IDuplicate IClearCache 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 MillingCutterOptOption() Ctor with null properties. public MillingCutterOptOption() MillingCutterOptOption(XElement, string, string, MillingCutter) Initializes a new instance of the MillingCutterOptOption class from XML. public MillingCutterOptOption(XElement src, string baseDirectory, string relFile, MillingCutter cutter) Parameters src XElement XML element source. baseDirectory string Base directory. relFile string Relative file path. cutter MillingCutter Milling cutter. Properties EnableLimitByMinimumUncutChipThickness Gets or sets whether to limit feedrate by minimum uncut chip thickness. It is a lower bound limit. public bool EnableLimitByMinimumUncutChipThickness { get; set; } Property Value bool EnableLimitByReliefAngle Gets or sets whether to limit feedrate by relief angle collision. It is a upper bound limit. public bool EnableLimitByReliefAngle { get; set; } Property Value bool EnableOpt Gets or sets whether optimization is enabled. public bool EnableOpt { get; set; } Property Value bool MaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters. Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double MaxFeedPerTooth_mm { get; set; } Property Value double MinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters. Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double MinFeedPerTooth_mm { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string YieldingSafetyFactor Gets or sets the safety factor for yielding. By the principle of conservation, if the value is different from the NcOptOption.YieldingSafetyFactor, The larger value will be applied in the optimization process. public double YieldingSafetyFactor { get; set; } Property Value double YieldingUtilizationFactor Gets or sets the utilization factor for yielding. It is the reciprocal of YieldingSafetyFactor. public double YieldingUtilizationFactor { get; set; } Property Value double Methods ClearCache() Clears any cached data held by the implementing object. 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 Remarks res[0] has to be ICutter. GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class MillingCutterOptOption Namespace Hi.NcOpt Assembly HiMech.dll Represents NC optimization option for milling cutters. public class MillingCutterOptOption : ICutterOptOption, IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IClearCache, IToXElement Inheritance object MillingCutterOptOption Implements ICutterOptOption IFeedPerToothOptLimit IMakeXmlSource IDuplicate IClearCache 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 MillingCutterOptOption() Ctor with null properties. public MillingCutterOptOption() MillingCutterOptOption(XElement, string, string, MillingCutter) Initializes a new instance of the MillingCutterOptOption class from XML. public MillingCutterOptOption(XElement src, string baseDirectory, string relFile, MillingCutter cutter) Parameters src XElement XML element source. baseDirectory string Base directory. relFile string Relative file path. cutter MillingCutter Milling cutter. Properties EnableLimitByMinimumUncutChipThickness Gets or sets whether to limit feedrate by minimum uncut chip thickness. It is a lower bound limit. public bool EnableLimitByMinimumUncutChipThickness { get; set; } Property Value bool EnableLimitByReliefAngle Gets or sets whether to limit feedrate by relief angle collision. It is a upper bound limit. public bool EnableLimitByReliefAngle { get; set; } Property Value bool EnableOpt Gets or sets whether optimization is enabled. public bool EnableOpt { get; set; } Property Value bool MaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters. Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double MaxFeedPerTooth_mm { get; set; } Property Value double MinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters. Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double MinFeedPerTooth_mm { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string YieldingSafetyFactor Gets or sets the safety factor for yielding. By the principle of conservation, if the value is different from the NcOptOption.YieldingSafetyFactor, The larger value will be applied in the optimization process. public double YieldingSafetyFactor { get; set; } Property Value double YieldingUtilizationFactor Gets or sets the utilization factor for yielding. It is the reciprocal of YieldingSafetyFactor. public double YieldingUtilizationFactor { get; set; } Property Value double Methods ClearCache() Clears any cached data held by the implementing object. 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 Remarks res[0] has to be ICutter. GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcOpt.NcOptOption.html": { "href": "api/Hi.NcOpt.NcOptOption.html", "title": "Class NcOptOption | HiAPI-C# 2025", - "summary": "Class NcOptOption Namespace Hi.NcOpt Assembly HiMech.dll Represents the optimization options for NC operations. public class NcOptOption : IMakeXmlSource, IEquatable, IToXElement Inheritance object NcOptOption Implements IMakeXmlSource IEquatable IToXElement 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 NcOptOption() Ctor. public NcOptOption() NcOptOption(NcOptOption) Copy Ctor. public NcOptOption(NcOptOption src) Parameters src NcOptOption src NcOptOption(XElement) Initializes a new instance of the NcOptOption class from XML. public NcOptOption(XElement src) Parameters src XElement The XML element containing the option data. Properties CompensationMask Internal Use Only. Gets or sets the compensation mask for axis compensation. public int CompensationMask { get; set; } Property Value int EnableDepthCompensation Gets or sets whether depth compensation is enabled. public bool EnableDepthCompensation { get; set; } Property Value bool EnableDepthSplition Enables or disables depth splitting optimization. public bool EnableDepthSplition { get; set; } Property Value bool EnableForwardCompensation Gets or sets whether forward compensation is enabled. public bool EnableForwardCompensation { get; set; } Property Value bool EnableInterpolation Enables or disables interpolation. public bool EnableInterpolation { get; set; } Property Value bool EnableOpt Enables or disables the optimization process. public bool EnableOpt { get; set; } Property Value bool EnableOptFeedrate Enables or disables feedrate optimization. public bool EnableOptFeedrate { get; set; } Property Value bool EnableSideCompensation Gets or sets whether side compensation is enabled. public bool EnableSideCompensation { get; set; } Property Value bool ExtendedPostDistance_mm Gets or sets the extended post-distance in millimeters. public double ExtendedPostDistance_mm { get; set; } Property Value double ExtendedPreDistance_mm Gets or sets the extended pre-distance in millimeters. public double ExtendedPreDistance_mm { get; set; } Property Value double FeedrateAssignmentRatio The option takes effect if EnableInterpolation is true. If the feedrate changing exceeds this ratio, the Feedrate in the NC line will be updated. public double FeedrateAssignmentRatio { get; set; } Property Value double IsPreferFuncIndexDictionaryCalled Internal Use Only. public bool IsPreferFuncIndexDictionaryCalled { get; } Property Value bool MaxAcceleration_mmds2 Gets or sets the maximum acceleration in millimeters per second squared. The typical CNC lathe or machining center has an acceleration of 0.2g (2 m/sec2). High speed machines have accelerations up to 2g (20 m/sec2). An arbitrary value 10mm/s2 is chosen for initial value. Note: 600mm/min=10mm/s. public double MaxAcceleration_mmds2 { get; set; } Property Value double MaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters. By the principle of conservation, if the value is different from the IFeedPerToothOptLimit.GetMaxFeedPerTooth_mm(), The smaller value will be applied in the optimization process. public double MaxFeedPerTooth_mm { get; set; } Property Value double MaxFeedrate_mmdmin Gets or sets the maximum feedrate in millimeters per minute. public double MaxFeedrate_mmdmin { get; set; } Property Value double MaxFeedrate_mmds Gets or sets the maximum feedrate in millimeters per second. public double MaxFeedrate_mmds { get; set; } Property Value double MaxJerk_mmds3 Gets or sets the maximum jerk in millimeters per second cubed. public double MaxJerk_mmds3 { get; set; } Property Value double MaxSpindlePowerSafetyFactor Gets or sets the safety factor for spindle power. public double MaxSpindlePowerSafetyFactor { get; set; } Property Value double MaxSpindlePowerUtilizationFactor Gets or sets the utilization factor for spindle power. It is the reciprocal of MaxSpindlePowerSafetyFactor. public double MaxSpindlePowerUtilizationFactor { get; set; } Property Value double MaxSpindleTorqueSafetyFactor Gets or sets the safety factor for spindle torque. public double MaxSpindleTorqueSafetyFactor { get; set; } Property Value double MaxSpindleTorqueUtilizationFactor Gets or sets the utilization factor for spindle torque. It is the reciprocal of MaxSpindleTorqueSafetyFactor. public double MaxSpindleTorqueUtilizationFactor { get; set; } Property Value double MinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters. By the principle of conservation, if the value is different from the IFeedPerToothOptLimit.GetMinFeedPerTooth_mm(), The larger value will be applied in the optimization process. public double MinFeedPerTooth_mm { get; set; } Property Value double MinFeedrate_mmdmin Gets or sets the minimum feedrate in millimeters per minute. public double MinFeedrate_mmdmin { get; set; } Property Value double MinFeedrate_mmds Gets or sets the minimum feedrate in millimeters per second. The principle of conversation is applied for feedrate setting (MinFeedrate_mmds and MaxFeedrate_mmds) and feed per tooth setting (MinFeedPerTooth_mm and MaxFeedPerTooth_mm). If feed per tooth setting is not in the range of feedrate setting, The feedrate setting takes priority. public double MinFeedrate_mmds { get; set; } Property Value double PreferedForce_N Gets or sets the preferred force in Newtons. public double PreferedForce_N { get; set; } Property Value double RapidFeed_mmdmin Gets or sets the rapid feed rate in millimeters per minute. public double RapidFeed_mmdmin { get; set; } Property Value double RapidFeed_mmds Gets or sets the rapid feed rate in millimeters per second. public double RapidFeed_mmds { get; set; } Property Value double ThermalYieldSafetyFactor Gets or sets the safety factor for cutter thermal yield. public double ThermalYieldSafetyFactor { get; set; } Property Value double ThermalYieldUtilizationFactor Gets or sets the safety bound for cutter thermal yield. It is the reciprocal of ThermalYieldSafetyFactor. public double ThermalYieldUtilizationFactor { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string YieldingSafetyFactor Gets or sets the safety factor for yielding. By the principle of conservation, if the value is different from the MillingCutterOptOption.YieldingSafetyFactor, The larger value will be applied in the optimization process. public double YieldingSafetyFactor { get; set; } Property Value double YieldingUtilizationFactor Gets or sets the utilization factor for yielding. It is the reciprocal of YieldingSafetyFactor. public double YieldingUtilizationFactor { get; set; } Property Value double Methods CallPreferFuncIndexDictionary() Calls and returns the prefer function index dictionary, initializing it if it is null. public Dictionary, double> CallPreferFuncIndexDictionary() Returns Dictionary, double> The prefer function index dictionary. Duplicate() Creates a new instance of NcOptOption by duplicating the current instance. public NcOptOption Duplicate() Returns NcOptOption A new NcOptOption instance with the same values as the current instance. Equals(NcOptOption) Indicates whether the current object is equal to another object of the same type. public bool Equals(NcOptOption other) Parameters other NcOptOption 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. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class NcOptOption Namespace Hi.NcOpt Assembly HiMech.dll Represents the optimization options for NC operations. public class NcOptOption : IMakeXmlSource, IEquatable, IToXElement Inheritance object NcOptOption Implements IMakeXmlSource IEquatable IToXElement 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 NcOptOption() Ctor. public NcOptOption() NcOptOption(NcOptOption) Copy Ctor. public NcOptOption(NcOptOption src) Parameters src NcOptOption src NcOptOption(XElement) Initializes a new instance of the NcOptOption class from XML. public NcOptOption(XElement src) Parameters src XElement The XML element containing the option data. Properties CompensationMask Internal Use Only. Gets or sets the compensation mask for axis compensation. public int CompensationMask { get; set; } Property Value int EnableDepthCompensation Gets or sets whether depth compensation is enabled. public bool EnableDepthCompensation { get; set; } Property Value bool EnableDepthSplition Enables or disables depth splitting optimization. public bool EnableDepthSplition { get; set; } Property Value bool EnableForwardCompensation Gets or sets whether forward compensation is enabled. public bool EnableForwardCompensation { get; set; } Property Value bool EnableInterpolation Enables or disables interpolation. public bool EnableInterpolation { get; set; } Property Value bool EnableOpt Enables or disables the optimization process. public bool EnableOpt { get; set; } Property Value bool EnableOptFeedrate Enables or disables feedrate optimization. public bool EnableOptFeedrate { get; set; } Property Value bool EnableSideCompensation Gets or sets whether side compensation is enabled. public bool EnableSideCompensation { get; set; } Property Value bool ExtendedPostDistance_mm Gets or sets the extended post-distance in millimeters. public double ExtendedPostDistance_mm { get; set; } Property Value double ExtendedPreDistance_mm Gets or sets the extended pre-distance in millimeters. public double ExtendedPreDistance_mm { get; set; } Property Value double FeedrateAssignmentRatio The option takes effect if EnableInterpolation is true. If the feedrate changing exceeds this ratio, the Feedrate in the NC line will be updated. public double FeedrateAssignmentRatio { get; set; } Property Value double IsPreferFuncIndexDictionaryCalled Internal Use Only. public bool IsPreferFuncIndexDictionaryCalled { get; } Property Value bool MaxAcceleration_mmds2 Gets or sets the maximum acceleration in millimeters per second squared. The typical CNC lathe or machining center has an acceleration of 0.2g (2 m/sec2). High speed machines have accelerations up to 2g (20 m/sec2). An arbitrary value 10mm/s2 is chosen for initial value. Note: 600mm/min=10mm/s. public double MaxAcceleration_mmds2 { get; set; } Property Value double MaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters. By the principle of conservation, if the value is different from the IFeedPerToothOptLimit.GetMaxFeedPerTooth_mm(), The smaller value will be applied in the optimization process. public double MaxFeedPerTooth_mm { get; set; } Property Value double MaxFeedrate_mmdmin Gets or sets the maximum feedrate in millimeters per minute. public double MaxFeedrate_mmdmin { get; set; } Property Value double MaxFeedrate_mmds Gets or sets the maximum feedrate in millimeters per second. public double MaxFeedrate_mmds { get; set; } Property Value double MaxJerk_mmds3 Gets or sets the maximum jerk in millimeters per second cubed. public double MaxJerk_mmds3 { get; set; } Property Value double MaxSpindlePowerSafetyFactor Gets or sets the safety factor for spindle power. public double MaxSpindlePowerSafetyFactor { get; set; } Property Value double MaxSpindlePowerUtilizationFactor Gets or sets the utilization factor for spindle power. It is the reciprocal of MaxSpindlePowerSafetyFactor. public double MaxSpindlePowerUtilizationFactor { get; set; } Property Value double MaxSpindleTorqueSafetyFactor Gets or sets the safety factor for spindle torque. public double MaxSpindleTorqueSafetyFactor { get; set; } Property Value double MaxSpindleTorqueUtilizationFactor Gets or sets the utilization factor for spindle torque. It is the reciprocal of MaxSpindleTorqueSafetyFactor. public double MaxSpindleTorqueUtilizationFactor { get; set; } Property Value double MinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters. By the principle of conservation, if the value is different from the IFeedPerToothOptLimit.GetMinFeedPerTooth_mm(), The larger value will be applied in the optimization process. public double MinFeedPerTooth_mm { get; set; } Property Value double MinFeedrate_mmdmin Gets or sets the minimum feedrate in millimeters per minute. public double MinFeedrate_mmdmin { get; set; } Property Value double MinFeedrate_mmds Gets or sets the minimum feedrate in millimeters per second. The principle of conversation is applied for feedrate setting (MinFeedrate_mmds and MaxFeedrate_mmds) and feed per tooth setting (MinFeedPerTooth_mm and MaxFeedPerTooth_mm). If feed per tooth setting is not in the range of feedrate setting, The feedrate setting takes priority. public double MinFeedrate_mmds { get; set; } Property Value double PreferedForce_N Gets or sets the preferred force in Newtons. public double PreferedForce_N { get; set; } Property Value double RapidFeed_mmdmin Gets or sets the rapid feed rate in millimeters per minute. public double RapidFeed_mmdmin { get; set; } Property Value double RapidFeed_mmds Gets or sets the rapid feed rate in millimeters per second. public double RapidFeed_mmds { get; set; } Property Value double ThermalYieldSafetyFactor Gets or sets the safety factor for cutter thermal yield. public double ThermalYieldSafetyFactor { get; set; } Property Value double ThermalYieldUtilizationFactor Gets or sets the safety bound for cutter thermal yield. It is the reciprocal of ThermalYieldSafetyFactor. public double ThermalYieldUtilizationFactor { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string YieldingSafetyFactor Gets or sets the safety factor for yielding. By the principle of conservation, if the value is different from the MillingCutterOptOption.YieldingSafetyFactor, The larger value will be applied in the optimization process. public double YieldingSafetyFactor { get; set; } Property Value double YieldingUtilizationFactor Gets or sets the utilization factor for yielding. It is the reciprocal of YieldingSafetyFactor. public double YieldingUtilizationFactor { get; set; } Property Value double Methods CallPreferFuncIndexDictionary() Calls and returns the prefer function index dictionary, initializing it if it is null. public Dictionary, double> CallPreferFuncIndexDictionary() Returns Dictionary, double> The prefer function index dictionary. Duplicate() Creates a new instance of NcOptOption by duplicating the current instance. public NcOptOption Duplicate() Returns NcOptOption A new NcOptOption instance with the same values as the current instance. Equals(NcOptOption) Indicates whether the current object is equal to another object of the same type. public bool Equals(NcOptOption other) Parameters other NcOptOption 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. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcOpt.NcOptProc.html": { "href": "api/Hi.NcOpt.NcOptProc.html", "title": "Class NcOptProc | HiAPI-C# 2025", - "summary": "Class NcOptProc Namespace Hi.NcOpt Assembly HiNc.dll Provides functionality for optimizing NC programs by modifying feed rates and tool paths. public class NcOptProc : IMakeXmlSource Inheritance object NcOptProc 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 NcOptProc(SequentialBulkReader) Ctor. public NcOptProc(SequentialBulkReader millingStepLuggageReader) Parameters millingStepLuggageReader SequentialBulkReader NcOptProc(XElement, string, SequentialBulkReader) Ctor. public NcOptProc(XElement src, string baseDirectory, SequentialBulkReader millingStepLuggageReader) Parameters src XElement XML baseDirectory string Base directory path millingStepLuggageReader SequentialBulkReader Milling step luggage reader Properties CoreNum Parallel computation thread num. 0 is special number to use all cores. public static int CoreNum { get; set; } Property Value int EmbeddedLogMode Gets or sets the embedded log mode for NC optimization. public static NcOptimizationEmbeddedLogMode EmbeddedLogMode { get; set; } Property Value NcOptimizationEmbeddedLogMode EnableIndividualStepAdjustmentLog Enable create log file for building individual NcOptProc.StepAdjustment process. public static bool EnableIndividualStepAdjustmentLog { get; set; } Property Value bool XName Name for XML IO. 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. Optimize(ICuttingPara, MachiningSession, LinkedList, HardNcEnv, List, MachiningToolHouse, IProgress, CancellationToken, string, string) Optimizes NC lines based on cutting parameters and milling steps. public IEnumerable<(HardNcLine SrcNcLine, HardNcLine OptNcLine)> Optimize(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList srcNcLines, HardNcEnv ncEnv, List machiningSteps, MachiningToolHouse millingToolHouse, IProgress progress, CancellationToken cancellationToken, string baseDirectory, string relFileTemplate) Parameters millingPara ICuttingPara The cutting parameters for optimization. machiningSession MachiningSession The current machining session. srcNcLines LinkedList The source NC lines to optimize. ncEnv HardNcEnv The NC environment settings. machiningSteps List The list of milling steps. millingToolHouse MachiningToolHouse The machining tool house. progress IProgress The message host for logging. cancellationToken CancellationToken Cancellation token to cancel the operation. baseDirectory string The base directory for file operations. relFileTemplate string The relative file template for output. Returns IEnumerable<(HardNcLine SrcNcLine, HardNcLine OptNcLine)> Enumerable of source and optimized NC line pairs. OptimizeToFiles(ICuttingPara, MachiningSession, LinkedList, HardNcEnv, MachiningToolHouse, ClStrip, string, IProgress, CancellationToken, string) Optimizes NC lines and writes the results to files. public void OptimizeToFiles(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList ncLines, HardNcEnv ncEnv, MachiningToolHouse millingToolHouse, ClStrip clStrip, string baseDirectory, IProgress progress, CancellationToken cancellationToken, string relFileTemplate = \"Output/Opt-[NcName]\") Parameters millingPara ICuttingPara The cutting parameters for optimization machiningSession MachiningSession The current machining session ncLines LinkedList The NC lines to optimize ncEnv HardNcEnv The NC environment settings millingToolHouse MachiningToolHouse The machining tool house clStrip ClStrip The cutter location strip baseDirectory string The base directory for output files progress IProgress The message host for logging cancellationToken CancellationToken Cancellation token to cancel the operation relFileTemplate string The relative file template for output files" + "summary": "Class NcOptProc Namespace Hi.NcOpt Assembly HiNc.dll Provides functionality for optimizing NC programs by modifying feed rates and tool paths. public class NcOptProc : IMakeXmlSource Inheritance object NcOptProc 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 NcOptProc(SequentialBulkReader) Ctor. public NcOptProc(SequentialBulkReader millingStepLuggageReader) Parameters millingStepLuggageReader SequentialBulkReader NcOptProc(XElement, string, SequentialBulkReader) Ctor. public NcOptProc(XElement src, string baseDirectory, SequentialBulkReader millingStepLuggageReader) Parameters src XElement XML baseDirectory string Base directory path millingStepLuggageReader SequentialBulkReader Milling step luggage reader Properties CoreNum Parallel computation thread num. 0 is special number to use all cores. public static int CoreNum { get; set; } Property Value int EmbeddedLogMode Gets or sets the embedded log mode for NC optimization. public static NcOptimizationEmbeddedLogMode EmbeddedLogMode { get; set; } Property Value NcOptimizationEmbeddedLogMode EnableIndividualStepAdjustmentLog Enable create log file for building individual NcOptProc.StepAdjustment process. public static bool EnableIndividualStepAdjustmentLog { get; set; } Property Value bool XName Name for XML IO. 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. Optimize(ICuttingPara, MachiningSession, LinkedList, HardNcEnv, List, MachiningToolHouse, IProgress, CancellationToken, string, string) Optimizes NC lines based on cutting parameters and milling steps. public IEnumerable<(HardNcLine SrcNcLine, HardNcLine OptNcLine)> Optimize(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList srcNcLines, HardNcEnv ncEnv, List machiningSteps, MachiningToolHouse millingToolHouse, IProgress progress, CancellationToken cancellationToken, string baseDirectory, string relFileTemplate) Parameters millingPara ICuttingPara The cutting parameters for optimization. machiningSession MachiningSession The current machining session. srcNcLines LinkedList The source NC lines to optimize. ncEnv HardNcEnv The NC environment settings. machiningSteps List The list of milling steps. millingToolHouse MachiningToolHouse The machining tool house. progress IProgress The message host for logging. cancellationToken CancellationToken Cancellation token to cancel the operation. baseDirectory string The base directory for file operations. relFileTemplate string The relative file template for output. Returns IEnumerable<(HardNcLine SrcNcLine, HardNcLine OptNcLine)> Enumerable of source and optimized NC line pairs. OptimizeToFiles(ICuttingPara, MachiningSession, LinkedList, HardNcEnv, MachiningToolHouse, ClStrip, string, IProgress, CancellationToken, string) Optimizes NC lines and writes the results to files. public void OptimizeToFiles(ICuttingPara millingPara, MachiningSession machiningSession, LinkedList ncLines, HardNcEnv ncEnv, MachiningToolHouse millingToolHouse, ClStrip clStrip, string baseDirectory, IProgress progress, CancellationToken cancellationToken, string relFileTemplate = \"Output/Opt-[NcName]\") Parameters millingPara ICuttingPara The cutting parameters for optimization machiningSession MachiningSession The current machining session ncLines LinkedList The NC lines to optimize ncEnv HardNcEnv The NC environment settings millingToolHouse MachiningToolHouse The machining tool house clStrip ClStrip The cutter location strip baseDirectory string The base directory for output files progress IProgress The message host for logging cancellationToken CancellationToken Cancellation token to cancel the operation relFileTemplate string The relative file template for output files Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcOpt.NcOptimizationEmbeddedLogMode.html": { "href": "api/Hi.NcOpt.NcOptimizationEmbeddedLogMode.html", @@ -3507,7 +3507,7 @@ "api/Hi.NcOpt.ShapeBasedCutterOptLimit.html": { "href": "api/Hi.NcOpt.ShapeBasedCutterOptLimit.html", "title": "Class ShapeBasedCutterOptLimit | HiAPI-C# 2025", - "summary": "Class ShapeBasedCutterOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents optimization limits based on cutter shape parameters. public class ShapeBasedCutterOptLimit : IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IClearCache Inheritance object ShapeBasedCutterOptLimit Implements IFeedPerToothOptLimit IMakeXmlSource IDuplicate 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 ShapeBasedCutterOptLimit(MillingCutter) Initializes a new instance of the ShapeBasedCutterOptLimit class. public ShapeBasedCutterOptLimit(MillingCutter cutter) Parameters cutter MillingCutter The milling cutter. ShapeBasedCutterOptLimit(Func, Func, Func) Initializes a new instance of the ShapeBasedCutterOptLimit class. public ShapeBasedCutterOptLimit(Func fluteNumFunc, Func radiusFunc_mm, Func radialReliefAngleFunc_rad) Parameters fluteNumFunc Func Function to get the number of flutes radiusFunc_mm Func Function to get the radius in millimeters radialReliefAngleFunc_rad Func Function to get the radial relief angle in radians ShapeBasedCutterOptLimit(XElement, string, MillingCutter) Ctor. public ShapeBasedCutterOptLimit(XElement src, string baseDirectory, MillingCutter cutter) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths cutter MillingCutter The milling cutter to use for calculations Properties FluteNum Gets the number of flutes. public int FluteNum { get; } Property Value int FluteNumFunc Gets or sets the function to get the number of flutes. public Func FluteNumFunc { get; set; } Property Value Func MinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters. public double MinFeedPerTooth_mm { get; set; } Property Value double RadialReliefAngleFunc_rad Gets or sets the function to get the radial relief angle in radians. public Func RadialReliefAngleFunc_rad { get; set; } Property Value Func RadialReliefAngle_rad Gets or sets the radial relief angle in radians. public double RadialReliefAngle_rad { get; } Property Value double RadiusFunc_mm Gets or sets the function to get the radius in millimeters. public Func RadiusFunc_mm { get; set; } Property Value Func Radius_mm Gets or sets the radius in millimeters. public double Radius_mm { get; } Property Value double SafetyFactor Gets or sets the safety factor. public double SafetyFactor { get; set; } Property Value double 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(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 GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. 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 ShapeBasedCutterOptLimit Namespace Hi.NcOpt Assembly HiMech.dll Represents optimization limits based on cutter shape parameters. public class ShapeBasedCutterOptLimit : IFeedPerToothOptLimit, IMakeXmlSource, IDuplicate, IClearCache Inheritance object ShapeBasedCutterOptLimit Implements IFeedPerToothOptLimit IMakeXmlSource IDuplicate 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 ShapeBasedCutterOptLimit(MillingCutter) Initializes a new instance of the ShapeBasedCutterOptLimit class. public ShapeBasedCutterOptLimit(MillingCutter cutter) Parameters cutter MillingCutter The milling cutter. ShapeBasedCutterOptLimit(Func, Func, Func) Initializes a new instance of the ShapeBasedCutterOptLimit class. public ShapeBasedCutterOptLimit(Func fluteNumFunc, Func radiusFunc_mm, Func radialReliefAngleFunc_rad) Parameters fluteNumFunc Func Function to get the number of flutes radiusFunc_mm Func Function to get the radius in millimeters radialReliefAngleFunc_rad Func Function to get the radial relief angle in radians ShapeBasedCutterOptLimit(XElement, string, MillingCutter) Ctor. public ShapeBasedCutterOptLimit(XElement src, string baseDirectory, MillingCutter cutter) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths cutter MillingCutter The milling cutter to use for calculations Properties FluteNum Gets the number of flutes. public int FluteNum { get; } Property Value int FluteNumFunc Gets or sets the function to get the number of flutes. public Func FluteNumFunc { get; set; } Property Value Func MinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters. public double MinFeedPerTooth_mm { get; set; } Property Value double RadialReliefAngleFunc_rad Gets or sets the function to get the radial relief angle in radians. public Func RadialReliefAngleFunc_rad { get; set; } Property Value Func RadialReliefAngle_rad Gets or sets the radial relief angle in radians. public double RadialReliefAngle_rad { get; } Property Value double RadiusFunc_mm Gets or sets the function to get the radius in millimeters. public Func RadiusFunc_mm { get; set; } Property Value Func Radius_mm Gets or sets the radius in millimeters. public double Radius_mm { get; } Property Value double SafetyFactor Gets or sets the safety factor. public double SafetyFactor { get; set; } Property Value double 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(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 GetMaxFeedPerTooth_mm() Gets the maximum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MaxFeedPerTooth_mm, The smaller value will be applied in the optimization process. public double GetMaxFeedPerTooth_mm() Returns double The maximum feed per tooth value in millimeters. GetMinFeedPerTooth_mm() Gets the minimum feed per tooth value in millimeters. By the principle of conservation, if the value is different from the NcOptOption.MinFeedPerTooth_mm, The larger value will be applied in the optimization process. public double GetMinFeedPerTooth_mm() Returns double The minimum feed per tooth value in millimeters. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcOpt.html": { "href": "api/Hi.NcOpt.html", @@ -3522,7 +3522,7 @@ "api/Hi.NcParsers.Dependencys.CncBrandDependency.html": { "href": "api/Hi.NcParsers.Dependencys.CncBrandDependency.html", "title": "Class CncBrandDependency | HiAPI-C# 2025", - "summary": "Class CncBrandDependency Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Explicit CNC controller brand identifier carried in NcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. public class CncBrandDependency : INcDependency, IMakeXmlSource Inheritance object CncBrandDependency Implements 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 CncBrandDependency(string) Creates a dependency with the given brand string. public CncBrandDependency(string brand) Parameters brand string Controller brand name (often one of the public const tokens on this type). CncBrandDependency(XElement) Deserializes brand from XML. public CncBrandDependency(XElement src) Parameters src XElement Root element named XName. Fields Fanuc Brand token used when the controller is Fanuc. public const string Fanuc = \"Fanuc\" Field Value string Heidenhain Brand token used when the controller is Heidenhain. public const string Heidenhain = \"Heidenhain\" Field Value string Mazak Brand token used when the controller is Mazak. public const string Mazak = \"Mazak\" Field Value string Siemens Brand token used when the controller is Siemens. public const string Siemens = \"Siemens\" Field Value string Syntec Brand token used when the controller is Syntec. public const string Syntec = \"Syntec\" Field Value string Properties Brand CNC controller brand name (e.g., “Fanuc”, “Siemens”). public string Brand { get; set; } Property Value string XName XML element name for Generators registration. 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 CncBrandDependency Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Explicit CNC controller brand identifier carried in NcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. public class CncBrandDependency : INcDependency, IMakeXmlSource Inheritance object CncBrandDependency Implements 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 CncBrandDependency(string) Creates a dependency with the given brand string. public CncBrandDependency(string brand) Parameters brand string Controller brand name (often one of the public const tokens on this type). CncBrandDependency(XElement) Deserializes brand from XML. public CncBrandDependency(XElement src) Parameters src XElement Root element named XName. Fields Fanuc Brand token used when the controller is Fanuc. public const string Fanuc = \"Fanuc\" Field Value string Heidenhain Brand token used when the controller is Heidenhain. public const string Heidenhain = \"Heidenhain\" Field Value string Mazak Brand token used when the controller is Mazak. public const string Mazak = \"Mazak\" Field Value string Siemens Brand token used when the controller is Siemens. public const string Siemens = \"Siemens\" Field Value string Syntec Brand token used when the controller is Syntec. public const string Syntec = \"Syntec\" Field Value string Properties Brand CNC controller brand name (e.g., “Fanuc”, “Siemens”). public string Brand { get; set; } Property Value string XName XML element name for Generators registration. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html": { "href": "api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html", @@ -3537,52 +3537,52 @@ "api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html", "title": "Class FanucGotoIterationDependency | HiAPI-C# 2025", - "summary": "Class FanucGotoIterationDependency Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Watchdog for Fanuc Custom Macro B GOTO loops. Holds a MaxIterationsPerTarget limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter (CountByTarget — not serialised, cleared at session start by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken)). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in Hi.NcParsers.Dependencys.Fanuc rather than Hi.NcParsers.Dependencys.SystemWired because nothing outside the syntax pipeline writes it; Reset() is a plain method call the runner invokes, not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on FilePath — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default MaxIterationsPerTarget is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML. public class FanucGotoIterationDependency : INcDependency, IMakeXmlSource Inheritance object FanucGotoIterationDependency Implements 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 FanucGotoIterationDependency() Initializes a new instance with the default limit and an empty counter. public FanucGotoIterationDependency() FanucGotoIterationDependency(XElement) Loads MaxIterationsPerTarget from XML produced by MakeXmlSource(string, string, bool); absent element falls back to DefaultMaxIterationsPerTarget. public FanucGotoIterationDependency(XElement src) Parameters src XElement Root element named XName. Fields DefaultMaxIterationsPerTarget Default for MaxIterationsPerTarget. Sized as a runaway-loop guard: legitimate Fanuc macros (drill grids, calibration sweeps) stay well below, while truly unbounded loops hit it fast. public const int DefaultMaxIterationsPerTarget = 1000 Field Value int Properties CountByTarget Per-target hit counter keyed by (FileName, TargetN). Runtime-only; not serialised. Cleared by Reset() on the session-init edge so a brand-preset runner reused across sessions does not leak counts. public Dictionary<(string FileName, int TargetN), int> CountByTarget { get; } Property Value Dictionary<(string FileName, int TargetN), int> MaxIterationsPerTarget Soft cap on consecutive fires of any single GOTO target within one source file (see CountByTarget for the keying). Above this, the consuming syntax should emit a warning and suppress the redirect on the over-limit block; subsequent blocks flow through naturally. public int MaxIterationsPerTarget { 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 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. Reset() Clears CountByTarget; leaves MaxIterationsPerTarget untouched. public void Reset()" + "summary": "Class FanucGotoIterationDependency Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Watchdog for Fanuc Custom Macro B GOTO loops. Holds a MaxIterationsPerTarget limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter (CountByTarget — not serialised, cleared at session start by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken)). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in Hi.NcParsers.Dependencys.Fanuc rather than Hi.NcParsers.Dependencys.SystemWired because nothing outside the syntax pipeline writes it; Reset() is a plain method call the runner invokes, not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on FilePath — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default MaxIterationsPerTarget is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML. public class FanucGotoIterationDependency : INcDependency, IMakeXmlSource Inheritance object FanucGotoIterationDependency Implements 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 FanucGotoIterationDependency() Initializes a new instance with the default limit and an empty counter. public FanucGotoIterationDependency() FanucGotoIterationDependency(XElement) Loads MaxIterationsPerTarget from XML produced by MakeXmlSource(string, string, bool); absent element falls back to DefaultMaxIterationsPerTarget. public FanucGotoIterationDependency(XElement src) Parameters src XElement Root element named XName. Fields DefaultMaxIterationsPerTarget Default for MaxIterationsPerTarget. Sized as a runaway-loop guard: legitimate Fanuc macros (drill grids, calibration sweeps) stay well below, while truly unbounded loops hit it fast. public const int DefaultMaxIterationsPerTarget = 1000 Field Value int Properties CountByTarget Per-target hit counter keyed by (FileName, TargetN). Runtime-only; not serialised. Cleared by Reset() on the session-init edge so a brand-preset runner reused across sessions does not leak counts. public Dictionary<(string FileName, int TargetN), int> CountByTarget { get; } Property Value Dictionary<(string FileName, int TargetN), int> MaxIterationsPerTarget Soft cap on consecutive fires of any single GOTO target within one source file (see CountByTarget for the keying). Above this, the consuming syntax should emit a warning and suppress the redirect on the over-limit block; subsequent blocks flow through naturally. public int MaxIterationsPerTarget { 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 XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Reset() Clears CountByTarget; leaves MaxIterationsPerTarget untouched. public void Reset()" }, "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() 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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, IMakeXmlSource Inheritance object FanucPositionVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource 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) Constructors FanucPositionVariableLookup() Default constructor. public FanucPositionVariableLookup() FanucPositionVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public FanucPositionVariableLookup(XElement src) Parameters src XElement 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 Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? 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 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, IMakeXmlSource Inheritance object FanucPositionVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource 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) Constructors FanucPositionVariableLookup() Default constructor. public FanucPositionVariableLookup() FanucPositionVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public FanucPositionVariableLookup(XElement src) Parameters src XElement 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 Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html", "title": "Class FanucToolOffsetVariableLookup | HiAPI-C# 2025", - "summary": "Class FanucToolOffsetVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-side adapter that exposes a wrapped ToolOffsetTable (resolved at call time from the dependency list) as an IRuntimeVariableLookup 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. Stateless: holds no reference of its own and resolves the table from the per-call dependencies list, so XML round-trip is trivial (an empty element). Registered on a brand preset's VariableEvaluatorSyntax.RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in NcDependencyList as the data dependency. public sealed class FanucToolOffsetVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object FanucToolOffsetVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource 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) Constructors FanucToolOffsetVariableLookup() Default constructor. public FanucToolOffsetVariableLookup() FanucToolOffsetVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public FanucToolOffsetVariableLookup(XElement src) Parameters src XElement Fields ToolHeightMax Inclusive upper bound of the Fanuc tool height address range (#2200). public const int ToolHeightMax = 2200 Field Value int ToolHeightMin Inclusive lower bound of the Fanuc tool height address range (#2001). public const int ToolHeightMin = 2001 Field Value int Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? Remarks Routes #2001-#2200 to GetToolHeightOffset_mm(int) on the ToolOffsetTable found in dependencies; other keys return null so the evaluator's lookup chain falls through. 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 FanucToolOffsetVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-side adapter that exposes a wrapped ToolOffsetTable (resolved at call time from the dependency list) as an IRuntimeVariableLookup 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. Stateless: holds no reference of its own and resolves the table from the per-call dependencies list, so XML round-trip is trivial (an empty element). Registered on a brand preset's RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in NcDependencyList as the data dependency. public sealed class FanucToolOffsetVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object FanucToolOffsetVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource 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) Constructors FanucToolOffsetVariableLookup() Default constructor. public FanucToolOffsetVariableLookup() FanucToolOffsetVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public FanucToolOffsetVariableLookup(XElement src) Parameters src XElement Fields ToolHeightMax Inclusive upper bound of the Fanuc tool height address range (#2200). public const int ToolHeightMax = 2200 Field Value int ToolHeightMin Inclusive lower bound of the Fanuc tool height address range (#2001). public const int ToolHeightMin = 2001 Field Value int Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? Remarks Routes #2001-#2200 to GetToolHeightOffset_mm(int) on the ToolOffsetTable found in dependencies; other keys return null so the evaluator's lookup chain falls through. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html", "title": "Class RetainedCommonVariableTable | HiAPI-C# 2025", - "summary": "Class RetainedCommonVariableTable Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll 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. public class RetainedCommonVariableTable : INcDependency, IMakeXmlSource, IVariableLookup Inheritance object RetainedCommonVariableTable Implements INcDependency IMakeXmlSource IVariableLookup 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 RetainedCommonVariableTable() Empty table. public RetainedCommonVariableTable() RetainedCommonVariableTable(XElement) Loads from XML produced by MakeXmlSource(string, string, bool). public RetainedCommonVariableTable(XElement src) Parameters src XElement Fields RetainedCommonMax Inclusive upper bound of the retained common range (#999). public const int RetainedCommonMax = 999 Field Value int RetainedCommonMin Inclusive lower bound of the retained common range (#500). public const int RetainedCommonMin = 500 Field Value int Properties Variables Backing store. Key = variable number (e.g. 500). Value null = vacant. A missing key is also treated as vacant. Keys are constrained to RetainedCommonMin..RetainedCommonMax; out-of-range writes are silently ignored. public Dictionary Variables { get; set; } Property Value Dictionary XName XML element name. 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 #500-#999 reads to GetVariable(int); other keys return null so the evaluator's lookup chain falls through. GetVariable(int) Reads a retained common variable. Returns null for vacant (either the entry is absent or stored as null). public double? GetVariable(int id) Parameters id int Variable number in RetainedCommonMin..RetainedCommonMax. 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. SetVariable(int, double?) Writes a retained common variable. Pass null to set vacant. Ignores ids outside RetainedCommonMin..RetainedCommonMax. public void SetVariable(int id, double? value) Parameters id int Variable number. value double? New value, or null for vacant." + "summary": "Class RetainedCommonVariableTable Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll 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. public class RetainedCommonVariableTable : INcDependency, IMakeXmlSource, IVariableLookup Inheritance object RetainedCommonVariableTable Implements INcDependency IMakeXmlSource IVariableLookup 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 RetainedCommonVariableTable() Empty table. public RetainedCommonVariableTable() RetainedCommonVariableTable(XElement) Loads from XML produced by MakeXmlSource(string, string, bool). public RetainedCommonVariableTable(XElement src) Parameters src XElement Fields RetainedCommonMax Inclusive upper bound of the retained common range (#999). public const int RetainedCommonMax = 999 Field Value int RetainedCommonMin Inclusive lower bound of the retained common range (#500). public const int RetainedCommonMin = 500 Field Value int Properties Variables Backing store. Key = variable number (e.g. 500). Value null = vacant. A missing key is also treated as vacant. Keys are constrained to RetainedCommonMin..RetainedCommonMax; out-of-range writes are silently ignored. public Dictionary Variables { get; set; } Property Value Dictionary XName XML element name. 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 #500-#999 reads to GetVariable(int); other keys return null so the evaluator's lookup chain falls through. GetVariable(int) Reads a retained common variable. Returns null for vacant (either the entry is absent or stored as null). public double? GetVariable(int id) Parameters id int Variable number in RetainedCommonMin..RetainedCommonMax. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory SetVariable(int, double?) Writes a retained common variable. Pass null to set vacant. Ignores ids outside RetainedCommonMin..RetainedCommonMax. public void SetVariable(int id, double? value) Parameters id int Variable number. value double? New value, or null for vacant." }, "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 FanucGotoIterationDependency Watchdog for Fanuc Custom Macro B GOTO loops. Holds a MaxIterationsPerTarget limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter (CountByTarget — not serialised, cleared at session start by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken)). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in Hi.NcParsers.Dependencys.Fanuc rather than Hi.NcParsers.Dependencys.SystemWired because nothing outside the syntax pipeline writes it; Reset() is a plain method call the runner invokes, not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on FilePath — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default MaxIterationsPerTarget is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML. 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 (resolved at call time from the dependency list) as an IRuntimeVariableLookup 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. Stateless: holds no reference of its own and resolves the table from the per-call dependencies list, so XML round-trip is trivial (an empty element). Registered on a brand preset's VariableEvaluatorSyntax.RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in NcDependencyList as the data dependency. 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 FanucGotoIterationDependency Watchdog for Fanuc Custom Macro B GOTO loops. Holds a MaxIterationsPerTarget limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter (CountByTarget — not serialised, cleared at session start by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken)). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in Hi.NcParsers.Dependencys.Fanuc rather than Hi.NcParsers.Dependencys.SystemWired because nothing outside the syntax pipeline writes it; Reset() is a plain method call the runner invokes, not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on FilePath — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default MaxIterationsPerTarget is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML. 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 (resolved at call time from the dependency list) as an IRuntimeVariableLookup 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. Stateless: holds no reference of its own and resolves the table from the per-call dependencies list, so XML round-trip is trivial (an empty element). Registered on a brand preset's RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in NcDependencyList as the data dependency. 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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", "title": "Class IsoCoordinateTable | HiAPI-C# 2025", - "summary": "Class IsoCoordinateTable Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Coordinate table for NC controller. The dictionary key is a G-code coordinate name (e.g. “G54”, “G59.2”); the dictionary value is machine coordinate offset. Brand-agnostic standalone implementation of IIsoCoordinateConfig. Brand parameter tables (Fanuc, Syntec, Siemens, Heidenhain) provide hardware-faithful alternatives that map to real controller parameters. public class IsoCoordinateTable : Dictionary, IDictionary, ICollection>, IReadOnlyDictionary, IReadOnlyCollection>, IEnumerable>, IDictionary, ICollection, IEnumerable, IDeserializationCallback, ISerializable, IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object Dictionary IsoCoordinateTable Implements IDictionary ICollection> IReadOnlyDictionary IReadOnlyCollection> IEnumerable> IDictionary ICollection IEnumerable IDeserializationCallback ISerializable IIsoCoordinateConfig INcDependency IMakeXmlSource Inherited Members Dictionary.Add(string, Vec3d) Dictionary.Clear() Dictionary.ContainsKey(string) Dictionary.ContainsValue(Vec3d) Dictionary.EnsureCapacity(int) Dictionary.GetAlternateLookup() Dictionary.GetEnumerator() Dictionary.OnDeserialization(object) Dictionary.Remove(string) Dictionary.Remove(string, out Vec3d) Dictionary.TrimExcess() Dictionary.TrimExcess(int) Dictionary.TryAdd(string, Vec3d) Dictionary.TryGetAlternateLookup(out Dictionary.AlternateLookup) Dictionary.TryGetValue(string, out Vec3d) Dictionary.Comparer Dictionary.Count Dictionary.Capacity Dictionary.this[string] Dictionary.Keys Dictionary.Values 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) DictionaryUtil.Retrieve(Dictionary, K, out V, bool) DictionaryUtil.GetOrCreate(IDictionary, TKey) DictionaryUtil.GetOrCreate(IDictionary, TKey, TValue) DictionaryUtil.GetOrCreate(IDictionary, TKey, Func) DictionaryUtil.TryGetValueByKeys(IDictionary, IEnumerable, out TValue) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoCoordinateTable() Ctor. public IsoCoordinateTable() IsoCoordinateTable(XElement) Initializes a new instance of the IsoCoordinateTable class from XML. Supports both new string ID format (“G54”) and legacy integer format (54000). public IsoCoordinateTable(XElement src) Parameters src XElement The XML element containing coordinate data. Fields XName Gets the XML element name for the IsoCoordinateTable. public static string XName Field Value string Properties CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable 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 LegacyIntToKey(int) Converts a legacy 1000x integer ID to a G-code string key. e.g. 54000 -> “G54”, 59200 -> “G59.2”. public static string LegacyIntToKey(int id) Parameters id int Returns string 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 IsoCoordinateTable Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Coordinate table for NC controller. The dictionary key is a G-code coordinate name (e.g. “G54”, “G59.2”); the dictionary value is machine coordinate offset. Brand-agnostic standalone implementation of IIsoCoordinateConfig. Brand parameter tables (Fanuc, Syntec, Siemens, Heidenhain) provide hardware-faithful alternatives that map to real controller parameters. public class IsoCoordinateTable : Dictionary, IDictionary, ICollection>, IReadOnlyDictionary, IReadOnlyCollection>, IEnumerable>, IDictionary, ICollection, IEnumerable, IDeserializationCallback, ISerializable, IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object Dictionary IsoCoordinateTable Implements IDictionary ICollection> IReadOnlyDictionary IReadOnlyCollection> IEnumerable> IDictionary ICollection IEnumerable IDeserializationCallback ISerializable IIsoCoordinateConfig INcDependency IMakeXmlSource Inherited Members Dictionary.Add(string, Vec3d) Dictionary.Clear() Dictionary.ContainsKey(string) Dictionary.ContainsValue(Vec3d) Dictionary.EnsureCapacity(int) Dictionary.GetAlternateLookup() Dictionary.GetEnumerator() Dictionary.OnDeserialization(object) Dictionary.Remove(string) Dictionary.Remove(string, out Vec3d) Dictionary.TrimExcess() Dictionary.TrimExcess(int) Dictionary.TryAdd(string, Vec3d) Dictionary.TryGetAlternateLookup(out Dictionary.AlternateLookup) Dictionary.TryGetValue(string, out Vec3d) Dictionary.Comparer Dictionary.Count Dictionary.Capacity Dictionary.this[string] Dictionary.Keys Dictionary.Values 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) DictionaryUtil.Retrieve(Dictionary, K, out V, bool) DictionaryUtil.GetOrCreate(IDictionary, TKey) DictionaryUtil.GetOrCreate(IDictionary, TKey, TValue) DictionaryUtil.GetOrCreate(IDictionary, TKey, Func) DictionaryUtil.TryGetValueByKeys(IDictionary, IEnumerable, out TValue) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoCoordinateTable() Ctor. public IsoCoordinateTable() IsoCoordinateTable(XElement) Initializes a new instance of the IsoCoordinateTable class from XML. Supports both new string ID format (“G54”) and legacy integer format (54000). public IsoCoordinateTable(XElement src) Parameters src XElement The XML element containing coordinate data. Fields XName Gets the XML element name for the IsoCoordinateTable. public static string XName Field Value string Properties CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable 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 LegacyIntToKey(int) Converts a legacy 1000x integer ID to a G-code string key. e.g. 54000 -> “G54”, 59200 -> “G59.2”. public static string LegacyIntToKey(int id) Parameters id int Returns string MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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.Generic.SubProgramFolderConfig.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html", "title": "Class SubProgramFolderConfig | HiAPI-C# 2025", - "summary": "Class SubProgramFolderConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Folder lookup configuration for SubProgramCallSyntax: where to find an O file when the host program executes M98 P_ L_ (InternalFolder) or M198 P_ (ExternalFolder, modelling Fanuc's external storage call — memory card, USB, DNC drive — whose only difference from M98 is the search root). Either path may be absolute or relative; when relative, it resolves against the host file's parent directory at lookup time. Either may be null — a null ExternalFolder falls back to InternalFolder; a null InternalFolder falls back to the host file's parent directory. public class SubProgramFolderConfig : INcDependency, IMakeXmlSource Inheritance object SubProgramFolderConfig Implements 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 SubProgramFolderConfig() Initializes a new instance with the default “NC” internal folder and null external folder. public SubProgramFolderConfig() SubProgramFolderConfig(XElement) Loads InternalFolder / ExternalFolder from XML produced by MakeXmlSource(string, string, bool); either child element may be absent. public SubProgramFolderConfig(XElement src) Parameters src XElement Root element named XName. Properties ExternalFolder Folder for M198 P_ lookup, modelling Fanuc's “subprogram on external storage” semantics. Absolute or relative. Null means “fall back to InternalFolder” — a simulator-friendly default for projects that don't actually distinguish internal vs external storage on disk. public string ExternalFolder { get; set; } Property Value string InternalFolder Folder for M98 P_ lookup. Absolute or relative; relative is resolved against the host file's parent directory at use time. Null means “use the host file's parent directory directly”. Default “NC” mirrors a typical project layout where the main program sits beside an NC/ subdirectory of subprograms. public string InternalFolder { 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 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 SubProgramFolderConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Folder lookup configuration for SubProgramCallSyntax: where to find an O file when the host program executes M98 P_ L_ (InternalFolder) or M198 P_ (ExternalFolder, modelling Fanuc's external storage call — memory card, USB, DNC drive — whose only difference from M98 is the search root). Either path may be absolute or relative; when relative, it resolves against the host file's parent directory at lookup time. Either may be null — a null ExternalFolder falls back to InternalFolder; a null InternalFolder falls back to the host file's parent directory. public class SubProgramFolderConfig : INcDependency, IMakeXmlSource Inheritance object SubProgramFolderConfig Implements 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 SubProgramFolderConfig() Initializes a new instance with the default “NC” internal folder and null external folder. public SubProgramFolderConfig() SubProgramFolderConfig(XElement) Loads InternalFolder / ExternalFolder from XML produced by MakeXmlSource(string, string, bool); either child element may be absent. public SubProgramFolderConfig(XElement src) Parameters src XElement Root element named XName. Properties ExternalFolder Folder for M198 P_ lookup, modelling Fanuc's “subprogram on external storage” semantics. Absolute or relative. Null means “fall back to InternalFolder” — a simulator-friendly default for projects that don't actually distinguish internal vs external storage on disk. public string ExternalFolder { get; set; } Property Value string InternalFolder Folder for M98 P_ lookup. Absolute or relative; relative is resolved against the host file's parent directory at use time. Null means “use the host file's parent directory directly”. Default “NC” mirrors a typical project layout where the main program sits beside an NC/ subdirectory of subprograms. public string InternalFolder { 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 MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html", @@ -3592,12 +3592,12 @@ "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() 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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() 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -3607,7 +3607,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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.Heidenhain.html": { "href": "api/Hi.NcParsers.Dependencys.Heidenhain.html", @@ -3617,7 +3617,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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -3687,12 +3687,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() 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.Siemens.html": { "href": "api/Hi.NcParsers.Dependencys.Siemens.html", @@ -3702,7 +3702,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() 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -3712,27 +3712,27 @@ "api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html": { "href": "api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html", "title": "Class FileIndexCounterDependency | HiAPI-C# 2025", - "summary": "Class FileIndexCounterDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Per-session monotonically-increasing file index allocator. Holds the counter as a private field; Allocate() returns the next unused value and increments. Reset() rewinds to 0 — the owning RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls Reset() on the same edge that initializes a fresh NcRunnerSessionState, so a controller power-reset clears both the syntax-piece pipeline and this counter in lock-step. Two consumers share one allocator: RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) allocates one index per top-level NC file that streams through the runner. SubProgramCallSyntax allocates a fresh index for each inlined subprogram invocation, including each L repetition — distinct indices ensure (FileIndex, LineIndex) pairs stay unique across overlapping subprogram line ranges. Holding the counter on this dependency rather than on NcRunnerSessionState avoids a duplicate source-of-truth: the dep is the single seam through which syntaxes reach the counter, and there is no third reader that would benefit from session-state visibility. public class FileIndexCounterDependency : INcDependency, IMakeXmlSource Inheritance object FileIndexCounterDependency Implements 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 FileIndexCounterDependency() Initializes a new instance with the counter at 0. public FileIndexCounterDependency() Properties XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods Allocate() Returns the next unused file index and post-increments the counter. First call after construction or Reset() returns 0. public int Allocate() Returns int MakeXmlSource(string, string, bool) Runtime-only dependency — the live counter value is per-session and not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip with the counter implicitly reset to 0. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement Reset() Rewinds the counter to 0. Called by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) on the same edge that initializes a fresh session pipeline so a single brand-preset runner can be reused across sessions without leaking file indices from the previous session. public void Reset()" + "summary": "Class FileIndexCounterDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Per-session monotonically-increasing file index allocator. Holds the counter as a private field; Allocate() returns the next unused value and increments. Reset() rewinds to 0 — the owning RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls Reset() on the same edge that initializes a fresh NcRunnerSessionState, so a controller power-reset clears both the syntax-piece pipeline and this counter in lock-step. Two consumers share one allocator: RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) allocates one index per top-level NC file that streams through the runner. SubProgramCallSyntax allocates a fresh index for each inlined subprogram invocation, including each L repetition — distinct indices ensure (FileIndex, LineIndex) pairs stay unique across overlapping subprogram line ranges. Holding the counter on this dependency rather than on NcRunnerSessionState avoids a duplicate source-of-truth: the dep is the single seam through which syntaxes reach the counter, and there is no third reader that would benefit from session-state visibility. public class FileIndexCounterDependency : INcDependency, IMakeXmlSource Inheritance object FileIndexCounterDependency Implements 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 FileIndexCounterDependency() Initializes a new instance with the counter at 0. public FileIndexCounterDependency() Properties XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods Allocate() Returns the next unused file index and post-increments the counter. First call after construction or Reset() returns 0. public int Allocate() Returns int MakeXmlSource(string, string, bool) Runtime-only dependency — the live counter value is per-session and not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip with the counter implicitly reset to 0. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Reset() Rewinds the counter to 0. Called by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) on the same edge that initializes a fresh session pipeline so a single brand-preset runner can be reused across sessions without leaking file indices from the previous session. public void Reset()" }, "api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html": { "href": "api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html", "title": "Class NcKinematicsDependency | HiAPI-C# 2025", - "summary": "Class NcKinematicsDependency Namespace Hi.NcParsers.Dependencys.SystemWired 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" + "summary": "Class NcKinematicsDependency Namespace Hi.NcParsers.Dependencys.SystemWired 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 Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html": { "href": "api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html", "title": "Class ProjectFolderDependency | HiAPI-C# 2025", - "summary": "Class ProjectFolderDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Exposes the absolute base directory of the project that owns this runner. Resolved at runtime via BaseDirectoryProvider; the host (e.g. LocalProjectService, a test harness) wires the provider to its known project root after the runner is constructed, because SoftNcRunner itself does not retain the baseDirectory argument it sees during XML deserialization. Consumed by syntaxes that need to resolve a project-relative path to an absolute file system location — e.g. SubProgramCallSyntax for O subprogram lookup under InternalFolder. Reading FilePath is not a substitute: that path is relative and resolving it via Path.GetFullPath would anchor against the process working directory, not the project root. public class ProjectFolderDependency : INcDependency, IMakeXmlSource Inheritance object ProjectFolderDependency Implements 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 ProjectFolderDependency() Initializes a new instance with no BaseDirectoryProvider; the host assigns one before queries. public ProjectFolderDependency() ProjectFolderDependency(Func) Initializes a new instance with the given BaseDirectoryProvider. public ProjectFolderDependency(Func provider) Parameters provider Func Delegate that resolves the absolute base directory at lookup time. Properties BaseDirectory The live absolute base directory, or null when BaseDirectoryProvider is unset or returns null. public string BaseDirectory { get; } Property Value string BaseDirectoryProvider Runtime provider for the absolute project base directory. Public so cross-assembly hosts (e.g. LocalProjectService in HiNc) can wire it after the runner is constructed — same host-wired posture as KinematicsProvider. Null provider or null return means the host has not configured a base directory yet — consumers should treat this as a configuration error and surface a diagnostic rather than silently falling back. public Func BaseDirectoryProvider { 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) Runtime-only dependency — the BaseDirectoryProvider is wired per-host and is not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement" + "summary": "Class ProjectFolderDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Exposes the absolute base directory of the project that owns this runner. Resolved at runtime via BaseDirectoryProvider; the host (e.g. LocalProjectService, a test harness) wires the provider to its known project root after the runner is constructed, because SoftNcRunner itself does not retain the baseDirectory argument it sees during XML deserialization. Consumed by syntaxes that need to resolve a project-relative path to an absolute file system location — e.g. SubProgramCallSyntax for O subprogram lookup under InternalFolder. Reading FilePath is not a substitute: that path is relative and resolving it via Path.GetFullPath would anchor against the process working directory, not the project root. public class ProjectFolderDependency : INcDependency, IMakeXmlSource Inheritance object ProjectFolderDependency Implements 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 ProjectFolderDependency() Initializes a new instance with no BaseDirectoryProvider; the host assigns one before queries. public ProjectFolderDependency() ProjectFolderDependency(Func) Initializes a new instance with the given BaseDirectoryProvider. public ProjectFolderDependency(Func provider) Parameters provider Func Delegate that resolves the absolute base directory at lookup time. Properties BaseDirectory The live absolute base directory, or null when BaseDirectoryProvider is unset or returns null. public string BaseDirectory { get; } Property Value string BaseDirectoryProvider Runtime provider for the absolute project base directory. Public so cross-assembly hosts (e.g. LocalProjectService in HiNc) can wire it after the runner is constructed — same host-wired posture as KinematicsProvider. Null provider or null return means the host has not configured a base directory yet — consumers should treat this as a configuration error and surface a diagnostic rather than silently falling back. public Func BaseDirectoryProvider { 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) Runtime-only dependency — the BaseDirectoryProvider is wired per-host and is not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html": { "href": "api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html", "title": "Class SegmenterDependency | HiAPI-C# 2025", - "summary": "Class SegmenterDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Exposes the active ISegmenter to syntaxes that need to re-segment auxiliary NC text mid-pipeline (e.g., SubProgramCallSyntax reading an O subprogram file and re-using the host runner's segmenter so the inlined blocks are split with the same rules). The actual segmenter is resolved at runtime via Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider; RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) wires the provider to its own Segmenter at the start of each session run, so this dependency can sit in NcDependencyList without participating in XML serialization (see MakeXmlSource(string, string, bool)). public class SegmenterDependency : INcDependency, IMakeXmlSource Inheritance object SegmenterDependency Implements 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 SegmenterDependency() Initializes a new instance with no Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider; the host runner assigns one before queries. public SegmenterDependency() SegmenterDependency(Func) Initializes a new instance with the given Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider. public SegmenterDependency(Func provider) Parameters provider Func Delegate that resolves the live ISegmenter at lookup time. Properties Segmenter The live segmenter, or null when Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider is unset or returns null. public ISegmenter Segmenter { get; } Property Value ISegmenter XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Runtime-only dependency — the Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider is wired per session and is not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement" + "summary": "Class SegmenterDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Exposes the active ISegmenter to syntaxes that need to re-segment auxiliary NC text mid-pipeline (e.g., SubProgramCallSyntax reading an O subprogram file and re-using the host runner's segmenter so the inlined blocks are split with the same rules). The actual segmenter is resolved at runtime via Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider; RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) wires the provider to its own Segmenter at the start of each session run, so this dependency can sit in NcDependencyList without participating in XML serialization (see MakeXmlSource(string, string, bool)). public class SegmenterDependency : INcDependency, IMakeXmlSource Inheritance object SegmenterDependency Implements 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 SegmenterDependency() Initializes a new instance with no Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider; the host runner assigns one before queries. public SegmenterDependency() SegmenterDependency(Func) Initializes a new instance with the given Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider. public SegmenterDependency(Func provider) Parameters provider Func Delegate that resolves the live ISegmenter at lookup time. Properties Segmenter The live segmenter, or null when Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider is unset or returns null. public ISegmenter Segmenter { get; } Property Value ISegmenter XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Runtime-only dependency — the Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.SegmenterProvider is wired per session and is not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html": { "href": "api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html", "title": "Class SyntaxPieceLayerDependency | HiAPI-C# 2025", - "summary": "Class SyntaxPieceLayerDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Exposes the per-session SyntaxPiece layer chain (one LazyLinkedList per pipeline stage, owned by NcRunnerSessionState) to syntaxes that need to inject additional source pieces mid-pipeline — most notably SubProgramCallSyntax, which inlines a subprogram file's blocks back into layers[0] immediately after the M98 host node so the entire syntax pipeline naturally re-processes them. The actual layer list is resolved at runtime via Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider; RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) wires the provider to the active session's SyntaxPieceLayers at the start of each call. Index 0 is the source layer (init seed + sentence-derived pieces); indices 1..N are post-NcSyntax layers — same convention as NcRunnerSessionState. public class SyntaxPieceLayerDependency : INcDependency, IMakeXmlSource Inheritance object SyntaxPieceLayerDependency Implements 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 SyntaxPieceLayerDependency() Initializes a new instance with no Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider; the host runner assigns one before queries. public SyntaxPieceLayerDependency() SyntaxPieceLayerDependency(Func>>) Initializes a new instance with the given Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider. public SyntaxPieceLayerDependency(Func>> provider) Parameters provider Func>> Delegate that resolves the live layer chain at lookup time. Properties Layers The live layer chain, or null when Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider is unset or returns null. Layer 0 is the source layer; layers 1..N are post-NcSyntax layers. public List> Layers { get; } Property Value List> XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Runtime-only dependency — the Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider is wired per session and is not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement" + "summary": "Class SyntaxPieceLayerDependency Namespace Hi.NcParsers.Dependencys.SystemWired Assembly HiMech.dll Exposes the per-session SyntaxPiece layer chain (one LazyLinkedList per pipeline stage, owned by NcRunnerSessionState) to syntaxes that need to inject additional source pieces mid-pipeline — most notably SubProgramCallSyntax, which inlines a subprogram file's blocks back into layers[0] immediately after the M98 host node so the entire syntax pipeline naturally re-processes them. The actual layer list is resolved at runtime via Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider; RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) wires the provider to the active session's SyntaxPieceLayers at the start of each call. Index 0 is the source layer (init seed + sentence-derived pieces); indices 1..N are post-NcSyntax layers — same convention as NcRunnerSessionState. public class SyntaxPieceLayerDependency : INcDependency, IMakeXmlSource Inheritance object SyntaxPieceLayerDependency Implements 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 SyntaxPieceLayerDependency() Initializes a new instance with no Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider; the host runner assigns one before queries. public SyntaxPieceLayerDependency() SyntaxPieceLayerDependency(Func>>) Initializes a new instance with the given Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider. public SyntaxPieceLayerDependency(Func>> provider) Parameters provider Func>> Delegate that resolves the live layer chain at lookup time. Properties Layers The live layer chain, or null when Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider is unset or returns null. Layer 0 is the source layer; layers 1..N are post-NcSyntax layers. public List> Layers { get; } Property Value List> XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Runtime-only dependency — the Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.LayersProvider is wired per session and is not meaningful to persist; serialization writes only the empty element so the dependency survives an XML round-trip. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string relFile string exhibitionOnly bool Returns XElement Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Dependencys.SystemWired.html": { "href": "api/Hi.NcParsers.Dependencys.SystemWired.html", @@ -3767,7 +3767,7 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html", "title": "Class LocalVariableLookup | HiAPI-C# 2025", - "summary": "Class LocalVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current SyntaxPiece JSON, falling back to the immediately previous block when they share the same MacroFrame id. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Two-step lookup (mirrors VolatileVariableLookup): the current block sees writes that FanucMacroCallSyntax stamped at inline time (the call-line argument bindings) and writes that FanucLocalVariableReadingSyntax applied on this block before the lookup runs; the previous block (frame-checked) supplies body-internal writes from the prior block in the same macro frame. Looking past the previous block is unnecessary because the reader carries forward block-by-block within a frame. Frame isolation via MacroFrame: a previous block whose frame id differs from the current block's is skipped — a macro body's body-internal locals are invisible to the caller after return, and the caller's main-frame locals are invisible inside the macro. M98/M198 subprogram inlining (SubProgramCallSyntax) deliberately does not stamp MacroFrame on its inlined blocks, so the callee inherits the caller's frame and sees the caller's locals — matching real Fanuc M98 semantics. Stateless and dependency-free — instances are interchangeable. public class LocalVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object LocalVariableLookup Implements IRuntimeVariableLookup 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 LocalVariableLookup() Default constructor. public LocalVariableLookup() LocalVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public LocalVariableLookup(XElement src) Parameters src XElement Fields LocalMax Inclusive upper bound of the macro-local range (#33). public const int LocalMax = 33 Field Value int LocalMin Inclusive lower bound of the macro-local range (#1). public const int LocalMin = 1 Field Value int Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? 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 LocalVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current SyntaxPiece JSON, falling back to the immediately previous block when they share the same MacroFrame id. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Two-step lookup (mirrors VolatileVariableLookup): the current block sees writes that FanucMacroCallSyntax stamped at inline time (the call-line argument bindings) and writes that FanucLocalVariableReadingSyntax applied on this block before the lookup runs; the previous block (frame-checked) supplies body-internal writes from the prior block in the same macro frame. Looking past the previous block is unnecessary because the reader carries forward block-by-block within a frame. Frame isolation via MacroFrame: a previous block whose frame id differs from the current block's is skipped — a macro body's body-internal locals are invisible to the caller after return, and the caller's main-frame locals are invisible inside the macro. M98/M198 subprogram inlining (SubProgramCallSyntax) deliberately does not stamp MacroFrame on its inlined blocks, so the callee inherits the caller's frame and sees the caller's locals — matching real Fanuc M98 semantics. Stateless and dependency-free — instances are interchangeable. public class LocalVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object LocalVariableLookup Implements IRuntimeVariableLookup 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 LocalVariableLookup() Default constructor. public LocalVariableLookup() LocalVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public LocalVariableLookup(XElement src) Parameters src XElement Fields LocalMax Inclusive upper bound of the macro-local range (#33). public const int LocalMax = 33 Field Value int LocalMin Inclusive lower bound of the macro-local range (#1). public const int LocalMin = 1 Field Value int Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html", @@ -3827,7 +3827,7 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html", "title": "Class VolatileVariableLookup | HiAPI-C# 2025", - "summary": "Class VolatileVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style non-retained common variables (#100-#499) from Vars.Volatile. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Single-step lookup: VolatileVariableReadingSyntax already dict-merges every block's Vars.Volatile into the next block, so the entry — if it exists — must be on the current block (when this lookup runs after the reader) or on the immediately previous block (when this lookup runs before the reader on the same block, which is the Fanuc preset's order — evaluator first, reader second). No arbitrary walk-back: such a walk would be defensive overkill given the reader's carry guarantee. Stateless and dependency-free — instances are interchangeable. Reads stay decoupled from the reader (read side here; write side in the reader). public class VolatileVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object VolatileVariableLookup Implements IRuntimeVariableLookup 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 VolatileVariableLookup() Default constructor. public VolatileVariableLookup() VolatileVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public VolatileVariableLookup(XElement src) Parameters src XElement Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? 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 VolatileVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style non-retained common variables (#100-#499) from Vars.Volatile. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Single-step lookup: VolatileVariableReadingSyntax already dict-merges every block's Vars.Volatile into the next block, so the entry — if it exists — must be on the current block (when this lookup runs after the reader) or on the immediately previous block (when this lookup runs before the reader on the same block, which is the Fanuc preset's order — evaluator first, reader second). No arbitrary walk-back: such a walk would be defensive overkill given the reader's carry guarantee. Stateless and dependency-free — instances are interchangeable. Reads stay decoupled from the reader (read side here; write side in the reader). public class VolatileVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object VolatileVariableLookup Implements IRuntimeVariableLookup 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 VolatileVariableLookup() Default constructor. public VolatileVariableLookup() VolatileVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public VolatileVariableLookup(XElement src) Parameters src XElement Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string 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? MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.html", @@ -3837,17 +3837,17 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html", "title": "Class FanucGotoSyntax | HiAPI-C# 2025", - "summary": "Class FanucGotoSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Resolves Fanuc Custom Macro B GOTO control flow. Triggered by Parsing.FanucGoto (written by FanucGotoParsingSyntax); decides whether to fire, and on fire calls ReplaceSource(IEnumerable) on layers[0] with the re-segmented file content starting at the matching N{target} label. The host block stays materialised (so cache dumps still see the GOTO call site); execution naturally continues from the new source once the pipeline pulls the next block. Both unconditional GOTO and conditional IF [] GOTO are implemented. The conditional form leans on VariableEvaluatorSyntax's pass-2 tree walk to substitute Parsing.FanucGoto.Condition with a numeric JsonValue when the expression evaluates successfully — ReadCondition(JsonNode) then reads the node polymorphically. Truthy non-zero fires the redirect; zero falls through silently; a still-string (unresolved) Condition emits FanucGoto--ConditionNotEvaluated and falls through. Pipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation bundle. Must run after VariableEvaluatorSyntax so any # in the target N (e.g. GOTO #1) has been substituted to a literal in Parsing.FanucGoto.N. Reader syntaxes (VolatileVariableReadingSyntax etc.) are independent — they touch Parsing.Assignments, not Parsing.FanucGoto. Label scanning uses two hosted helper syntaxes — CommentSyntax and IndexSyntax — applied to each candidate block in turn so the predicate IndexNote.Number == target matches the same way the Parsing bundle would. Both are XML-IO-able so API customers can swap them (e.g. for a controller variant using ;-style comments or a different head symbol). Defaults match Fanuc: QuoteCommentSyntax and HeadIndexSyntax with the \"N\" symbol. public class FanucGotoSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucGotoSyntax 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 FanucGotoSyntax() Parameterless instance with default helper syntaxes. public FanucGotoSyntax() FanucGotoSyntax(XElement, string, IProgress) Loads hosted helper syntaxes from XML produced by MakeXmlSource(string, string, bool). The wrapper contains one child element per probe syntax in source order; an absent wrapper falls back to the default list. public FanucGotoSyntax(XElement src, string baseDirectory, IProgress progress) Parameters src XElement Root element named XName. baseDirectory string Project base directory propagated to child XFactory calls. progress IProgress Diagnostic sink propagated to child factories. Properties LabelProbeSyntaxes Ordered list of helper syntaxes run on each candidate block during the label scan before the IndexNote.Number == target predicate is checked. The defaults match Fanuc — QuoteCommentSyntax strips parenthesised comments so a commented-out (N100) never matches, then HeadIndexSyntax with symbol “N” extracts the head index into IndexNote.Number. Exposed as a list (rather than two fixed properties) so API customers can insert additional probe syntaxes — for example a TailCommentSyntax for ;-style end-of-block comments alongside the parenthesised form, or a BlockSkipSyntax to skip /-prefixed blocks from the label-scan results. Order matters: comment-strippers before the head-index parser, the index parser last (so its output reflects the post-strip text). public List LabelProbeSyntaxes { 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 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." + "summary": "Class FanucGotoSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Resolves Fanuc Custom Macro B GOTO control flow. Triggered by Parsing.FanucGoto (written by FanucGotoParsingSyntax); decides whether to fire, and on fire calls ReplaceSource(IEnumerable) on layers[0] with the re-segmented file content starting at the matching N{target} label. The host block stays materialised (so cache dumps still see the GOTO call site); execution naturally continues from the new source once the pipeline pulls the next block. Both unconditional GOTO and conditional IF [] GOTO are implemented. The conditional form leans on VariableEvaluatorSyntax's pass-2 tree walk to substitute Parsing.FanucGoto.Condition with a numeric JsonValue when the expression evaluates successfully — ReadCondition(JsonNode) then reads the node polymorphically. Truthy non-zero fires the redirect; zero falls through silently; a still-string (unresolved) Condition emits FanucGoto--ConditionNotEvaluated and falls through. Pipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation bundle. Must run after VariableEvaluatorSyntax so any # in the target N (e.g. GOTO #1) has been substituted to a literal in Parsing.FanucGoto.N. Reader syntaxes (VolatileVariableReadingSyntax etc.) are independent — they touch Parsing.Assignments, not Parsing.FanucGoto. Label scanning uses two hosted helper syntaxes — CommentSyntax and IndexSyntax — applied to each candidate block in turn so the predicate IndexNote.Number == target matches the same way the Parsing bundle would. Both are XML-IO-able so API customers can swap them (e.g. for a controller variant using ;-style comments or a different head symbol). Defaults match Fanuc: QuoteCommentSyntax and HeadIndexSyntax with the \"N\" symbol. public class FanucGotoSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucGotoSyntax 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 FanucGotoSyntax() Parameterless instance with default helper syntaxes. public FanucGotoSyntax() FanucGotoSyntax(XElement, string, IProgress) Loads hosted helper syntaxes from XML produced by MakeXmlSource(string, string, bool). The wrapper contains one child element per probe syntax in source order; an absent wrapper falls back to the default list. public FanucGotoSyntax(XElement src, string baseDirectory, IProgress progress) Parameters src XElement Root element named XName. baseDirectory string Project base directory propagated to child XFactory calls. progress IProgress Diagnostic sink propagated to child factories. Properties LabelProbeSyntaxes Ordered list of helper syntaxes run on each candidate block during the label scan before the IndexNote.Number == target predicate is checked. The defaults match Fanuc — QuoteCommentSyntax strips parenthesised comments so a commented-out (N100) never matches, then HeadIndexSyntax with symbol “N” extracts the head index into IndexNote.Number. Exposed as a list (rather than two fixed properties) so API customers can insert additional probe syntaxes — for example a TailCommentSyntax for ;-style end-of-block comments alongside the parenthesised form, or a BlockSkipSyntax to skip /-prefixed blocks from the label-scan results. Order matters: comment-strippers before the head-index parser, the index parser last (so its output reflects the post-strip text). public List LabelProbeSyntaxes { 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 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html", "title": "Class FanucIfThenSyntax | HiAPI-C# 2025", - "summary": "Class FanucIfThenSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Resolves Fanuc Custom Macro B IF [] THEN single-block conditionals. Triggered by Parsing.FanucIfThen (written by FanucIfThenParsingSyntax); reads the now-resolved Condition node, decides whether to fire, and on fire lifts the parsing-stage PendingAssignments sub-object into the canonical Parsing.Assignments bucket so the brand-specific reader syntaxes downstream route each entry to its store the same way they would handle an unconditional #nnn = on a normal block. Unlike FanucGotoSyntax there is no source splice, no label scan, no iteration watchdog — the spec restricts the body to the current block. The host block is preserved either way (the stamped FanucIfThen section on the host's top-level JSON keeps the IF-THEN call site visible to cache dumps and diagnostics, with Applied flipped true only on a successful fire). Pipeline placement: in the Evaluation bundle after VariableEvaluatorSyntax (so the Condition expression has been substituted in place by pass-2 tree walk, and each PendingAssignments RHS string has been evaluated to a numeric JsonValue) and before the reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableReadingSyntax, FanucLocalVariableReadingSyntax, FanucSystemControlVariableSyntax) — that ordering lets the lifted entries reach the readers as if they had been written by TagAssignmentSyntax on a normal block. Three condition outcomes mirror the ReadCondition(JsonNode) shape: Truthy non-zero → lift assignments, stamp Applied=true. Truthy zero → fall through silently, Applied=false. Truthy null (evaluator failed, condition still a string or non-finite) → warn FanucIfThen--ConditionNotEvaluated, do not lift, Applied=false. A truthy condition with no PendingAssignments (body did not parse as one or more assignments — e.g. a G-code body, currently unsupported) warns FanucIfThen--UnsupportedBody and falls through. public class FanucIfThenSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucIfThenSyntax 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 FanucIfThenSyntax() Parameterless instance (no XML state). public FanucIfThenSyntax() FanucIfThenSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucIfThenSyntax(XElement src) Parameters src XElement Root element named XName. 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." + "summary": "Class FanucIfThenSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Resolves Fanuc Custom Macro B IF [] THEN single-block conditionals. Triggered by Parsing.FanucIfThen (written by FanucIfThenParsingSyntax); reads the now-resolved Condition node, decides whether to fire, and on fire lifts the parsing-stage PendingAssignments sub-object into the canonical Parsing.Assignments bucket so the brand-specific reader syntaxes downstream route each entry to its store the same way they would handle an unconditional #nnn = on a normal block. Unlike FanucGotoSyntax there is no source splice, no label scan, no iteration watchdog — the spec restricts the body to the current block. The host block is preserved either way (the stamped FanucIfThen section on the host's top-level JSON keeps the IF-THEN call site visible to cache dumps and diagnostics, with Applied flipped true only on a successful fire). Pipeline placement: in the Evaluation bundle after VariableEvaluatorSyntax (so the Condition expression has been substituted in place by pass-2 tree walk, and each PendingAssignments RHS string has been evaluated to a numeric JsonValue) and before the reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableReadingSyntax, FanucLocalVariableReadingSyntax, FanucSystemControlVariableSyntax) — that ordering lets the lifted entries reach the readers as if they had been written by TagAssignmentSyntax on a normal block. Three condition outcomes mirror the ReadCondition(JsonNode) shape: Truthy non-zero → lift assignments, stamp Applied=true. Truthy zero → fall through silently, Applied=false. Truthy null (evaluator failed, condition still a string or non-finite) → warn FanucIfThen--ConditionNotEvaluated, do not lift, Applied=false. A truthy condition with no PendingAssignments (body did not parse as one or more assignments — e.g. a G-code body, currently unsupported) warns FanucIfThen--UnsupportedBody and falls through. public class FanucIfThenSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucIfThenSyntax 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 FanucIfThenSyntax() Parameterless instance (no XML state). public FanucIfThenSyntax() FanucIfThenSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucIfThenSyntax(XElement src) Parameters src XElement Root element named XName. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html", "title": "Class FanucLocalVariableReadingSyntax | HiAPI-C# 2025", - "summary": "Class FanucLocalVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Routes literal-RHS assignments to Fanuc-style local macro variables (#1-#33) from Parsing.Assignments into Vars.Local on the current block, carrying the previous block's Vars.Local dict forward when both blocks share the same MacroFrame id. Mirrors VolatileVariableReadingSyntax for the #100-#499 range, with two differences: Carry is gated by MacroFrame equality, so a caller block after a G65 return does not inherit the macro body's final locals. Writes outside a macro frame (a main-program block doing #11 = 5) emit LocalVariable--MainFrameWriteUnsupported and consume the assignment without persisting — real Fanuc allows main-frame local writes but this simulator only tracks locals inside G65/G66 call frames; surfacing the gap as a diagnostic is more informative than a silent UnconsumedCheckSyntax hit. Pipeline placement: Evaluation bundle, after VariableEvaluatorSyntax (so any expression RHS such as #11 = #1 + 1 has already been normalised to a literal by the time this reader runs) and after the other range readers (RetainedCommonVariableReadingSyntax, VolatileVariableReadingSyntax) so they all share a similar Reader-stage shape. Only literal numeric RHS values are consumed here; non-literal entries (which can only persist if VariableEvaluatorSyntax failed to resolve them) are left untouched and surface via the evaluator's own VariableExpression--Unevaluated diagnostic plus UnconsumedCheckSyntax. public class FanucLocalVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucLocalVariableReadingSyntax 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 FanucLocalVariableReadingSyntax() Default constructor. public FanucLocalVariableReadingSyntax() FanucLocalVariableReadingSyntax(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); no state. public FanucLocalVariableReadingSyntax(XElement src) Parameters src XElement Fields LocalMax Inclusive upper bound of the local range (#33). public const int LocalMax = 33 Field Value int LocalMin Inclusive lower bound of the local range (#1). public const int LocalMin = 1 Field Value int Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 FanucLocalVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Routes literal-RHS assignments to Fanuc-style local macro variables (#1-#33) from Parsing.Assignments into Vars.Local on the current block, carrying the previous block's Vars.Local dict forward when both blocks share the same MacroFrame id. Mirrors VolatileVariableReadingSyntax for the #100-#499 range, with two differences: Carry is gated by MacroFrame equality, so a caller block after a G65 return does not inherit the macro body's final locals. Writes outside a macro frame (a main-program block doing #11 = 5) emit LocalVariable--MainFrameWriteUnsupported and consume the assignment without persisting — real Fanuc allows main-frame local writes but this simulator only tracks locals inside G65/G66 call frames; surfacing the gap as a diagnostic is more informative than a silent UnconsumedCheckSyntax hit. Pipeline placement: Evaluation bundle, after VariableEvaluatorSyntax (so any expression RHS such as #11 = #1 + 1 has already been normalised to a literal by the time this reader runs) and after the other range readers (RetainedCommonVariableReadingSyntax, VolatileVariableReadingSyntax) so they all share a similar Reader-stage shape. Only literal numeric RHS values are consumed here; non-literal entries (which can only persist if VariableEvaluatorSyntax failed to resolve them) are left untouched and surface via the evaluator's own VariableExpression--Unevaluated diagnostic plus UnconsumedCheckSyntax. public class FanucLocalVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucLocalVariableReadingSyntax 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 FanucLocalVariableReadingSyntax() Default constructor. public FanucLocalVariableReadingSyntax() FanucLocalVariableReadingSyntax(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); no state. public FanucLocalVariableReadingSyntax(XElement src) Parameters src XElement Fields LocalMax Inclusive upper bound of the local range (#33). public const int LocalMax = 33 Field Value int LocalMin Inclusive lower bound of the local range (#1). public const int LocalMin = 1 Field Value int Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html", @@ -3857,7 +3857,7 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html", "title": "Class FanucMacroCallSyntax | HiAPI-C# 2025", - "summary": "Class FanucMacroCallSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Inlines a Fanuc Custom Macro B one-shot call (G65 P_ L_ [letter value …]) into the source layer and binds the call-line argument letters to Vars.Local #1-#26 per the Type-I map (see FanucMacroArgumentMap). Every inlined block carries the binding dict, a clone of the FanucMacroCall diagnostic record, and a MacroFrame id stamp — so LocalVariableLookup resolves arg references in a single-block lookup, a cache dump landing on any block immediately shows which call it belongs to, and downstream FanucLocalVariableReadingSyntax carries body-internal #1-#33 writes forward only within the same frame. The host block itself records FanucMacroCall but stays in the caller's frame (no MacroFrame stamp) and emits no motion act; after the macro body's last inlined block the pipeline continues naturally into the caller's next block (the inlined pieces sit ahead of the host block's successor in layers[0]). Frame isolation works on two layers. Statically, caller blocks have no MacroFrame stamp (frame id 0 by Get(JsonObject)), so the inlined frame ids (allocated fresh per L-repetition) never collide with main. Dynamically, LocalVariableLookup and FanucLocalVariableReadingSyntax compare frame ids before carrying any Vars.Local entry across a block boundary — a macro body's body-internal writes therefore stay inside the macro and never leak back into the caller's frame. Filename lookup mirrors SubProgramCallSyntax: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. The lookup root is InternalFolder (G65 has no \"external storage\" variant; M198's external root is M98/M198-only). L > 1 inlines the same macro L times in series. Each repetition is a fresh segmentation pass (so each block gets its own SyntaxPiece JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared) and gets a fresh FileIndex (so (FileIndex, LineIndex) pairs stay unique across the L-copies of the same source lines). Pipeline placement: ahead of SubProgramCallSyntax inside the Fanuc Evaluation BundleSyntax so a hypothetical G65 P_ + M98 P_ on the same block expands the G65 macro first (would be an unusual but legal composition). Detection is on the Parsing.G65 sub-object written by G65Syntax (a ParameterizedFlagSyntax) — the keyword \"G65\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. public class FanucMacroCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucMacroCallSyntax 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 FanucMacroCallSyntax() Parameterless instance for bundle composition (no XML state). public FanucMacroCallSyntax() FanucMacroCallSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucMacroCallSyntax(XElement src) Parameters src XElement Root element named XName. 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." + "summary": "Class FanucMacroCallSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Inlines a Fanuc Custom Macro B one-shot call (G65 P_ L_ [letter value …]) into the source layer and binds the call-line argument letters to Vars.Local #1-#26 per the Type-I map (see FanucMacroArgumentMap). Every inlined block carries the binding dict, a clone of the FanucMacroCall diagnostic record, and a MacroFrame id stamp — so LocalVariableLookup resolves arg references in a single-block lookup, a cache dump landing on any block immediately shows which call it belongs to, and downstream FanucLocalVariableReadingSyntax carries body-internal #1-#33 writes forward only within the same frame. The host block itself records FanucMacroCall but stays in the caller's frame (no MacroFrame stamp) and emits no motion act; after the macro body's last inlined block the pipeline continues naturally into the caller's next block (the inlined pieces sit ahead of the host block's successor in layers[0]). Frame isolation works on two layers. Statically, caller blocks have no MacroFrame stamp (frame id 0 by Get(JsonObject)), so the inlined frame ids (allocated fresh per L-repetition) never collide with main. Dynamically, LocalVariableLookup and FanucLocalVariableReadingSyntax compare frame ids before carrying any Vars.Local entry across a block boundary — a macro body's body-internal writes therefore stay inside the macro and never leak back into the caller's frame. Filename lookup mirrors SubProgramCallSyntax: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. The lookup root is InternalFolder (G65 has no \"external storage\" variant; M198's external root is M98/M198-only). L > 1 inlines the same macro L times in series. Each repetition is a fresh segmentation pass (so each block gets its own SyntaxPiece JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared) and gets a fresh FileIndex (so (FileIndex, LineIndex) pairs stay unique across the L-copies of the same source lines). Pipeline placement: ahead of SubProgramCallSyntax inside the Fanuc Evaluation BundleSyntax so a hypothetical G65 P_ + M98 P_ on the same block expands the G65 macro first (would be an unusual but legal composition). Detection is on the Parsing.G65 sub-object written by G65Syntax (a ParameterizedFlagSyntax) — the keyword \"G65\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. public class FanucMacroCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucMacroCallSyntax 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 FanucMacroCallSyntax() Parameterless instance for bundle composition (no XML state). public FanucMacroCallSyntax() FanucMacroCallSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucMacroCallSyntax(XElement src) Parameters src XElement Root element named XName. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html", @@ -3867,12 +3867,12 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html", "title": "Class FanucModalMacroSyntax | HiAPI-C# 2025", - "summary": "Class FanucModalMacroSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Handles Fanuc Custom Macro B modal-call lifecycle (G66 setup, G67 cancel, and per-motion-block implicit macro invocation). The same class is registered twice in the pipeline via Phase — once in the Evaluation bundle (Setup, captures G66/G67 edges and carries the FanucModalMacro state block-to-block) and once in the PostLogic bundle (Expansion, on every motion block within an active G66 modal, inlines the macro body via the same mechanism FanucMacroCallSyntax uses). Keeping both phases in one class makes the pairing visually explicit: readers see \"G66 in one file\" and the two methods (DoSetup, DoExpansion) make the lifecycle obvious. The two factory helpers (Setup, Expansion) mirror the ModalCarrySyntax.Logic / .PostLogic pattern already in the codebase. public class FanucModalMacroSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucModalMacroSyntax 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 FanucModalMacroSyntax() Parameterless instance (defaults to Setup). public FanucModalMacroSyntax() FanucModalMacroSyntax(XElement) XML ctor. Reads child element; legacy project files without it default to Setup (the pre-expansion behaviour). public FanucModalMacroSyntax(XElement src) Parameters src XElement Root element named XName. Properties Expansion Factory: PostLogic-bundle instance that performs implicit motion-block expansion. public static FanucModalMacroSyntax Expansion { get; } Property Value FanucModalMacroSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string Phase Pipeline phase this instance runs in. Defaults to Setup. public FanucModalMacroSyntax.SyntaxPhase Phase { get; set; } Property Value FanucModalMacroSyntax.SyntaxPhase Setup Factory: Evaluation-bundle instance that handles G66/G67 setup + carry. public static FanucModalMacroSyntax Setup { get; } Property Value FanucModalMacroSyntax 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." + "summary": "Class FanucModalMacroSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Handles Fanuc Custom Macro B modal-call lifecycle (G66 setup, G67 cancel, and per-motion-block implicit macro invocation). The same class is registered twice in the pipeline via Phase — once in the Evaluation bundle (Setup, captures G66/G67 edges and carries the FanucModalMacro state block-to-block) and once in the PostLogic bundle (Expansion, on every motion block within an active G66 modal, inlines the macro body via the same mechanism FanucMacroCallSyntax uses). Keeping both phases in one class makes the pairing visually explicit: readers see \"G66 in one file\" and the two methods (DoSetup, DoExpansion) make the lifecycle obvious. The two factory helpers (Setup, Expansion) mirror the ModalCarrySyntax.Logic / .PostLogic pattern already in the codebase. public class FanucModalMacroSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucModalMacroSyntax 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 FanucModalMacroSyntax() Parameterless instance (defaults to Setup). public FanucModalMacroSyntax() FanucModalMacroSyntax(XElement) XML ctor. Reads child element; legacy project files without it default to Setup (the pre-expansion behaviour). public FanucModalMacroSyntax(XElement src) Parameters src XElement Root element named XName. Properties Expansion Factory: PostLogic-bundle instance that performs implicit motion-block expansion. public static FanucModalMacroSyntax Expansion { get; } Property Value FanucModalMacroSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string Phase Pipeline phase this instance runs in. Defaults to Setup. public FanucModalMacroSyntax.SyntaxPhase Phase { get; set; } Property Value FanucModalMacroSyntax.SyntaxPhase Setup Factory: Evaluation-bundle instance that handles G66/G67 setup + carry. public static FanucModalMacroSyntax Setup { get; } Property Value FanucModalMacroSyntax 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html", "title": "Class FanucSystemControlVariableSyntax | HiAPI-C# 2025", - "summary": "Class FanucSystemControlVariableSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Consumes Fanuc-style system-control variable assignments (#3000-#3999) — alarm trigger (#3000), millisecond and hour clocks (#3001 / #3002), single-block / feed-hold bypass flags (#3003 / #3004), pause-with-message (#3006), mirror-image flags (#3007), date / time (#3011 / #3012), tool-life data (#3030 / #3032), etc. Every id in this range is a controller-side state variable — its authoritative value lives on the real hardware (RTC, alarm bus, override switches, …) and an NC write at most triggers a side effect (clock reset, alarm raise, message-pause prompt). Offline simulation has none of that machinery, so this syntax does not emulate the effect. Instead it: records the literal write on the block JSON under Vars.SystemControl (round-trip and cache-dump visibility); emits a FanucSystemControl--Unsupported UnsupportedMessage(ISentenceCarrier, string, string, object) so the user knows the assignment was recognised but its controller-side effect is not simulated. Message-severity (not Warning) because these writes are safe no-ops offline — every consumed assignment would emit a Warning per block, which would be noisy without signalling anything the user must act on; removes the entry from Parsing.Assignments so it does not re-surface as a generic Parsing--Unconsumed diagnostic. The dictionary carries forward block-by-block (same dict-merge pattern as VolatileVariableReadingSyntax) so a downstream consumer can read the most recent recorded value via SyntaxPiece linkage. Only literal numeric RHS values are consumed; non-literal RHS (e.g. #3002 = #500) is left in Parsing.Assignments for VariableEvaluatorSyntax to resolve, mirroring the retained / volatile reading syntaxes. Fanuc-family only — Siemens uses named system variables ($AC_TIME, $A_DAY, …) and Heidenhain uses FN18: SYSREAD; neither flows through Parsing.Assignments.#nnn. public class FanucSystemControlVariableSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucSystemControlVariableSyntax 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 FanucSystemControlVariableSyntax() Default constructor. public FanucSystemControlVariableSyntax() FanucSystemControlVariableSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public FanucSystemControlVariableSyntax(XElement src) Parameters src XElement Fields SystemControlMax Inclusive upper bound of the system-control range (#3999). public const int SystemControlMax = 3999 Field Value int SystemControlMin Inclusive lower bound of the system-control range (#3000). public const int SystemControlMin = 3000 Field Value int UnsupportedDiagId Diagnostic id emitted for every consumed #3000-#3999 assignment — recognised by the parser, ignored by simulation. public const string UnsupportedDiagId = \"FanucSystemControl--Unsupported\" 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 Generators 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 FanucSystemControlVariableSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Consumes Fanuc-style system-control variable assignments (#3000-#3999) — alarm trigger (#3000), millisecond and hour clocks (#3001 / #3002), single-block / feed-hold bypass flags (#3003 / #3004), pause-with-message (#3006), mirror-image flags (#3007), date / time (#3011 / #3012), tool-life data (#3030 / #3032), etc. Every id in this range is a controller-side state variable — its authoritative value lives on the real hardware (RTC, alarm bus, override switches, …) and an NC write at most triggers a side effect (clock reset, alarm raise, message-pause prompt). Offline simulation has none of that machinery, so this syntax does not emulate the effect. Instead it: records the literal write on the block JSON under Vars.SystemControl (round-trip and cache-dump visibility); emits a FanucSystemControl--Unsupported UnsupportedMessage(ISentenceCarrier, string, string, object) so the user knows the assignment was recognised but its controller-side effect is not simulated. Message-severity (not Warning) because these writes are safe no-ops offline — every consumed assignment would emit a Warning per block, which would be noisy without signalling anything the user must act on; removes the entry from Parsing.Assignments so it does not re-surface as a generic Parsing--Unconsumed diagnostic. The dictionary carries forward block-by-block (same dict-merge pattern as VolatileVariableReadingSyntax) so a downstream consumer can read the most recent recorded value via SyntaxPiece linkage. Only literal numeric RHS values are consumed; non-literal RHS (e.g. #3002 = #500) is left in Parsing.Assignments for VariableEvaluatorSyntax to resolve, mirroring the retained / volatile reading syntaxes. Fanuc-family only — Siemens uses named system variables ($AC_TIME, $A_DAY, …) and Heidenhain uses FN18: SYSREAD; neither flows through Parsing.Assignments.#nnn. public class FanucSystemControlVariableSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucSystemControlVariableSyntax 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 FanucSystemControlVariableSyntax() Default constructor. public FanucSystemControlVariableSyntax() FanucSystemControlVariableSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public FanucSystemControlVariableSyntax(XElement src) Parameters src XElement Fields SystemControlMax Inclusive upper bound of the system-control range (#3999). public const int SystemControlMax = 3999 Field Value int SystemControlMin Inclusive lower bound of the system-control range (#3000). public const int SystemControlMin = 3000 Field Value int UnsupportedDiagId Diagnostic id emitted for every consumed #3000-#3999 assignment — recognised by the parser, ignored by simulation. public const string UnsupportedDiagId = \"FanucSystemControl--Unsupported\" 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 Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html", @@ -3882,7 +3882,7 @@ "api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html", "title": "Class LabelScanUtil | HiAPI-C# 2025", - "summary": "Class LabelScanUtil Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Shared “re-segment a file and skip pieces until a label matches” scan, used by both FanucGotoSyntax (unconditional GOTO redirect) and SubProgramReturnSyntax (M99 P{seq} jump into the caller file). Reads the file via ReadLines(int, string, string), segments through the provided ISegmenter, runs the probeSyntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF. Returns null when no block matches — the caller's responsibility to surface the appropriate diagnostic. The probes are idempotent because the downstream Parsing bundle re-runs the same syntaxes on the yielded pieces with no-op effect (the regex patterns no longer match once the N-prefix is consumed and the parenthesised comment stripped). public static class LabelScanUtil Inheritance object LabelScanUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) Re-segments absPath from offset 0, scans for a block whose Number equals targetN (after the probeSyntaxes have stamped it in-place), and returns the sub-list of pieces from that block to EOF. Pieces are produced via GetSyntaxPieces(ISegmenter, IEnumerable, int, NcDiagnosticProgress, CancellationToken) with SentenceIndex stamped starting at sentenceIndexBegin. Returns null when no match is found; the caller emits its own brand-specific “label not found” diagnostic. The predicate is fixed at the IndexNote.Number section — the section name comes from nameof() so a future rename propagates without re-edits. Reconfigurability for non-standard label-output sections is achieved by replacing the probe syntaxes (the natural extension point) rather than parameterising the predicate path here: a probe stack that doesn't end up writing IndexNote on candidates is by definition not participating in this scan. public static List SegmentAndSkipUntilLabel(ISegmenter segmenter, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, int targetN, List probeSyntaxes, NcDiagnosticProgress diag) Parameters segmenter ISegmenter Segmenter used to slice the file into Sentence blocks. absPath string Absolute path to read line content from. labelPath string Project-relative path to stamp on each line's IndexedFileLine label (so diagnostics anchor to a relative form, not the resolver's transient absolute path). fileIndex int Fresh file index to stamp on each scanned line, allocated by the caller from FileIndexCounterDependency. sentenceIndexBegin int Starting execution-order index for the produced pieces. targetN int Integer label target to match against Number. probeSyntaxes List Ordered list of helper syntaxes to run on each candidate block before the predicate check (typically comment-stripper(s) followed by a head-index parser). May be null. diag NcDiagnosticProgress Sink for any diagnostics produced by the probe syntaxes (e.g. comment-stripper malformed-comment warnings). Returns List" + "summary": "Class LabelScanUtil Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Shared “re-segment a file and skip pieces until a label matches” scan, used by both FanucGotoSyntax (unconditional GOTO redirect) and SubProgramReturnSyntax (M99 P{seq} jump into the caller file). Reads the file via ReadLines(int, string, string), segments through the provided ISegmenter, runs the caller-supplied probe syntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF. Returns null when no block matches — the caller's responsibility to surface the appropriate diagnostic. The probes are idempotent because the downstream Parsing bundle re-runs the same syntaxes on the yielded pieces with no-op effect (the regex patterns no longer match once the N-prefix is consumed and the parenthesised comment stripped). public static class LabelScanUtil Inheritance object LabelScanUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) Re-segments absPath from offset 0, scans for a block whose Number equals targetN (after the probeSyntaxes have stamped it in-place), and returns the sub-list of pieces from that block to EOF. Pieces are produced via GetSyntaxPieces(ISegmenter, IEnumerable, int, NcDiagnosticProgress, CancellationToken) with SentenceIndex stamped starting at sentenceIndexBegin. Returns null when no match is found; the caller emits its own brand-specific “label not found” diagnostic. The predicate is fixed at the IndexNote.Number section — the section name comes from nameof() so a future rename propagates without re-edits. Reconfigurability for non-standard label-output sections is achieved by replacing the probe syntaxes (the natural extension point) rather than parameterising the predicate path here: a probe stack that doesn't end up writing IndexNote on candidates is by definition not participating in this scan. public static List SegmentAndSkipUntilLabel(ISegmenter segmenter, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, int targetN, List probeSyntaxes, NcDiagnosticProgress diag) Parameters segmenter ISegmenter Segmenter used to slice the file into Sentence blocks. absPath string Absolute path to read line content from. labelPath string Project-relative path to stamp on each line's IndexedFileLine label (so diagnostics anchor to a relative form, not the resolver's transient absolute path). fileIndex int Fresh file index to stamp on each scanned line, allocated by the caller from FileIndexCounterDependency. sentenceIndexBegin int Starting execution-order index for the produced pieces. targetN int Integer label target to match against Number. probeSyntaxes List Ordered list of helper syntaxes to run on each candidate block before the predicate check (typically comment-stripper(s) followed by a head-index parser). May be null. diag NcDiagnosticProgress Sink for any diagnostics produced by the probe syntaxes (e.g. comment-stripper malformed-comment warnings). Returns List" }, "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html", @@ -3897,37 +3897,37 @@ "api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html", "title": "Class MacroInlineUtil | HiAPI-C# 2025", - "summary": "Class MacroInlineUtil Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Shared inline mechanism for Fanuc Custom Macro B body expansion — used by both FanucMacroCallSyntax (one-shot) and FanucModalMacroSyntax's expansion phase (modal trigger). Both callers do the same three things on every produced SyntaxPiece: stamp a FanucMacroCall clone, stamp a fresh MacroFrame id, and stamp argument bindings into Vars.Local. Centralising lets the two call sites stay in lock-step — frame allocation, file-index allocation, and the inline-piece JSON shape are guaranteed identical. Frame ids share the same FileIndexCounterDependency counter as file indices — both just need within-session uniqueness and the counter is rewound on session start in lock-step with the pipeline. The main NC file is allocated index 0 first, so all inline frame ids land at > 0 and never collide with main. public static class MacroInlineUtil Inheritance object MacroInlineUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ApplyLocalBindings(JsonObject, IReadOnlyDictionary) Writes the resolved #N → value bindings into Vars.Local on the given block. No-op when bindings is empty. Always overwrites any pre-existing Vars.Local on the block — for inlined macro bodies this is a fresh stamp. public static void ApplyLocalBindings(JsonObject json, IReadOnlyDictionary bindings) Parameters json JsonObject bindings IReadOnlyDictionary BuildInlinedPieces(ResolvedFile, int, IReadOnlyDictionary, JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, int, NcDiagnosticProgress) Yields L repetitions of the macro body as inline-ready SyntaxPiece entries. Each repetition gets its own freshly-allocated FileIndex and MacroFrame id; every yielded piece is stamped with a deep clone of callRecord, the frame id, and the resolved #N → value bindings. The caller passes the result to LazyLinkedList.PrependSource on the source layer. public static IEnumerable BuildInlinedPieces(MacroFileResolver.ResolvedFile resolvedFile, int l, IReadOnlyDictionary bindings, JsonObject callRecord, JsonObject pushedCallStack, FileIndexCounterDependency counterDep, ISegmenter segmenter, int sentenceIndexBegin, NcDiagnosticProgress ncDiagnosticProgress) Parameters resolvedFile MacroFileResolver.ResolvedFile l int bindings IReadOnlyDictionary callRecord JsonObject pushedCallStack JsonObject counterDep FileIndexCounterDependency segmenter ISegmenter sentenceIndexBegin int ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable BuildLocalBindings(JsonObject) Translates the argument-letter map captured by the host call ({ “A”: 1.5, “B”: 2.0, ... }) into the #N → value bindings the macro body's expression evaluator will read off Vars.Local. Skips non-numeric (string) args silently — those are unresolved variable references that the evaluator's own VariableExpression–Unevaluated diagnostic will surface; writing a string into Vars.Local would just propagate the residue. public static Dictionary BuildLocalBindings(JsonObject args) Parameters args JsonObject Returns Dictionary" + "summary": "Class MacroInlineUtil Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Shared inline mechanism for Fanuc Custom Macro B body expansion — used by both FanucMacroCallSyntax (one-shot) and FanucModalMacroSyntax's expansion phase (modal trigger). Both callers do the same three things on every produced SyntaxPiece: stamp a FanucMacroCall clone, stamp a fresh MacroFrame id, and stamp argument bindings into Vars.Local. Centralising lets the two call sites stay in lock-step — frame allocation, file-index allocation, and the inline-piece JSON shape are guaranteed identical. Frame ids share the same FileIndexCounterDependency counter as file indices — both just need within-session uniqueness and the counter is rewound on session start in lock-step with the pipeline. The main NC file is allocated index 0 first, so all inline frame ids land at > 0 and never collide with main. public static class MacroInlineUtil Inheritance object MacroInlineUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ApplyLocalBindings(JsonObject, IReadOnlyDictionary) Writes the resolved #N → value bindings into Vars.Local on the given block. No-op when bindings is empty. Always overwrites any pre-existing Vars.Local on the block — for inlined macro bodies this is a fresh stamp. public static void ApplyLocalBindings(JsonObject json, IReadOnlyDictionary bindings) Parameters json JsonObject bindings IReadOnlyDictionary BuildInlinedPieces(ResolvedFile, int, IReadOnlyDictionary, JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, int, NcDiagnosticProgress) Yields L repetitions of the macro body as inline-ready SyntaxPiece entries. Each repetition gets its own freshly-allocated FileIndex and MacroFrame id; every yielded piece is stamped with a deep clone of callRecord, the frame id, and the resolved #N → value bindings. The caller passes the result to PrependSource(IEnumerable) on the source layer. public static IEnumerable BuildInlinedPieces(MacroFileResolver.ResolvedFile resolvedFile, int l, IReadOnlyDictionary bindings, JsonObject callRecord, JsonObject pushedCallStack, FileIndexCounterDependency counterDep, ISegmenter segmenter, int sentenceIndexBegin, NcDiagnosticProgress ncDiagnosticProgress) Parameters resolvedFile MacroFileResolver.ResolvedFile l int bindings IReadOnlyDictionary callRecord JsonObject pushedCallStack JsonObject counterDep FileIndexCounterDependency segmenter ISegmenter sentenceIndexBegin int ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable BuildLocalBindings(JsonObject) Translates the argument-letter map captured by the host call ({ “A”: 1.5, “B”: 2.0, ... }) into the #N → value bindings the macro body's expression evaluator will read off Vars.Local. Skips non-numeric (string) args silently — those are unresolved variable references that the evaluator's own VariableExpression–Unevaluated diagnostic will surface; writing a string into Vars.Local would just propagate the residue. public static Dictionary BuildLocalBindings(JsonObject args) Parameters args JsonObject Returns Dictionary" }, "api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html", "title": "Class RetainedCommonVariableReadingSyntax | HiAPI-C# 2025", - "summary": "Class RetainedCommonVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll 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. public class RetainedCommonVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RetainedCommonVariableReadingSyntax 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 RetainedCommonVariableReadingSyntax() Default constructor. public RetainedCommonVariableReadingSyntax() RetainedCommonVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public RetainedCommonVariableReadingSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 RetainedCommonVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll 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. public class RetainedCommonVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RetainedCommonVariableReadingSyntax 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 RetainedCommonVariableReadingSyntax() Default constructor. public RetainedCommonVariableReadingSyntax() RetainedCommonVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public RetainedCommonVariableReadingSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html", "title": "Class SubProgramCallSyntax | HiAPI-C# 2025", - "summary": "Class SubProgramCallSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram and partial-program calls (M98 P{seq}{prog} split encoding). Custom Macro B argument-binding calls (G65 / G66 / G67) live in FanucMacroCallSyntax and FanucModalMacroSyntax — those handle the argument-letter-to-#1..#26 binding and the macro-call frame isolation that M98 deliberately does not provide. public class SubProgramCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramCallSyntax 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 SubProgramCallSyntax() Parameterless instance for bundle composition (no XML state). public SubProgramCallSyntax() SubProgramCallSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public SubProgramCallSyntax(XElement src) Parameters src XElement Root element named XName. 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." + "summary": "Class SubProgramCallSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram and partial-program calls (M98 P{seq}{prog} split encoding). Custom Macro B argument-binding calls (G65 / G66 / G67) live in FanucMacroCallSyntax and FanucModalMacroSyntax — those handle the argument-letter-to-#1..#26 binding and the macro-call frame isolation that M98 deliberately does not provide. public class SubProgramCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramCallSyntax 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 SubProgramCallSyntax() Parameterless instance for bundle composition (no XML state). public SubProgramCallSyntax() SubProgramCallSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public SubProgramCallSyntax(XElement src) Parameters src XElement Root element named XName. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html", "title": "Class SubProgramReturnSyntax | HiAPI-C# 2025", - "summary": "Class SubProgramReturnSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Consumes Fanuc-style M99 subprogram-return blocks and pops one CallStack frame. Plain M99 relies on the natural pipeline tail — the inlined body's last block is followed in layers[0] by the caller's next block, so the “return” happens implicitly; this syntax only consumes the M99 trigger (so UnconsumedCheckSyntax doesn't warn), stamps a SubProgramReturn diagnostic section, and writes the popped CallStack for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller's N{seq} block via ReplaceSource(IEnumerable). The caller's file is resolved from the popped frame's CallerFilePath; the scan uses the same SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) helper as FanucGotoSyntax, with hardcoded Fanuc-default probes (QuoteCommentSyntax + HeadIndexSyntax with symbol \"N\") because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against FanucGotoIterationDependency, sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after SubProgramCallSyntax at the head. Needs FanucGotoIterationDependency, ProjectFolderDependency, SegmenterDependency, SyntaxPieceLayerDependency, FileIndexCounterDependency on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. public class SubProgramReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramReturnSyntax 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 SubProgramReturnSyntax() Parameterless instance with default probe list. public SubProgramReturnSyntax() SubProgramReturnSyntax(XElement, string, IProgress) Loads LabelProbeSyntaxes from XML produced by MakeXmlSource(string, string, bool). An absent wrapper falls back to the default probe list. public SubProgramReturnSyntax(XElement src, string baseDirectory, IProgress progress) Parameters src XElement Root element named XName. baseDirectory string Project base directory propagated to child XFactory calls. progress IProgress Diagnostic sink propagated to child factories. Properties LabelProbeSyntaxes Ordered list of probe syntaxes run on each candidate block during the M99 P{seq} caller-side scan, before the integer label predicate fires. Defaults match Fanuc / Mazak / Syntec (parenthesised comment stripper + N head-index parser); API customers can swap or extend (e.g. add a TailCommentSyntax for ; end-of-block comments, or insert a BlockSkipSyntax to exclude /-prefixed candidates) without subclassing. Mirrors the same hosted-list pattern as LabelProbeSyntaxes. public List LabelProbeSyntaxes { 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 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." + "summary": "Class SubProgramReturnSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Consumes Fanuc-style M99 subprogram-return blocks and pops one CallStack frame. Plain M99 relies on the natural pipeline tail — the inlined body's last block is followed in layers[0] by the caller's next block, so the “return” happens implicitly; this syntax only consumes the M99 trigger (so UnconsumedCheckSyntax doesn't warn), stamps a SubProgramReturn diagnostic section, and writes the popped CallStack for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller's N{seq} block via ReplaceSource(IEnumerable). The caller's file is resolved from the popped frame's CallerFilePath; the scan uses the same SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) helper as FanucGotoSyntax, with hardcoded Fanuc-default probes (QuoteCommentSyntax + HeadIndexSyntax with symbol \"N\") because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against FanucGotoIterationDependency, sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after SubProgramCallSyntax at the head. Needs FanucGotoIterationDependency, ProjectFolderDependency, SegmenterDependency, SyntaxPieceLayerDependency, FileIndexCounterDependency on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. public class SubProgramReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramReturnSyntax 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 SubProgramReturnSyntax() Parameterless instance with default probe list. public SubProgramReturnSyntax() SubProgramReturnSyntax(XElement, string, IProgress) Loads LabelProbeSyntaxes from XML produced by MakeXmlSource(string, string, bool). An absent wrapper falls back to the default probe list. public SubProgramReturnSyntax(XElement src, string baseDirectory, IProgress progress) Parameters src XElement Root element named XName. baseDirectory string Project base directory propagated to child XFactory calls. progress IProgress Diagnostic sink propagated to child factories. Properties LabelProbeSyntaxes Ordered list of probe syntaxes run on each candidate block during the M99 P{seq} caller-side scan, before the integer label predicate fires. Defaults match Fanuc / Mazak / Syntec (parenthesised comment stripper + N head-index parser); API customers can swap or extend (e.g. add a TailCommentSyntax for ; end-of-block comments, or insert a BlockSkipSyntax to exclude /-prefixed candidates) without subclassing. Mirrors the same hosted-list pattern as LabelProbeSyntaxes. public List LabelProbeSyntaxes { 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 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html", "title": "Class VariableEvaluatorSyntax | HiAPI-C# 2025", - "summary": "Class VariableEvaluatorSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) 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, ISentenceCarrier, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). public class VariableEvaluatorSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VariableEvaluatorSyntax 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 VariableEvaluatorSyntax() Default constructor. public VariableEvaluatorSyntax() VariableEvaluatorSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool); restores RuntimeVariableLookups via XFactory dispatch. public VariableEvaluatorSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string RuntimeVariableLookups Per-preset list of context-sensitive lookups (block-local Vars.Local / Vars.Volatile, position reads, runtime-state reads). Walked in list order, before the dependency-bound IVariableLookups. Brand presets configure this; the list is XML-serialised so a runner rebuilt from XML keeps its brand-specific lookups (each impl is stateless and dispatches by its XName via XFactory). public List RuntimeVariableLookups { get; set; } Property Value List XName XML element name for Generators 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 VariableEvaluatorSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) 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, ISentenceCarrier, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). public class VariableEvaluatorSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VariableEvaluatorSyntax 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 VariableEvaluatorSyntax() Default constructor. public VariableEvaluatorSyntax() VariableEvaluatorSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool); restores RuntimeVariableLookups via XFactory dispatch. public VariableEvaluatorSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string RuntimeVariableLookups Per-preset list of context-sensitive lookups (block-local Vars.Local / Vars.Volatile, position reads, runtime-state reads). Walked in list order, before the dependency-bound IVariableLookups. Brand presets configure this; the list is XML-serialised so a runner rebuilt from XML keeps its brand-specific lookups (each impl is stateless and dispatches by its XName via XFactory). public List RuntimeVariableLookups { get; set; } Property Value List XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html", "title": "Class VolatileVariableReadingSyntax | HiAPI-C# 2025", - "summary": "Class VolatileVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll 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. public class VolatileVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VolatileVariableReadingSyntax 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 VolatileVariableReadingSyntax() Default constructor. public VolatileVariableReadingSyntax() VolatileVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public VolatileVariableReadingSyntax(XElement src) Parameters src XElement Fields VolatileMax Inclusive upper bound of the non-retained common range (#499). public const int VolatileMax = 499 Field Value int VolatileMin Inclusive lower bound of the non-retained common range (#100). public const int VolatileMin = 100 Field Value int Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 VolatileVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll 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. public class VolatileVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VolatileVariableReadingSyntax 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 VolatileVariableReadingSyntax() Default constructor. public VolatileVariableReadingSyntax() VolatileVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public VolatileVariableReadingSyntax(XElement src) Parameters src XElement Fields VolatileMax Inclusive upper bound of the non-retained common range (#499). public const int VolatileMax = 499 Field Value int VolatileMin Inclusive lower bound of the non-retained common range (#100). public const int VolatileMin = 100 Field Value int Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.EvaluationSyntaxs.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.html", "title": "Namespace Hi.NcParsers.EvaluationSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.EvaluationSyntaxs Classes CallStackUtil Push / pop helpers for the per-block CallStack section. Both produce a fresh deep-cloned JsonObject ready to stamp onto an inlined piece (push site) or onto an M99 return block (pop site); the caller is responsible for deep-cloning again if it distributes the same stamp across multiple pieces of an L-repetition. Pairs with ModalCarrySyntax at the Logic stage: explicit push / pop writes seed the section at frame boundaries, ModalCarry copies it forward to every block in between so each block is self-contained for cache-dump readers and downstream consumers (notably M99 P{seq} reading the top frame's CallerFilePath). LabelScanUtil Shared “re-segment a file and skip pieces until a label matches” scan, used by both FanucGotoSyntax (unconditional GOTO redirect) and SubProgramReturnSyntax (M99 P{seq} jump into the caller file). Reads the file via ReadLines(int, string, string), segments through the provided ISegmenter, runs the probeSyntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF. Returns null when no block matches — the caller's responsibility to surface the appropriate diagnostic. The probes are idempotent because the downstream Parsing bundle re-runs the same syntaxes on the yielded pieces with no-op effect (the regex patterns no longer match once the N-prefix is consumed and the parenthesised comment stripped). MacroFileResolver Shared subprogram-/macro-file resolver for Fanuc-style O lookups consumed by SubProgramCallSyntax (M98 / M198) and FanucMacroCallSyntax (G65). Single helper so the three path forms — file name, project-relative path, absolute path — are produced together at one site and each caller gets exactly the form it should consume: FileName — bare O####.NC form the resolver matched. Stored in JSON sections (FanucMacroCall, SubProgramCall) as the structural NC-language identifier; independent of which folder the dependency happened to be pointing at, so the JSON stays portable across environments. RelPath — relative path against the project base directory (e.g. \"NC/O1234.NC\"). Used as the IndexedFileLine label so diagnostics on inlined blocks align with the relative form already used for the main file label. AbsPath — absolute path. Used only at the ReadLines(int, string, string) call site for actual disk I/O; never persisted, never returned to JSON. Lives inside the resolver's stack frame and the segmenter's enumeration. Filename lookup order (first match wins) mirrors real Fanuc fallback: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). MacroInlineUtil Shared inline mechanism for Fanuc Custom Macro B body expansion — used by both FanucMacroCallSyntax (one-shot) and FanucModalMacroSyntax's expansion phase (modal trigger). Both callers do the same three things on every produced SyntaxPiece: stamp a FanucMacroCall clone, stamp a fresh MacroFrame id, and stamp argument bindings into Vars.Local. Centralising lets the two call sites stay in lock-step — frame allocation, file-index allocation, and the inline-piece JSON shape are guaranteed identical. Frame ids share the same FileIndexCounterDependency counter as file indices — both just need within-session uniqueness and the counter is rewound on session start in lock-step with the pipeline. The main NC file is allocated index 0 first, so all inline frame ids land at > 0 and never collide with main. 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. SubProgramCallSyntax Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram and partial-program calls (M98 P{seq}{prog} split encoding). Custom Macro B argument-binding calls (G65 / G66 / G67) live in FanucMacroCallSyntax and FanucModalMacroSyntax — those handle the argument-letter-to-#1..#26 binding and the macro-call frame isolation that M98 deliberately does not provide. SubProgramReturnSyntax Consumes Fanuc-style M99 subprogram-return blocks and pops one CallStack frame. Plain M99 relies on the natural pipeline tail — the inlined body's last block is followed in layers[0] by the caller's next block, so the “return” happens implicitly; this syntax only consumes the M99 trigger (so UnconsumedCheckSyntax doesn't warn), stamps a SubProgramReturn diagnostic section, and writes the popped CallStack for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller's N{seq} block via ReplaceSource(IEnumerable). The caller's file is resolved from the popped frame's CallerFilePath; the scan uses the same SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) helper as FanucGotoSyntax, with hardcoded Fanuc-default probes (QuoteCommentSyntax + HeadIndexSyntax with symbol \"N\") because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against FanucGotoIterationDependency, sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after SubProgramCallSyntax at the head. Needs FanucGotoIterationDependency, ProjectFolderDependency, SegmenterDependency, SyntaxPieceLayerDependency, FileIndexCounterDependency on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. VariableEvaluatorSyntax Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) 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, ISentenceCarrier, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). 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. Structs MacroFileResolver.ResolvedFile Tri-form resolution result. FileName is the bare matched name; RelPath is that name joined with the folder portion of the dependency (relative when the folder is configured relative, absolute fallback when it isn't); AbsPath is the fully-resolved I/O target." + "summary": "Namespace Hi.NcParsers.EvaluationSyntaxs Classes CallStackUtil Push / pop helpers for the per-block CallStack section. Both produce a fresh deep-cloned JsonObject ready to stamp onto an inlined piece (push site) or onto an M99 return block (pop site); the caller is responsible for deep-cloning again if it distributes the same stamp across multiple pieces of an L-repetition. Pairs with ModalCarrySyntax at the Logic stage: explicit push / pop writes seed the section at frame boundaries, ModalCarry copies it forward to every block in between so each block is self-contained for cache-dump readers and downstream consumers (notably M99 P{seq} reading the top frame's CallerFilePath). LabelScanUtil Shared “re-segment a file and skip pieces until a label matches” scan, used by both FanucGotoSyntax (unconditional GOTO redirect) and SubProgramReturnSyntax (M99 P{seq} jump into the caller file). Reads the file via ReadLines(int, string, string), segments through the provided ISegmenter, runs the caller-supplied probe syntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF. Returns null when no block matches — the caller's responsibility to surface the appropriate diagnostic. The probes are idempotent because the downstream Parsing bundle re-runs the same syntaxes on the yielded pieces with no-op effect (the regex patterns no longer match once the N-prefix is consumed and the parenthesised comment stripped). MacroFileResolver Shared subprogram-/macro-file resolver for Fanuc-style O lookups consumed by SubProgramCallSyntax (M98 / M198) and FanucMacroCallSyntax (G65). Single helper so the three path forms — file name, project-relative path, absolute path — are produced together at one site and each caller gets exactly the form it should consume: FileName — bare O####.NC form the resolver matched. Stored in JSON sections (FanucMacroCall, SubProgramCall) as the structural NC-language identifier; independent of which folder the dependency happened to be pointing at, so the JSON stays portable across environments. RelPath — relative path against the project base directory (e.g. \"NC/O1234.NC\"). Used as the IndexedFileLine label so diagnostics on inlined blocks align with the relative form already used for the main file label. AbsPath — absolute path. Used only at the ReadLines(int, string, string) call site for actual disk I/O; never persisted, never returned to JSON. Lives inside the resolver's stack frame and the segmenter's enumeration. Filename lookup order (first match wins) mirrors real Fanuc fallback: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). MacroInlineUtil Shared inline mechanism for Fanuc Custom Macro B body expansion — used by both FanucMacroCallSyntax (one-shot) and FanucModalMacroSyntax's expansion phase (modal trigger). Both callers do the same three things on every produced SyntaxPiece: stamp a FanucMacroCall clone, stamp a fresh MacroFrame id, and stamp argument bindings into Vars.Local. Centralising lets the two call sites stay in lock-step — frame allocation, file-index allocation, and the inline-piece JSON shape are guaranteed identical. Frame ids share the same FileIndexCounterDependency counter as file indices — both just need within-session uniqueness and the counter is rewound on session start in lock-step with the pipeline. The main NC file is allocated index 0 first, so all inline frame ids land at > 0 and never collide with main. 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. SubProgramCallSyntax Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram and partial-program calls (M98 P{seq}{prog} split encoding). Custom Macro B argument-binding calls (G65 / G66 / G67) live in FanucMacroCallSyntax and FanucModalMacroSyntax — those handle the argument-letter-to-#1..#26 binding and the macro-call frame isolation that M98 deliberately does not provide. SubProgramReturnSyntax Consumes Fanuc-style M99 subprogram-return blocks and pops one CallStack frame. Plain M99 relies on the natural pipeline tail — the inlined body's last block is followed in layers[0] by the caller's next block, so the “return” happens implicitly; this syntax only consumes the M99 trigger (so UnconsumedCheckSyntax doesn't warn), stamps a SubProgramReturn diagnostic section, and writes the popped CallStack for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller's N{seq} block via ReplaceSource(IEnumerable). The caller's file is resolved from the popped frame's CallerFilePath; the scan uses the same SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) helper as FanucGotoSyntax, with hardcoded Fanuc-default probes (QuoteCommentSyntax + HeadIndexSyntax with symbol \"N\") because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against FanucGotoIterationDependency, sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after SubProgramCallSyntax at the head. Needs FanucGotoIterationDependency, ProjectFolderDependency, SegmenterDependency, SyntaxPieceLayerDependency, FileIndexCounterDependency on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. VariableEvaluatorSyntax Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) 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, ISentenceCarrier, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). 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. Structs MacroFileResolver.ResolvedFile Tri-form resolution result. FileName is the bare matched name; RelPath is that name joined with the folder portion of the dependency (relative when the folder is configured relative, absolute fallback when it isn't); AbsPath is the fully-resolved I/O target." }, "api/Hi.NcParsers.IGetSentence.html": { "href": "api/Hi.NcParsers.IGetSentence.html", @@ -3952,7 +3952,7 @@ "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Initializers.INcInitializer.html": { "href": "api/Hi.NcParsers.Initializers.INcInitializer.html", @@ -3962,7 +3962,7 @@ "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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Initializers.html": { "href": "api/Hi.NcParsers.Initializers.html", @@ -3972,22 +3972,22 @@ "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[]) 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 Generators 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 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 Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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 Generators 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 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 Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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 Generators 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 Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html", "title": "Class UnconsumedCheckSyntax | HiAPI-C# 2025", - "summary": "Class UnconsumedCheckSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Emits diagnostic warnings for content remaining after all upstream syntaxes have run: unconsumed Parsing entries and non-empty UnparsedText. Flags listed in ExcludedFlags are silently ignored. Must be placed at the end of NcSyntaxList. public class UnconsumedCheckSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnconsumedCheckSyntax 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 UnconsumedCheckSyntax() Creates a checker with an empty ExcludedFlags set. public UnconsumedCheckSyntax() UnconsumedCheckSyntax(XElement) Loads excluded flag names from child elements. public UnconsumedCheckSyntax(XElement src) Parameters src XElement Root element named XName. Properties ExcludedFlags Parsing flags/keys that are known but intentionally unhandled. public HashSet ExcludedFlags { get; set; } Property Value HashSet Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 UnconsumedCheckSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Emits diagnostic warnings for content remaining after all upstream syntaxes have run: unconsumed Parsing entries and non-empty UnparsedText. Flags listed in ExcludedFlags are silently ignored. Must be placed at the end of NcSyntaxList. public class UnconsumedCheckSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnconsumedCheckSyntax 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 UnconsumedCheckSyntax() Creates a checker with an empty ExcludedFlags set. public UnconsumedCheckSyntax() UnconsumedCheckSyntax(XElement) Loads excluded flag names from child elements. public UnconsumedCheckSyntax(XElement src) Parameters src XElement Root element named XName. Properties ExcludedFlags Parsing flags/keys that are known but intentionally unhandled. public HashSet ExcludedFlags { get; set; } Property Value HashSet Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.InspectionSyntaxs.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.html", @@ -4067,7 +4067,7 @@ "api/Hi.NcParsers.Keywords.FanucMacroCall.html": { "href": "api/Hi.NcParsers.Keywords.FanucMacroCall.html", "title": "Class FanucMacroCall | HiAPI-C# 2025", - "summary": "Class FanucMacroCall Namespace Hi.NcParsers.Keywords Assembly HiMech.dll One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of File with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. public class FanucMacroCall Inheritance object FanucMacroCall 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 Args Argument-letter → numeric-value map captured from the call line (e.g., G65 P9100 A1.5 B2. ⇒ { “A”: 1.5, “B”: 2.0 }). The matching Vars.Local bindings on each inlined block are derived from this via the Type-I argument-letter map (FanucMacroArgumentMap). public JsonObject Args { get; set; } Property Value JsonObject FileName Bare matched file name (e.g. “O9100.NC”). The resolver tries several fallback patterns (FilenamePatterns); this records which one hit. JSON-portable across environments — the folder context lives on the host's SubProgramFolderConfig dependency, not encoded here. public string FileName { get; set; } Property Value string L Repeat count from the L parameter; defaults to 1 when absent. public int L { get; set; } Property Value int P Macro program number from the P parameter (e.g., 9100 for O9100). public int P { get; set; } Property Value int Term Triggering keyword (always “G65”). public string Term { get; set; } Property Value string" + "summary": "Class FanucMacroCall Namespace Hi.NcParsers.Keywords Assembly HiMech.dll One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of FileName with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. public class FanucMacroCall Inheritance object FanucMacroCall 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 Args Argument-letter → numeric-value map captured from the call line (e.g., G65 P9100 A1.5 B2. ⇒ { “A”: 1.5, “B”: 2.0 }). The matching Vars.Local bindings on each inlined block are derived from this via the Type-I argument-letter map (FanucMacroArgumentMap). public JsonObject Args { get; set; } Property Value JsonObject FileName Bare matched file name (e.g. “O9100.NC”). The resolver tries several fallback patterns (FilenamePatterns); this records which one hit. JSON-portable across environments — the folder context lives on the host's SubProgramFolderConfig dependency, not encoded here. public string FileName { get; set; } Property Value string L Repeat count from the L parameter; defaults to 1 when absent. public int L { get; set; } Property Value int P Macro program number from the P parameter (e.g., 9100 for O9100). public int P { get; set; } Property Value int Term Triggering keyword (always “G65”). public string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.FanucModalMacro.html": { "href": "api/Hi.NcParsers.Keywords.FanucModalMacro.html", @@ -4342,7 +4342,7 @@ "api/Hi.NcParsers.Keywords.SubProgramReturn.html": { "href": "api/Hi.NcParsers.Keywords.SubProgramReturn.html", "title": "Class SubProgramReturn | HiAPI-C# 2025", - "summary": "Class SubProgramReturn Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. public class SubProgramReturn Inheritance object SubProgramReturn 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 JumpedToN Set to P when the M99 actually redirected control flow to the caller's N{seq} block via LazyLinkedList.ReplaceSource. Null on plain M99 (no P), and on M99 P{seq} that fell through because the jump could not be carried out. public int? JumpedToN { get; set; } Property Value int? P Optional caller sequence number from the P parameter (M99 P{seq}). Null on a plain M99. When non-null and the jump fires, JumpedToN is set to the same value; when the jump is suppressed (no caller frame, label not found, iteration limit reached) JumpedToN stays null and a warning is emitted. public int? P { get; set; } Property Value int? Term Triggering keyword (always “M99” for now). public string Term { get; set; } Property Value string" + "summary": "Class SubProgramReturn Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. public class SubProgramReturn Inheritance object SubProgramReturn 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 JumpedToN Set to P when the M99 actually redirected control flow to the caller's N{seq} block via ReplaceSource(IEnumerable). Null on plain M99 (no P), and on M99 P{seq} that fell through because the jump could not be carried out. public int? JumpedToN { get; set; } Property Value int? P Optional caller sequence number from the P parameter (M99 P{seq}). Null on a plain M99. When non-null and the jump fires, JumpedToN is set to the same value; when the jump is suppressed (no caller frame, label not found, iteration limit reached) JumpedToN stays null and a warning is emitted. public int? P { get; set; } Property Value int? Term Triggering keyword (always “M99” for now). public string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.TapeBoundary.html": { "href": "api/Hi.NcParsers.Keywords.TapeBoundary.html", @@ -4372,12 +4372,12 @@ "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. CallFrame One entry in Frames. Holds the caller-side information consumers need to “unwind” or “look back” — currently only the relative file path of the caller, used by SubProgramReturnSyntax on M99 P{seq} to locate the caller's N{seq} block. CallStack JSON-section data shape representing the active call-frame stack on a block — pushed by call-and-inline syntaxes (SubProgramCallSyntax for M98/M198, FanucMacroCallSyntax for G65, and FanucModalMacroSyntax's expansion phase for G66 implicit triggers) and popped by SubProgramReturnSyntax on M99. Every block between push and pop carries the section forward via ModalCarrySyntax; the caller's blocks before push and after pop carry the surrounding stack state (typically empty when running from the main file). The section is wrapped in a JsonObject rather than exposed as a bare JsonArray so it fits ModalCarry's \"deep-clone JsonObject\" carry pattern — the array of frames lives inside Frames. 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. FanucGoto Fanuc Custom Macro B GOTO record. Stamped on the host block by FanucGotoSyntax after the control-flow decision has been made; produced earlier by FanucGotoParsingSyntax as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO — unconditional jump. Condition is null. IF [] GOTO — conditional jump. Condition holds the expression text from inside the brackets. At parsing time N is a raw token from the source — it may be a literal (\"100\"), a variable reference (\"#1\"), or a bracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. FanucIfThen Fanuc Custom Macro B IF [] THEN single-block conditional record. Stamped on the host block by FanucIfThenSyntax after the gate decision; produced earlier by FanucIfThenParsingSyntax as a parsing-stage sub-section (Parsing.FanucIfThen) carrying the raw captured fields plus an internal PendingAssignments sub-object harvested from the body text. Spec: IF [bool-expr] THEN executes only when the condition is truthy. Unlike FanucGoto's conditional form there is no jump — the body affects the current block only, no source splice, no label scan, no iteration watchdog. The most common body shape is a single Custom Macro B assignment (#nnn = ); multiple assignments in one body are also accepted and lifted together. Condition is held as a string at parsing time so VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by FanucGotoSyntax. FanucMacroCall One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of File with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. FanucModalMacro Modal-macro-call record left by FanucModalMacroSyntax. Carries Fanuc G66 setup state forward block-to-block until cancelled by G67. The section is also written on the G67 block itself (with Term = “G67”) so cache dumps show the cancel edge; subsequent blocks then carry no section at all. Per-block expansion of the modal call into an actual macro inline at every positioning move is not yet implemented — a FanucModalMacro--NotExpanded warning is emitted on the setup block to flag the simulation gap. The setup state itself is captured faithfully so external tooling can detect \"this block sits inside a G66 modal\" via the carried section. FanucPathSmoothing Section data holder for IFanucPathSmoothingDef. FanucProgramNumber Fanuc-family program identifier header that follows a TapeBoundary line — e.g. O1234 or . Wrapper records the surface form so a parsed block can be emitted back to the original notation. 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. MacroFrame Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 modal expansion, Heidenhain LBL CALL, …) that needs local-variable isolation across call boundaries. Semantics: the value is an opaque id; only equality matters. Two blocks with the same MacroFrame id share a call frame (locals visible across them via single-step carry); two blocks with different ids do not. The id 0 is reserved for the main program frame and is returned by Get(JsonObject) when the field is absent — so a plain caller block needs no stamp and yet compares distinct from any inlined frame. Stored as a top-level JSON int (not an object section) so it stays lightweight on every inlined block. Decoupled from FanucMacroCall: that section is a diagnostic record of the call (what file, what args), while MacroFrame is the purely functional marker the local-variable I/O syntaxes consult. 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. 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. SubProgramCall Subprogram call record left by SubProgramCallSyntax on the M98 / M198 host block and on every inlined body block. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered (or sits inside) an inline of program P\". M98 and M198 share the exact same section shape. The difference between them is purely environmental — which folder the resolver looks in (SubProgramFolderConfig.InternalFolder vs ExternalFolder) — and that lives on the dependency, not in this JSON record. SubProgramReturn Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. TapeBoundary Tape leader / trailer line — the literal % that historically marked the start and end of a punched paper-tape program. ISO-style controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a file-level boundary marker. Distinct from a comment: the controller uses it as a tape/file delimiter, not as embedded operator text. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Section key holder for IToolHeightCompensationDef. Unit Section key holder + concrete implementation for IUnitDef. Vars JSON section schema for per-block variable storage. Each sub-property names a sub-section that holds a { “#nnn”: value } dictionary keyed by Fanuc-style variable id. The sub-sections partition the variable space by lifetime: Local — #1-#33, scope: macro call frame (pushed/popped by G65 / G66 / M99). Volatile — #100-#499, non-retained common; carries block-to-block, cleared by ProgramEndCleanSyntax on M02 / M30. SystemControl — #3000-#3999, controller-side system variables; offline-only round-trip record (real controller effects such as clock reset / alarm trigger / message pause are not simulated). The property types are JsonObject rather than strongly-typed dictionaries because each sub-section's keys are dynamic Fanuc variable ids (#100, #5001, …) discovered at parse time, not a fixed schema. This class exists solely to give the section name and sub-keys stable nameof() targets — instances are never constructed at runtime. 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 on every block whose source programmed a motion command, regardless of whether the resulting displacement is non-zero. A redundant G01 X10 on a block already at X10 still gets a MotionEvent; the motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) then early-return on distance <= 0 and emit no IAct. NOT carried forward across blocks. Reason for the \"programmed, not displaced\" definition: Fanuc G66 modal macro fires once per programmed motion command (per Fanuc spec — no distance gate), so FanucModalMacroSyntax.Expansion uses MotionEvent presence as its trigger. Suppressing the section on zero-distance moves would silently change G66 behaviour. The modal sibling MotionState separately latches the Group-01 mode for readers that only need to know \"what G-code is active\". 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." + "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. CallFrame One entry in Frames. Holds the caller-side information consumers need to “unwind” or “look back” — currently only the relative file path of the caller, used by SubProgramReturnSyntax on M99 P{seq} to locate the caller's N{seq} block. CallStack JSON-section data shape representing the active call-frame stack on a block — pushed by call-and-inline syntaxes (SubProgramCallSyntax for M98/M198, FanucMacroCallSyntax for G65, and FanucModalMacroSyntax's expansion phase for G66 implicit triggers) and popped by SubProgramReturnSyntax on M99. Every block between push and pop carries the section forward via ModalCarrySyntax; the caller's blocks before push and after pop carry the surrounding stack state (typically empty when running from the main file). The section is wrapped in a JsonObject rather than exposed as a bare JsonArray so it fits ModalCarry's \"deep-clone JsonObject\" carry pattern — the array of frames lives inside Frames. 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. FanucGoto Fanuc Custom Macro B GOTO record. Stamped on the host block by FanucGotoSyntax after the control-flow decision has been made; produced earlier by FanucGotoParsingSyntax as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO — unconditional jump. Condition is null. IF [] GOTO — conditional jump. Condition holds the expression text from inside the brackets. At parsing time N is a raw token from the source — it may be a literal (\"100\"), a variable reference (\"#1\"), or a bracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. FanucIfThen Fanuc Custom Macro B IF [] THEN single-block conditional record. Stamped on the host block by FanucIfThenSyntax after the gate decision; produced earlier by FanucIfThenParsingSyntax as a parsing-stage sub-section (Parsing.FanucIfThen) carrying the raw captured fields plus an internal PendingAssignments sub-object harvested from the body text. Spec: IF [bool-expr] THEN executes only when the condition is truthy. Unlike FanucGoto's conditional form there is no jump — the body affects the current block only, no source splice, no label scan, no iteration watchdog. The most common body shape is a single Custom Macro B assignment (#nnn = ); multiple assignments in one body are also accepted and lifted together. Condition is held as a string at parsing time so VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by FanucGotoSyntax. FanucMacroCall One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of FileName with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. FanucModalMacro Modal-macro-call record left by FanucModalMacroSyntax. Carries Fanuc G66 setup state forward block-to-block until cancelled by G67. The section is also written on the G67 block itself (with Term = “G67”) so cache dumps show the cancel edge; subsequent blocks then carry no section at all. Per-block expansion of the modal call into an actual macro inline at every positioning move is not yet implemented — a FanucModalMacro--NotExpanded warning is emitted on the setup block to flag the simulation gap. The setup state itself is captured faithfully so external tooling can detect \"this block sits inside a G66 modal\" via the carried section. FanucPathSmoothing Section data holder for IFanucPathSmoothingDef. FanucProgramNumber Fanuc-family program identifier header that follows a TapeBoundary line — e.g. O1234 or . Wrapper records the surface form so a parsed block can be emitted back to the original notation. 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. MacroFrame Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 modal expansion, Heidenhain LBL CALL, …) that needs local-variable isolation across call boundaries. Semantics: the value is an opaque id; only equality matters. Two blocks with the same MacroFrame id share a call frame (locals visible across them via single-step carry); two blocks with different ids do not. The id 0 is reserved for the main program frame and is returned by Get(JsonObject) when the field is absent — so a plain caller block needs no stamp and yet compares distinct from any inlined frame. Stored as a top-level JSON int (not an object section) so it stays lightweight on every inlined block. Decoupled from FanucMacroCall: that section is a diagnostic record of the call (what file, what args), while MacroFrame is the purely functional marker the local-variable I/O syntaxes consult. 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. 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. SubProgramCall Subprogram call record left by SubProgramCallSyntax on the M98 / M198 host block and on every inlined body block. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered (or sits inside) an inline of program P\". M98 and M198 share the exact same section shape. The difference between them is purely environmental — which folder the resolver looks in (SubProgramFolderConfig.InternalFolder vs ExternalFolder) — and that lives on the dependency, not in this JSON record. SubProgramReturn Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. TapeBoundary Tape leader / trailer line — the literal % that historically marked the start and end of a punched paper-tape program. ISO-style controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a file-level boundary marker. Distinct from a comment: the controller uses it as a tape/file delimiter, not as embedded operator text. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Section key holder for IToolHeightCompensationDef. Unit Section key holder + concrete implementation for IUnitDef. Vars JSON section schema for per-block variable storage. Each sub-property names a sub-section that holds a { “#nnn”: value } dictionary keyed by Fanuc-style variable id. The sub-sections partition the variable space by lifetime: Local — #1-#33, scope: macro call frame (pushed/popped by G65 / G66 / M99). Volatile — #100-#499, non-retained common; carries block-to-block, cleared by ProgramEndCleanSyntax on M02 / M30. SystemControl — #3000-#3999, controller-side system variables; offline-only round-trip record (real controller effects such as clock reset / alarm trigger / message pause are not simulated). The property types are JsonObject rather than strongly-typed dictionaries because each sub-section's keys are dynamic Fanuc variable ids (#100, #5001, …) discovered at parse time, not a fixed schema. This class exists solely to give the section name and sub-keys stable nameof() targets — instances are never constructed at runtime. 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 on every block whose source programmed a motion command, regardless of whether the resulting displacement is non-zero. A redundant G01 X10 on a block already at X10 still gets a MotionEvent; the motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) then early-return on distance <= 0 and emit no IAct. NOT carried forward across blocks. Reason for the \"programmed, not displaced\" definition: Fanuc G66 modal macro fires once per programmed motion command (per Fanuc spec — no distance gate), so FanucModalMacroSyntax.Expansion uses MotionEvent presence as its trigger. Suppressing the section on zero-distance moves would silently change G66 behaviour. The modal sibling MotionState separately latches the Group-01 mode for readers that only need to know \"what G-code is active\". 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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html", @@ -4387,22 +4387,22 @@ "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples All cases below have the current block's ProgramXyz already set (as a prior ProgramXyzSyntax would have produced) and run with no #Previous:, so GetLastProgramXyz returns Vec3d.Zero. The G17 XY plane is implicit (no PlaneSelect section means PlaneNormalDir = 2). G02 with I/J — quarter arc from (0,0,0) to (10,0,0) around (5,0,0); I=5 J=0 are incremental offsets from start to center. The G02 flag is consumed (Parsing removed once empty); MotionState + MotionEvent are written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } Modal carry of G02: no motion flag on the current block but a #Previous: MotionState.Term = \"G02\" tells us we are still in circular mode. I/J on the current block describe the arc the same way: #Previous: { \"MotionState\": { \"Term\": \"G02\" } } #BeforeBuild: { \"Parsing\": { \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } No I/J/K/R on the block — the per-block arc data is missing, so the syntax bails out early; the G02 flag stays in Parsing.Flags for some other syntax to act on (or to surface as residue if no one does): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"] }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G02\"] }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } R-format degenerate (chord = 2R, semicircle): start (0,0,0) → end (10,0,0), R=5. perpDistSq resolves to 0 so the computed center collapses to the chord midpoint (5,0,0); no sqrt drift on this branch: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"R\": 5 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } R-format non-trivial: G02 90° arc from (0,0,0) to (10,10,0) with R=10. The center comes from the cross-product + sqrt + normalize path inside ResolveCenterFromR(Vec3d, Vec3d, int, bool, double), but for this particular axis-aligned chord the rounding errors cancel and the center lands at exactly (10, 0, 0) — i.e. no ULP drift here, in contrast to e.g. McAbcCyclicPathSyntax's rad/deg round-trip: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"R\": 10 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 10, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 10, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } G03 CCW with I/J — same geometry as case 0 (start (0,0,0), end (10,0,0), I=5 J=0 → center (5,0,0)) but the G03 flag flips IsCcw to true. Direction is the only differentiating output; arc-center math is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G03\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G03\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": true, \"AdditionalCircleNum\": 0 } } Full circle G02 — start == end (both (0,0,0)), I=5 J=0 places center off-start at (5,0,0). The isFullCircle guard (chord length < 1e-6 and center-to-start > 1e-6) flips AdditionalCircleNum to 1 so a downstream motion semantic knows to draw the closed loop: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 1 } } 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." + "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) Examples All cases below have the current block's ProgramXyz already set (as a prior ProgramXyzSyntax would have produced) and run with no #Previous:, so GetLastProgramXyz returns Vec3d.Zero. The G17 XY plane is implicit (no PlaneSelect section means PlaneNormalDir = 2). G02 with I/J — quarter arc from (0,0,0) to (10,0,0) around (5,0,0); I=5 J=0 are incremental offsets from start to center. The G02 flag is consumed (Parsing removed once empty); MotionState + MotionEvent are written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } Modal carry of G02: no motion flag on the current block but a #Previous: MotionState.Term = \"G02\" tells us we are still in circular mode. I/J on the current block describe the arc the same way: #Previous: { \"MotionState\": { \"Term\": \"G02\" } } #BeforeBuild: { \"Parsing\": { \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } No I/J/K/R on the block — the per-block arc data is missing, so the syntax bails out early; the G02 flag stays in Parsing.Flags for some other syntax to act on (or to surface as residue if no one does): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"] }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G02\"] }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } R-format degenerate (chord = 2R, semicircle): start (0,0,0) → end (10,0,0), R=5. perpDistSq resolves to 0 so the computed center collapses to the chord midpoint (5,0,0); no sqrt drift on this branch: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"R\": 5 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } R-format non-trivial: G02 90° arc from (0,0,0) to (10,10,0) with R=10. The center comes from the cross-product + sqrt + normalize path inside ResolveCenterFromR(Vec3d, Vec3d, int, bool, double), but for this particular axis-aligned chord the rounding errors cancel and the center lands at exactly (10, 0, 0) — i.e. no ULP drift here, in contrast to e.g. McAbcCyclicPathSyntax's rad/deg round-trip: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"R\": 10 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 10, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 10, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } G03 CCW with I/J — same geometry as case 0 (start (0,0,0), end (10,0,0), I=5 J=0 → center (5,0,0)) but the G03 flag flips IsCcw to true. Direction is the only differentiating output; arc-center math is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G03\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G03\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": true, \"AdditionalCircleNum\": 0 } } Full circle G02 — start == end (both (0,0,0)), I=5 J=0 places center off-start at (5,0,0). The isFullCircle guard (chord length < 1e-6 and center-to-start > 1e-6) flips AdditionalCircleNum to 1 so a downstream motion semantic knows to draw the closed loop: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 1 } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M08\"] } } #AfterBuild: { \"Coolant\": { \"IsOn\": true, \"Mode\": \"Flood\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M09\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Coolant\": { \"IsOn\": false, \"Mode\": \"Off\" } } #Previous: { \"Coolant\": { \"IsOn\": true, \"Mode\": \"Mist\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Coolant\": { \"IsOn\": true, \"Mode\": \"Mist\" } } 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." + "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M08\"] } } #AfterBuild: { \"Coolant\": { \"IsOn\": true, \"Mode\": \"Flood\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M09\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Coolant\": { \"IsOn\": false, \"Mode\": \"Off\" } } #Previous: { \"Coolant\": { \"IsOn\": true, \"Mode\": \"Mist\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Coolant\": { \"IsOn\": true, \"Mode\": \"Mist\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html", @@ -4412,37 +4412,37 @@ "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples First block of the stream (no #Previous:) — stamps the default disabled section so downstream modal lookback always sees a concrete PathSmoothing: #BeforeBuild: { } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } G05.1 Q1 with no R — enables, no Level emitted: #Previous: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 1 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\" } } G05.1 Q1 R3 — enables and preserves the precision level: #Previous: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 1, \"R\": 3 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\", \"Level\": 3 } } G05.1 Q0 — disables; any prior Level is dropped (R only meaningful when enabling): #Previous: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\", \"Level\": 3 } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 0 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } 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." + "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) Examples First block of the stream (no #Previous:) — stamps the default disabled section so downstream modal lookback always sees a concrete PathSmoothing: #BeforeBuild: { } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } G05.1 Q1 with no R — enables, no Level emitted: #Previous: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 1 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\" } } G05.1 Q1 R3 — enables and preserves the precision level: #Previous: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 1, \"R\": 3 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\", \"Level\": 3 } } G05.1 Q0 — disables; any prior Level is dropped (R only meaningful when enabling): #Previous: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\", \"Level\": 3 } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 0 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples New F value with explicit G94 mode — both consumed, Unit derived as mm/min (G94 default): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G94\"], \"F\": 100 } } #AfterBuild: { \"Feedrate\": { \"FeedrateValue\": 100, \"Term\": \"G94\", \"Unit\": \"mm/min\" } } G95 mode flag only — feedrate value inherited from #Previous:; unit recomputed (mm/rev) from the new term: #Previous: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G94\", \"Unit\": \"mm/min\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G95\"] } } #AfterBuild: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } F value only (no G94/G95 on this block) alongside an unrelated M03 flag — mode inherits from #Previous:; M03 stays in Parsing.Flags because CleanupParsing is only invoked on the mode-flag branch: #Previous: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"F\": 200 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Feedrate\": { \"FeedrateValue\": 200, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } 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." + "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) Examples New F value with explicit G94 mode — both consumed, Unit derived as mm/min (G94 default): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G94\"], \"F\": 100 } } #AfterBuild: { \"Feedrate\": { \"FeedrateValue\": 100, \"Term\": \"G94\", \"Unit\": \"mm/min\" } } G95 mode flag only — feedrate value inherited from #Previous:; unit recomputed (mm/rev) from the new term: #Previous: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G94\", \"Unit\": \"mm/min\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G95\"] } } #AfterBuild: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } F value only (no G94/G95 on this block) alongside an unrelated M03 flag — mode inherits from #Previous:; M03 stays in Parsing.Flags because CleanupParsing is only invoked on the mode-flag branch: #Previous: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"F\": 200 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Feedrate\": { \"FeedrateValue\": 200, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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, ISentenceCarrier, 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." + "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, ISentenceCarrier, 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. The syntax does not consume from Parsing — the CYCL DEF cycle number and its parameters survive for downstream syntaxes / round-trip emission. CYCL DEF 247 Q339=+1 with a HeidenhainDatumTable populated so preset row 1 = (50, 50, 0) — the syntax looks up the row and writes a synthetic CoordinateId = \"DATUM_PRESET_1\" reflecting the resolved preset index: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 247, \"Q339\": \"+1\" } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 247, \"Q339\": \"+1\" }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_PRESET_1\", \"Offset_X\": 50, \"Offset_Y\": 50, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 50,50,0,1] } ] } CYCL DEF 7 #5 — datum shift table lookup via the # index (here mapped to (100, 200, 0)); CoordinateId records the resolved shift row id: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"#\": 5 } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"#\": 5 }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_SHIFT_5\", \"Offset_X\": 100, \"Offset_Y\": 200, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,200,0,1] } ] } CYCL DEF 7 X10 Y20 Z5 — direct X/Y/Z form (no # index) writes the values straight into the offset; no HeidenhainDatumTable dep is required. CoordinateId is the literal \"DATUM_SHIFT_DIRECT\" sentinel: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"X\": 10, \"Y\": 20, \"Z\": 5 } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"X\": 10, \"Y\": 20, \"Z\": 5 }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_SHIFT_DIRECT\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } Constructors HeidenhainCoordinateOffsetSyntax() Initializes a new instance with default settings. public HeidenhainCoordinateOffsetSyntax() HeidenhainCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, 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) Examples Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. The syntax does not consume from Parsing — the CYCL DEF cycle number and its parameters survive for downstream syntaxes / round-trip emission. CYCL DEF 247 Q339=+1 with a HeidenhainDatumTable populated so preset row 1 = (50, 50, 0) — the syntax looks up the row and writes a synthetic CoordinateId = \"DATUM_PRESET_1\" reflecting the resolved preset index: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 247, \"Q339\": \"+1\" } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 247, \"Q339\": \"+1\" }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_PRESET_1\", \"Offset_X\": 50, \"Offset_Y\": 50, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 50,50,0,1] } ] } CYCL DEF 7 #5 — datum shift table lookup via the # index (here mapped to (100, 200, 0)); CoordinateId records the resolved shift row id: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"#\": 5 } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"#\": 5 }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_SHIFT_5\", \"Offset_X\": 100, \"Offset_Y\": 200, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,200,0,1] } ] } CYCL DEF 7 X10 Y20 Z5 — direct X/Y/Z form (no # index) writes the values straight into the offset; no HeidenhainDatumTable dep is required. CoordinateId is the literal \"DATUM_SHIFT_DIRECT\" sentinel: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"X\": 10, \"Y\": 20, \"Z\": 5 } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"X\": 10, \"Y\": 20, \"Z\": 5 }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_SHIFT_DIRECT\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } Constructors HeidenhainCoordinateOffsetSyntax() Initializes a new instance with default settings. public HeidenhainCoordinateOffsetSyntax() HeidenhainCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.html", @@ -4452,102 +4452,102 @@ "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples G90 (absolute) on the block — the syntax early-returns without touching Parsing.X/Y/Z, even though the values look like incremental deltas: #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G91 (incremental) with a #Previous: block carrying MachineCoordinateState=(100,200,300). Under the identity ProgramToMcTransform chain, GetLastProgramXyz recovers program XYZ equal to MC, so each axis in Parsing is rewritten to lastAbs + incremental: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 110, \"Y\": 220, \"Z\": 330 } } G91 + Parsing.G28 sub-section — exercises the second entry of the default WorkingPathList; the root Parsing has no X/Y/Z so the first path no-ops, but the [“Parsing”,“G28”] path picks up the G28 intermediate axes and resolves them against the same lastProgramXyz: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 5, \"Y\": 10, \"Z\": 15 } } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 105, \"Y\": 210, \"Z\": 315 } } } 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." + "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) Examples G90 (absolute) on the block — the syntax early-returns without touching Parsing.X/Y/Z, even though the values look like incremental deltas: #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G91 (incremental) with a #Previous: block carrying MachineCoordinateState=(100,200,300). Under the identity ProgramToMcTransform chain, GetLastProgramXyz recovers program XYZ equal to MC, so each axis in Parsing is rewritten to lastAbs + incremental: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 110, \"Y\": 220, \"Z\": 330 } } G91 + Parsing.G28 sub-section — exercises the second entry of the default WorkingPathList; the root Parsing has no X/Y/Z so the first path no-ops, but the [“Parsing”,“G28”] path picks up the G28 intermediate axes and resolves them against the same lastProgramXyz: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 5, \"Y\": 10, \"Z\": 15 } } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 105, \"Y\": 210, \"Z\": 315 } } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples The Mat4d arrays below are written as 16 plain doubles in column-major order; the first 12 are the identity 3×3 rotation, the last 4 are the translation column (tx, ty, tz, 1). So a pure translation by (tx, ty, tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. G54 flag on the block but no IIsoCoordinateConfig on the dep list — the resolved offset falls back to Vec3d.Zero and the composed translation is the identity matrix: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G54\"] } } #AfterBuild: { \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G55 flag with an IsoCoordinateTable providing G55 → (100, 50, -200) — the offset is written to the CoordinateOffset section and the same translation is composed into the transform chain: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G55\"] } } #AfterBuild: { \"CoordinateOffset\": { \"CoordinateId\": \"G55\", \"Offset_X\": 100, \"Offset_Y\": 50, \"Offset_Z\": -200 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1] } ] } No coordinate flag on the current block (e.g. an unrelated M03) but #Previous: carried G54 — modal lookback inherits G54, the dep is re-queried (so Offset_X/Y/Z are taken from the table, not from the previous block), and the transform chain is rebuilt. The unrelated M03 flag survives in Parsing.Flags because CleanupParsing only fires on the new-coord-flag branch: #Previous: { \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1] } ] } 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." + "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) Examples The Mat4d arrays below are written as 16 plain doubles in column-major order; the first 12 are the identity 3×3 rotation, the last 4 are the translation column (tx, ty, tz, 1). So a pure translation by (tx, ty, tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. G54 flag on the block but no IIsoCoordinateConfig on the dep list — the resolved offset falls back to Vec3d.Zero and the composed translation is the identity matrix: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G54\"] } } #AfterBuild: { \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G55 flag with an IsoCoordinateTable providing G55 → (100, 50, -200) — the offset is written to the CoordinateOffset section and the same translation is composed into the transform chain: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G55\"] } } #AfterBuild: { \"CoordinateOffset\": { \"CoordinateId\": \"G55\", \"Offset_X\": 100, \"Offset_Y\": 50, \"Offset_Z\": -200 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1] } ] } No coordinate flag on the current block (e.g. an unrelated M03) but #Previous: carried G54 — modal lookback inherits G54, the dep is re-queried (so Offset_X/Y/Z are taken from the table, not from the previous block), and the transform chain is rebuilt. The unrelated M03 flag survives in Parsing.Flags because CleanupParsing only fires on the new-coord-flag branch: #Previous: { \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1] } ] } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples All cases below avoid the cos/sin rotation math by using either G69 cancel (identity), the first-block default (no transform composed), or modal carry of an identity Mat4d. Mat4d arrays are 16 plain doubles in column-major order — see IsoCoordinateOffsetSyntax for the template. A future round can add a non-trivial G68 case by dumping the actual output and pasting the 16 doubles back into the marker. First block of the stream (no #Previous:, no G68/G69 on the block) — CarryForwardFromPrevious stamps a default TiltTransform.Term = \"G69\" so downstream lookback always sees a concrete state; no transform chain entry is composed: #BeforeBuild: { } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" } } G69 flag on the block — TryHandleG69 consumes it, writes the G69 section, and composes the identity Mat4d into the chain so any previously composed tilt rotation is overridden: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G69\"] } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Modal carry: no G68/G69 on the current block, but #Previous: carries an active G68 with identity tilt Mat4d in its chain. The current block inherits TiltTransform.Term = \"G68\" and re-composes the same Mat4d into its own chain; unrelated M03 flag survives because this syntax does not touch Parsing during the carry path: #Previous: { \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Non-trivial G68 rotation: 90° around the Z axis (no I/J/K → plane normal of the default G17 plane) at the origin (no X/Y/Z → all 0). The Mat4d column-major layout is rotation 90° about Z (no translation since pivot is the origin); cos(π/2) is not exactly 0 in IEEE-754 so the diagonal carries the 6.123233995736766E-17 drift produced by Math.Cos(Math.PI / 2) — preserved verbatim per the no-shorthand marker convention: #BeforeBuild: { \"Parsing\": { \"G68\": { \"R\": 90 } } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [6.123233995736766E-17, 1, 0, 0, -1, 6.123233995736766E-17, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] } ] } 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." + "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) Examples All cases below avoid the cos/sin rotation math by using either G69 cancel (identity), the first-block default (no transform composed), or modal carry of an identity Mat4d. Mat4d arrays are 16 plain doubles in column-major order — see IsoCoordinateOffsetSyntax for the template. A future round can add a non-trivial G68 case by dumping the actual output and pasting the 16 doubles back into the marker. First block of the stream (no #Previous:, no G68/G69 on the block) — CarryForwardFromPrevious stamps a default TiltTransform.Term = \"G69\" so downstream lookback always sees a concrete state; no transform chain entry is composed: #BeforeBuild: { } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" } } G69 flag on the block — TryHandleG69 consumes it, writes the G69 section, and composes the identity Mat4d into the chain so any previously composed tilt rotation is overridden: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G69\"] } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Modal carry: no G68/G69 on the current block, but #Previous: carries an active G68 with identity tilt Mat4d in its chain. The current block inherits TiltTransform.Term = \"G68\" and re-composes the same Mat4d into its own chain; unrelated M03 flag survives because this syntax does not touch Parsing during the carry path: #Previous: { \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Non-trivial G68 rotation: 90° around the Z axis (no I/J/K → plane normal of the default G17 plane) at the origin (no X/Y/Z → all 0). The Mat4d column-major layout is rotation 90° about Z (no translation since pivot is the origin); cos(π/2) is not exactly 0 in IEEE-754 so the diagonal carries the 6.123233995736766E-17 drift produced by Math.Cos(Math.PI / 2) — preserved verbatim per the no-shorthand marker convention: #BeforeBuild: { \"Parsing\": { \"G68\": { \"R\": 90 } } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [6.123233995736766E-17, 1, 0, 0, -1, 6.123233995736766E-17, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] } ] } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1] — see IsoCoordinateOffsetSyntax for the column-major template. First block of the stream (no #Previous:) — the syntax stamps a zero-offset section and an identity translation in the chain so downstream lookback always sees a concrete state: #BeforeBuild: { } #AfterBuild: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G52 X10 Y20 Z5 on a non-first block alongside an unrelated M03 flag — the G52 sub-section is consumed (removed from Parsing) and the translation is composed into the chain; the unrelated flag stays because this syntax does not call CleanupParsing: #Previous: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"G52\": { \"X\": 10, \"Y\": 20, \"Z\": 5 } } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } No G52 on the current block but #Previous: had a non-zero offset — modal lookback inherits it (with the translation re-composed into this block's chain): #Previous: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } 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." + "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) Examples Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1] — see IsoCoordinateOffsetSyntax for the column-major template. First block of the stream (no #Previous:) — the syntax stamps a zero-offset section and an identity translation in the chain so downstream lookback always sees a concrete state: #BeforeBuild: { } #AfterBuild: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G52 X10 Y20 Z5 on a non-first block alongside an unrelated M03 flag — the G52 sub-section is consumed (removed from Parsing) and the translation is composed into the chain; the unrelated flag stays because this syntax does not call CleanupParsing: #Previous: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"G52\": { \"X\": 10, \"Y\": 20, \"Z\": 5 } } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } No G52 on the current block but #Previous: had a non-zero offset — modal lookback inherits it (with the translation re-composed into this block's chain): #Previous: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples G00 explicit + MachineCoordinateState on the block — both the modal MotionState and the one-shot MotionEvent are written; IsRapid is set only on rapid (G00); the parsing flag is consumed and Parsing is cleaned up: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G00\"] }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G00\" }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true } } G01 explicit + MC — same shape but IsRapid is omitted on the event section (only written when true): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G01\"] }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G01\" }, \"MotionEvent\": { \"Form\": \"McLinear\" } } No motion flag on the current block but MachineCoordinateState is present (e.g. a downstream syntax already wrote the endpoint) — the previous block's MotionState.Term is the only way to know G00 vs G01, so the modal carry path fires: #Previous: { \"MotionState\": { \"Term\": \"G01\" } } #BeforeBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G01\" }, \"MotionEvent\": { \"Form\": \"McLinear\" } } 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." + "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) Examples G00 explicit + MachineCoordinateState on the block — both the modal MotionState and the one-shot MotionEvent are written; IsRapid is set only on rapid (G00); the parsing flag is consumed and Parsing is cleaned up: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G00\"] }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G00\" }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true } } G01 explicit + MC — same shape but IsRapid is omitted on the event section (only written when true): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G01\"] }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G01\" }, \"MotionEvent\": { \"Form\": \"McLinear\" } } No motion flag on the current block but MachineCoordinateState is present (e.g. a downstream syntax already wrote the endpoint) — the previous block's MotionState.Term is the only way to know G00 vs G01, so the modal carry path fires: #Previous: { \"MotionState\": { \"Term\": \"G01\" } } #BeforeBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G01\" }, \"MotionEvent\": { \"Form\": \"McLinear\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 XYZ on a first block (no #Previous:) — FindPreviousMc falls back to Vec3d.Zero, transform defaults to identity, so ProgramXyz equals MachineCoordinateState: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G53 with only Z specified — FindPreviousMc picks up X/Y from the previous block's MachineCoordinateState; Z is overwritten: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": -200 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"Z\": 0 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": 0 }, \"ProgramXyz\": { \"X\": 100, \"Y\": 50, \"Z\": 0 } } G91 active on the same block → G53 is ignored per ISO standard; nothing is consumed and no machine-state section is written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } 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." + "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 XYZ on a first block (no #Previous:) — FindPreviousMc falls back to Vec3d.Zero, transform defaults to identity, so ProgramXyz equals MachineCoordinateState: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G53 with only Z specified — FindPreviousMc picks up X/Y from the previous block's MachineCoordinateState; Z is overwritten: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": -200 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"Z\": 0 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": 0 }, \"ProgramXyz\": { \"X\": 100, \"Y\": 50, \"Z\": 0 } } G91 active on the same block → G53 is ignored per ISO standard; nothing is consumed and no machine-state section is written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. 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) Examples Cases below run with no IMachineAxisConfig on the dep list, so the syntax uses the A/B/C fallback (a configuration warning is emitted but does not affect the JSON). The syntax is the tail-pass rotary-wrap centraliser — upstream rotary writers (McAbcSyntax, G28, G53.1, ...) store raw degrees and let this pass resolve to the shortest cyclic path. Current B is within ±180° of the previous B — no wrap needed; the value is rewritten in place but equals the input: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 10 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 10 } } Current B is 270° but previous B is 0° — the shortest path is the other way around, so the value is rewritten as -90° (mathematically equivalent, geometrically the same orientation, but signalling the shorter rotation to a downstream motion consumer). 270/0 round-trips through ToRad→Cycle→ToDeg with no rounding noise (1.5π → -0.5π → -90 exactly); other angle pairs (e.g. 350° → -10°) emit a trailing ULP-scale drift instead: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": -90 } } First block of the stream (no #Previous:) — no anchor to resolve against, so the syntax early-returns and the raw value is preserved verbatim: #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 350 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 350 } } CompoundMotion.Items walk — two items chain: item 0 cycles against the previous block's modal B = 0° (270° → -90°), and item 1 cycles against item 0's post-cycle -90° (170° → -190°, since the shorter path from -90° to 170° wraps backward through -180°). If item 1 had used the previous-block anchor instead of the chained anchor, 170° would have stayed at 170° (already in the ±180° window around 0°), so the test discriminates between chain and no-chain: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": 270 } }, { \"MachineCoordinateState\": { \"B\": 170 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": -90 } }, { \"MachineCoordinateState\": { \"B\": -190 } } ] } } 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." + "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. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. 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) Examples Cases below run with no IMachineAxisConfig on the dep list, so the syntax uses the A/B/C fallback (a configuration warning is emitted but does not affect the JSON). The syntax is the tail-pass rotary-wrap centraliser — upstream rotary writers (McAbcSyntax, G28, G53.1, ...) store raw degrees and let this pass resolve to the shortest cyclic path. Current B is within ±180° of the previous B — no wrap needed; the value is rewritten in place but equals the input: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 10 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 10 } } Current B is 270° but previous B is 0° — the shortest path is the other way around, so the value is rewritten as -90° (mathematically equivalent, geometrically the same orientation, but signalling the shorter rotation to a downstream motion consumer). 270/0 round-trips through ToRad→Cycle→ToDeg with no rounding noise (1.5π → -0.5π → -90 exactly); other angle pairs (e.g. 350° → -10°) emit a trailing ULP-scale drift instead: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": -90 } } First block of the stream (no #Previous:) — no anchor to resolve against, so the syntax early-returns and the raw value is preserved verbatim: #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 350 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 350 } } CompoundMotion.Items walk — two items chain: item 0 cycles against the previous block's modal B = 0° (270° → -90°), and item 1 cycles against item 0's post-cycle -90° (170° → -190°, since the shorter path from -90° to 170° wraps backward through -180°). If item 1 had used the previous-block anchor instead of the chained anchor, 170° would have stayed at 170° (already in the ±180° window around 0°), so the test discriminates between chain and no-chain: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": 270 } }, { \"MachineCoordinateState\": { \"B\": 170 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": -90 } }, { \"MachineCoordinateState\": { \"B\": -190 } } ] } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples Cases 1 and 2 inject a TestDeps.AxisConfig declaring B and C as Rotary. Values are stored as raw degrees; shortest-cyclic resolution is a downstream pass via McAbcCyclicPathSyntax. No IMachineAxisConfig dep on the list — early-return no-op (the syntax only fires when rotary axes are declared): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } AxisConfig declares B+C rotary; Parsing.B/C are consumed into a freshly created MachineCoordinateState section (X/Y/Z are deliberately left out so McXyzSyntax can still derive XYZ later — see class summary): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 } } Only Parsing.B on the current block; #Previous: carries a full MC including C=0. The missing C is filled from the per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode, string)): #Previous: { \"MachineCoordinateState\": { \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"Parsing\": { \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 30, \"C\": 0 } } 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." + "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) Examples Cases 1 and 2 inject a TestDeps.AxisConfig declaring B and C as Rotary. Values are stored as raw degrees; shortest-cyclic resolution is a downstream pass via McAbcCyclicPathSyntax. No IMachineAxisConfig dep on the list — early-return no-op (the syntax only fires when rotary axes are declared): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } AxisConfig declares B+C rotary; Parsing.B/C are consumed into a freshly created MachineCoordinateState section (X/Y/Z are deliberately left out so McXyzSyntax can still derive XYZ later — see class summary): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 } } Only Parsing.B on the current block; #Previous: carries a full MC including C=0. The missing C is filled from the per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode, string)): #Previous: { \"MachineCoordinateState\": { \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"Parsing\": { \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 30, \"C\": 0 } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples All cases below stay on the non-dynamic branch (no PivotTransformSource entry in the chain) so the RTCP re-derivation path is skipped. Block has no MachineCoordinateState section at all (pure parse-only) — the syntax early-returns and the block is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G00\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G00\"] } } MC already complete (all three of X/Y/Z present) — the second guard fires and the section is preserved verbatim (no overwrite even if a #Previous: MC differed): #BeforeBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Rotary-only MC on a rotary-only block (e.g. a 5-axis B+C trunnion machine running G00 B45. C90.) — missing X/Y/Z are copied from the #Previous: block's MC; the rotary keys keep their existing positions (insertion order) and X/Y/Z are appended. The previous block's MC carries the modal rotary state alongside X/Y/Z, but the fallback only reads X/Y/Z from it: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300, \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90, \"X\": 100, \"Y\": 200, \"Z\": 300 } } 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." + "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) Examples All cases below stay on the non-dynamic branch (no PivotTransformSource entry in the chain) so the RTCP re-derivation path is skipped. Block has no MachineCoordinateState section at all (pure parse-only) — the syntax early-returns and the block is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G00\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G00\"] } } MC already complete (all three of X/Y/Z present) — the second guard fires and the section is preserved verbatim (no overwrite even if a #Previous: MC differed): #BeforeBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Rotary-only MC on a rotary-only block (e.g. a 5-axis B+C trunnion machine running G00 B45. C90.) — missing X/Y/Z are copied from the #Previous: block's MC; the rotary keys keep their existing positions (insertion order) and X/Y/Z are appended. The previous block's MC carries the modal rotary state alongside X/Y/Z, but the fallback only reads X/Y/Z from it: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300, \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90, \"X\": 100, \"Y\": 200, \"Z\": 300 } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples Root ProgramXyz only, no ProgramToMcTransform chain — composed transform is identity, so MC equals ProgramXyz: #BeforeBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Root MachineCoordinateState already present — guarded by the non-null check, so an upstream syntax's explicit MC is preserved verbatim (the derivation from ProgramXyz is skipped): #BeforeBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } CompoundMotion.Items[*] with ProgramXyz but no MachineCoordinateState — each item receives its own derived MC; items that already had MC (or had no ProgramXyz) are left alone: #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"ProgramXyz\": { \"X\": 1, \"Y\": 2, \"Z\": 3 } }, { \"MachineCoordinateState\": { \"X\": 9, \"Y\": 9, \"Z\": 9 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"ProgramXyz\": { \"X\": 1, \"Y\": 2, \"Z\": 3 }, \"MachineCoordinateState\": { \"X\": 1, \"Y\": 2, \"Z\": 3 } }, { \"MachineCoordinateState\": { \"X\": 9, \"Y\": 9, \"Z\": 9 } } ] } } 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." + "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) Examples Root ProgramXyz only, no ProgramToMcTransform chain — composed transform is identity, so MC equals ProgramXyz: #BeforeBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Root MachineCoordinateState already present — guarded by the non-null check, so an upstream syntax's explicit MC is preserved verbatim (the derivation from ProgramXyz is skipped): #BeforeBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } CompoundMotion.Items[*] with ProgramXyz but no MachineCoordinateState — each item receives its own derived MC; items that already had MC (or had no ProgramXyz) are left alone: #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"ProgramXyz\": { \"X\": 1, \"Y\": 2, \"Z\": 3 } }, { \"MachineCoordinateState\": { \"X\": 9, \"Y\": 9, \"Z\": 9 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"ProgramXyz\": { \"X\": 1, \"Y\": 2, \"Z\": 3 }, \"MachineCoordinateState\": { \"X\": 1, \"Y\": 2, \"Z\": 3 } }, { \"MachineCoordinateState\": { \"X\": 9, \"Y\": 9, \"Z\": 9 } } ] } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G17\"] } } #AfterBuild: { \"PlaneSelect\": { \"Term\": \"G17\", \"Plane\": \"XY\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G18\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"PlaneSelect\": { \"Term\": \"G18\", \"Plane\": \"ZX\" } } #Previous: { \"PlaneSelect\": { \"Term\": \"G19\", \"Plane\": \"YZ\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"PlaneSelect\": { \"Term\": \"G19\", \"Plane\": \"YZ\" } } 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." + "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G17\"] } } #AfterBuild: { \"PlaneSelect\": { \"Term\": \"G17\", \"Plane\": \"XY\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G18\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"PlaneSelect\": { \"Term\": \"G18\", \"Plane\": \"ZX\" } } #Previous: { \"PlaneSelect\": { \"Term\": \"G19\", \"Plane\": \"YZ\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"PlaneSelect\": { \"Term\": \"G19\", \"Plane\": \"YZ\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples G90 explicit — flag consumed, Positioning written with Mode=“Absolute”: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G90\"] } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" } } G91 explicit — flag consumed, Mode=“Incremental”: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G91\"] } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } No positioning flag on the block but #Previous: carried G91 — modal lookback inherits G91; the unrelated M03 flag is left alone: #Previous: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } 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." + "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) Examples G90 explicit — flag consumed, Positioning written with Mode=“Absolute”: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G90\"] } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" } } G91 explicit — flag consumed, Mode=“Incremental”: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G91\"] } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } No positioning flag on the block but #Previous: carried G91 — modal lookback inherits G91; the unrelated M03 flag is left alone: #Previous: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html", "title": "Class ProgramEndCleanSyntax | HiAPI-C# 2025", - "summary": "Class ProgramEndCleanSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. public class ProgramEndCleanSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndCleanSyntax 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 M30 with a populated Vars.Volatile — the dictionary is wiped to an empty JsonObject in place (assignment, not removal, so downstream snapshots can distinguish “cleared on program end” from “block never had volatile data”): #BeforeBuild: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"Vars\": { \"Volatile\": { \"#100\": 1.5, \"#101\": 2.5 } } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"Vars\": { \"Volatile\": {} } } M02 with an active G66 FanucModalMacro and no pre-existing Vars — the modal is overwritten with a G67-shaped cancel marker (P/L dropped), and a fresh Vars.Volatile dictionary is created: #BeforeBuild: { \"ProgramEnd\": { \"Term\": \"M02\" }, \"FanucModalMacro\": { \"Term\": \"G66\", \"P\": 1234, \"L\": 1 } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M02\" }, \"FanucModalMacro\": { \"Term\": \"G67\" }, \"Vars\": { \"Volatile\": {} } } No ProgramEnd on the block (regular machining line) — the guard rejects the block; Vars.Volatile is left intact for downstream blocks to inherit via carry: #BeforeBuild: { \"Vars\": { \"Volatile\": { \"#100\": 1.5 } } } #AfterBuild: { \"Vars\": { \"Volatile\": { \"#100\": 1.5 } } } Constructors ProgramEndCleanSyntax() Default constructor. public ProgramEndCleanSyntax() ProgramEndCleanSyntax(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); no state. public ProgramEndCleanSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 ProgramEndCleanSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. public class ProgramEndCleanSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndCleanSyntax 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 M30 with a populated Vars.Volatile — the dictionary is wiped to an empty JsonObject in place (assignment, not removal, so downstream snapshots can distinguish “cleared on program end” from “block never had volatile data”): #BeforeBuild: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"Vars\": { \"Volatile\": { \"#100\": 1.5, \"#101\": 2.5 } } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"Vars\": { \"Volatile\": {} } } M02 with an active G66 FanucModalMacro and no pre-existing Vars — the modal is overwritten with a G67-shaped cancel marker (P/L dropped), and a fresh Vars.Volatile dictionary is created: #BeforeBuild: { \"ProgramEnd\": { \"Term\": \"M02\" }, \"FanucModalMacro\": { \"Term\": \"G66\", \"P\": 1234, \"L\": 1 } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M02\" }, \"FanucModalMacro\": { \"Term\": \"G67\" }, \"Vars\": { \"Volatile\": {} } } No ProgramEnd on the block (regular machining line) — the guard rejects the block; Vars.Volatile is left intact for downstream blocks to inherit via carry: #BeforeBuild: { \"Vars\": { \"Volatile\": { \"#100\": 1.5 } } } #AfterBuild: { \"Vars\": { \"Volatile\": { \"#100\": 1.5 } } } Constructors ProgramEndCleanSyntax() Default constructor. public ProgramEndCleanSyntax() ProgramEndCleanSyntax(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); no state. public ProgramEndCleanSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M30\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M30\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M02\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M02\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } 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." + "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M30\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M30\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M02\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M02\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M00\"] } } #AfterBuild: { \"ProgramStop\": { \"Term\": \"M00\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M01\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ProgramStop\": { \"Term\": \"M01\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M01\", \"M00\"] } } #AfterBuild: { \"ProgramStop\": { \"Term\": \"M00\" } } 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." + "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M00\"] } } #AfterBuild: { \"ProgramStop\": { \"Term\": \"M00\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M01\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ProgramStop\": { \"Term\": \"M01\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M01\", \"M00\"] } } #AfterBuild: { \"ProgramStop\": { \"Term\": \"M00\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples SUT uses Default so the default WorkingPathList points at the Parsing root. All cases stay on the identity-transform path so GetLastProgramXyz simply returns the previous block's MC. Full X/Y/Z in Parsing — values are read directly (no lookback), Parsing.X/Y/Z are consumed, ProgramXyz section is written; CleanupParsing removes the now-empty Parsing: #BeforeBuild: { \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Only Z in Parsing with a #Previous: block carrying MachineCoordinateState=(50,60,70) — under the identity transform GetLastProgramXyz equals previous MC, so X/Y are inherited from prev and Z is taken from the parsed literal: #Previous: { \"MachineCoordinateState\": { \"X\": 50, \"Y\": 60, \"Z\": 70 } } #BeforeBuild: { \"Parsing\": { \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 50, \"Y\": 60, \"Z\": 0 } } Parsing present but with no X/Y/Z (e.g. an unrelated M03 flag) — ResolveProgramXyz returns null and the syntax early-returns; the block is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } 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." + "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) Examples SUT uses Default so the default WorkingPathList points at the Parsing root. All cases stay on the identity-transform path so GetLastProgramXyz simply returns the previous block's MC. Full X/Y/Z in Parsing — values are read directly (no lookback), Parsing.X/Y/Z are consumed, ProgramXyz section is written; CleanupParsing removes the now-empty Parsing: #BeforeBuild: { \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Only Z in Parsing with a #Previous: block carrying MachineCoordinateState=(50,60,70) — under the identity transform GetLastProgramXyz equals previous MC, so X/Y are inherited from prev and Z is taken from the parsed literal: #Previous: { \"MachineCoordinateState\": { \"X\": 50, \"Y\": 60, \"Z\": 70 } } #BeforeBuild: { \"Parsing\": { \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 50, \"Y\": 60, \"Z\": 0 } } Parsing present but with no X/Y/Z (e.g. an unrelated M03 flag) — ResolveProgramXyz returns null and the syntax early-returns; the block is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html", @@ -4557,7 +4557,7 @@ "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 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) Constructors ReferenceReturnSyntax() Initializes a new instance with default settings (BareG28 = Alarm). 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 BareG28 Behaviour for a G28 block with no axis specifiers. Defaults to Alarm. public BareG28Behavior BareG28 { get; set; } Property Value BareG28Behavior 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." + "summary": "Class ReferenceReturnSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G28 reference point return syntax. Behaviour is documented in detail on the example attached to BareG28Behavior; this class is the ISituNcSyntax implementation that the BareG28 property configures. 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) Constructors ReferenceReturnSyntax() Initializes a new instance with default settings (BareG28 = Alarm). 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 BareG28 Behaviour for a G28 block with no axis specifiers. Defaults to Alarm. public BareG28Behavior BareG28 { get; set; } Property Value BareG28Behavior 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html", @@ -4567,7 +4567,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) Examples Unlike IsoCoordinateOffsetSyntax (Fanuc/ISO), this Siemens variant does not consume the coordinate flag from Parsing.Flags — the flag stays for downstream syntaxes / reconstruction. Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. G54 with an IsoCoordinateTable providing G54 → (10, 20, -100) — same shape as IsoCoordinateOffsetSyntax but the G54 flag survives: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G54\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G54\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1] } ] } Siemens-extended G505 with a table entry for the same id — proves the syntax recognises the extended series, not only the ISO-compat G54–G57 subset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G505\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G505\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G505\", \"Offset_X\": 100, \"Offset_Y\": 50, \"Offset_Z\": -200 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1] } ] } G500 cancel with no IIsoCoordinateConfig on the dep list — falls back to Vec3d.Zero; the resolved offset is zero and the composed translation is identity (matching the special case inside GetCoordinateOffset(string) for G500): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G500\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G500\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G500\", \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } 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." + "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) Examples Unlike IsoCoordinateOffsetSyntax (Fanuc/ISO), this Siemens variant does not consume the coordinate flag from Parsing.Flags — the flag stays for downstream syntaxes / reconstruction. Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. G54 with an IsoCoordinateTable providing G54 → (10, 20, -100) — same shape as IsoCoordinateOffsetSyntax but the G54 flag survives: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G54\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G54\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1] } ] } Siemens-extended G505 with a table entry for the same id — proves the syntax recognises the extended series, not only the ISO-compat G54–G57 subset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G505\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G505\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G505\", \"Offset_X\": 100, \"Offset_Y\": 50, \"Offset_Z\": -200 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1] } ] } G500 cancel with no IIsoCoordinateConfig on the dep list — falls back to Vec3d.Zero; the resolved offset is zero and the composed translation is identity (matching the special case inside GetCoordinateOffset(string) for G500): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G500\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G500\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G500\", \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.Siemens.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Siemens.html", @@ -4577,12 +4577,12 @@ "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) Examples New S + M03 (CW) — both consumed; SpindleSpeed section written with the converted direction enum string: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"S\": 2000 } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 2000, \"Direction\": \"CW\" } } M04 (CCW) only — RPM inherited from #Previous:; direction updated to the new CCW state: #Previous: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CW\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M04\"] } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CCW\" } } M05 (STOP) only — RPM still carried from #Previous: for bidirectional round-tripping; downstream consumers gate on Direction == STOP rather than RPM == 0: #Previous: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CW\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M05\"] } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"STOP\" } } 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." + "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) Examples New S + M03 (CW) — both consumed; SpindleSpeed section written with the converted direction enum string: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"S\": 2000 } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 2000, \"Direction\": \"CW\" } } M04 (CCW) only — RPM inherited from #Previous:; direction updated to the new CCW state: #Previous: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CW\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M04\"] } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CCW\" } } M05 (STOP) only — RPM still carried from #Previous: for bidirectional round-tripping; downstream consumers gate on Direction == STOP rather than RPM == 0: #Previous: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CW\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M05\"] } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"STOP\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html", @@ -4592,22 +4592,22 @@ "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) Examples T5 + M06 — full tool change on one block; both T and M06 flag consumed, Term written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M06\"], \"T\": 5 } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": true, \"Term\": \"M06\" } } T5 alone alongside an unrelated flag — modal arming only, no actual change; IsChange=false and Term omitted. M03 is left in place because CleanupParsing only runs on the M06 branch: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"T\": 7 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ToolChange\": { \"ToolId\": 7, \"IsChange\": false } } M06 alone — T comes from #Previous: modal lookback; IsChange=true, Term=“M06”: #Previous: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": false } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M06\"] } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": true, \"Term\": \"M06\" } } 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." + "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) Examples T5 + M06 — full tool change on one block; both T and M06 flag consumed, Term written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M06\"], \"T\": 5 } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": true, \"Term\": \"M06\" } } T5 alone alongside an unrelated flag — modal arming only, no actual change; IsChange=false and Term omitted. M03 is left in place because CleanupParsing only runs on the M06 branch: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"T\": 7 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ToolChange\": { \"ToolId\": 7, \"IsChange\": false } } M06 alone — T comes from #Previous: modal lookback; IsChange=true, Term=“M06”: #Previous: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": false } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M06\"] } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": true, \"Term\": \"M06\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples All cases below have no ToolOrientation section and no TiltTransform entry in the chain — the composed translation therefore lies along UnitZ (the identity tilt's AxialNormal), so Mat4d.Trans = (0, 0, height_mm). G43 H1 with a TestDeps.ToolOffset mapping offset 1 to 99.98 mm — full consume from Parsing.G43, positive sign on G43: #BeforeBuild: { \"Parsing\": { \"G43\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1] } ] } G49 cancel flag — writes a sentinel G49 section with Offset_mm = 0, OffsetId = 0, and composes an identity Mat4d so any previously composed tool-height translation is reset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G49\"] } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G49\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } No G43/G44/G49 on the current block but #Previous: carries an active G43 H1 — modal lookback inherits the term + offset id, re-queries the tool table, and re-composes the translation. The unrelated M03 flag survives because the consume path only triggers when an ISO term is on the current block: #Previous: { \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1] } ] } G44 H1 with the same TestDeps.ToolOffset offset-1 → 99.98 mm — G44 negates the table value, so Offset_mm = -99.98 and the composed translation lies along -UnitZ. The X/Y components of toolOrientation * -99.98 land on IEEE-754 negative zero (0 * -99.98 = -0.0), which System.Text.Json emits literally as -0: #BeforeBuild: { \"Parsing\": { \"G44\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": -99.98, \"Term\": \"G44\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, -0,-0,-99.98,1] } ] } 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." + "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) Examples All cases below have no ToolOrientation section and no TiltTransform entry in the chain — the composed translation therefore lies along UnitZ (the identity tilt's AxialNormal), so Mat4d.Trans = (0, 0, height_mm). G43 H1 with a TestDeps.ToolOffset mapping offset 1 to 99.98 mm — full consume from Parsing.G43, positive sign on G43: #BeforeBuild: { \"Parsing\": { \"G43\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1] } ] } G49 cancel flag — writes a sentinel G49 section with Offset_mm = 0, OffsetId = 0, and composes an identity Mat4d so any previously composed tool-height translation is reset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G49\"] } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G49\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } No G43/G44/G49 on the current block but #Previous: carries an active G43 H1 — modal lookback inherits the term + offset id, re-queries the tool table, and re-composes the translation. The unrelated M03 flag survives because the consume path only triggers when an ISO term is on the current block: #Previous: { \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1] } ] } G44 H1 with the same TestDeps.ToolOffset offset-1 → 99.98 mm — G44 negates the table value, so Offset_mm = -99.98 and the composed translation lies along -UnitZ. The X/Y components of toolOrientation * -99.98 land on IEEE-754 negative zero (0 * -99.98 = -0.0), which System.Text.Json emits literally as -0: #BeforeBuild: { \"Parsing\": { \"G44\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": -99.98, \"Term\": \"G44\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, -0,-0,-99.98,1] } ] } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G21\"] } } #AfterBuild: { \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G20\"] } } #AfterBuild: { \"Unit\": { \"Term\": \"G20\", \"System\": \"Inch\" } } #Previous: { \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } 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." + "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) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G21\"] } } #AfterBuild: { \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G20\"] } } #AfterBuild: { \"Unit\": { \"Term\": \"G20\", \"System\": \"Inch\" } } #Previous: { \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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. 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. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. 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. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. 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 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. Enums BareG28Behavior 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, ISentenceCarrier, 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." + "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. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. 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. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. 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 G28 reference point return syntax. Behaviour is documented in detail on the example attached to BareG28Behavior; this class is the ISituNcSyntax implementation that the BareG28 property configures. 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. Enums BareG28Behavior 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, ISentenceCarrier, 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." }, "api/Hi.NcParsers.NcDiagnostic.html": { "href": "api/Hi.NcParsers.NcDiagnostic.html", @@ -4632,17 +4632,17 @@ "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) Examples #BeforeBuild.UnparsedText: /X100 Y200 #AfterBuild: { \"UnparsedText\": \"X100 Y200\", \"BlockSkip\": { \"Symbol\": \"/\", \"Layer\": 1 } } #BeforeBuild.UnparsedText: /3 G01 X0 #AfterBuild: { \"UnparsedText\": \"G01 X0\", \"BlockSkip\": { \"Symbol\": \"/\", \"Layer\": 3 } } 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." + "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) Examples #BeforeBuild.UnparsedText: /X100 Y200 #AfterBuild: { \"UnparsedText\": \"X100 Y200\", \"BlockSkip\": { \"Symbol\": \"/\", \"Layer\": 1 } } #BeforeBuild.UnparsedText: /3 G01 X0 #AfterBuild: { \"UnparsedText\": \"G01 X0\", \"BlockSkip\": { \"Symbol\": \"/\", \"Layer\": 3 } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 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) Examples #BeforeBuild.UnparsedText: (only a comment) #AfterBuild: { \"Comment\": { \"Symbol\": \"()\", \"Text\": \"only a comment\" } } #BeforeBuild.UnparsedText: G01 X100 (mid-line comment) #AfterBuild: { \"UnparsedText\": \"G01 X100\", \"Comment\": { \"Symbol\": \"()\", \"Text\": \"mid-line comment\" } } 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." + "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) Examples #BeforeBuild.UnparsedText: (only a comment) #AfterBuild: { \"Comment\": { \"Symbol\": \"()\", \"Text\": \"only a comment\" } } #BeforeBuild.UnparsedText: G01 X100 (mid-line comment) #AfterBuild: { \"UnparsedText\": \"G01 X100\", \"Comment\": { \"Symbol\": \"()\", \"Text\": \"mid-line comment\" } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html", "title": "Class TailCommentSyntax | HiAPI-C# 2025", - "summary": "Class TailCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll 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. public class TailCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TailCommentSyntax 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 #BeforeBuild.UnparsedText: ;header comment (with TailSymbol=\";\") #AfterBuild: { \"Comment\": { \"Symbol\": \";\", \"Text\": \"header comment\" } } #BeforeBuild.UnparsedText: G01 X100 ;mid comment (with TailSymbol=\";\") #AfterBuild: { \"UnparsedText\": \"G01 X100\", \"Comment\": { \"Symbol\": \";\", \"Text\": \"mid comment\" } } Constructors TailCommentSyntax(string) Creates syntax with the given tail marker; used from code or tests without XML. public TailCommentSyntax(string tailSymbol) Parameters tailSymbol string Marker that starts the tail comment segment. TailCommentSyntax(XElement) Loads TailSymbol from persisted XML. public TailCommentSyntax(XElement src) Parameters src XElement Serialized syntax element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TailSymbol First character(s) of the tail comment marker (e.g. ; or //). public string TailSymbol { get; set; } Property Value string XName XML element name for Generators 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 TailCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll 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. public class TailCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TailCommentSyntax 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 #BeforeBuild.UnparsedText: ;header comment (with TailSymbol=\";\") #AfterBuild: { \"Comment\": { \"Symbol\": \";\", \"Text\": \"header comment\" } } #BeforeBuild.UnparsedText: G01 X100 ;mid comment (with TailSymbol=\";\") #AfterBuild: { \"UnparsedText\": \"G01 X100\", \"Comment\": { \"Symbol\": \";\", \"Text\": \"mid comment\" } } Constructors TailCommentSyntax(string) Creates syntax with the given tail marker; used from code or tests without XML. public TailCommentSyntax(string tailSymbol) Parameters tailSymbol string Marker that starts the tail comment segment. TailCommentSyntax(XElement) Loads TailSymbol from persisted XML. public TailCommentSyntax(XElement src) Parameters src XElement Serialized syntax element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TailSymbol First character(s) of the tail comment marker (e.g. ; or //). public string TailSymbol { get; set; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html", @@ -4652,22 +4652,22 @@ "api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html", "title": "Class CsScriptSyntax | HiAPI-C# 2025", - "summary": "Class CsScriptSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Extracts C# script markers from the oral content of a comment. PreMarker marks a script that runs before the NC block; PostMarker marks a script that runs after. The symbols are configurable and serialized to XML. public class CsScriptSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CsScriptSyntax 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 CsScriptSyntax() Creates syntax with DefaultPreMarker and DefaultPostMarker. public CsScriptSyntax() CsScriptSyntax(XElement) Loads pre/post script markers from persisted XML. public CsScriptSyntax(XElement src) Parameters src XElement Root element named XName. Fields DefaultPostMarker Default end-of-block script delimiter when none is configured in XML. public const string DefaultPostMarker = \"@@^\" Field Value string DefaultPreMarker Default begin-of-block script delimiter when none is configured in XML. public const string DefaultPreMarker = \"@@\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostMarker Marker prefix for end-of-block script (runs after the NC block). public string PostMarker { get; set; } Property Value string PreMarker Marker prefix for begin-of-block script (runs before the NC block). public string PreMarker { get; set; } Property Value string XName XML element name for Generators 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 CsScriptSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Extracts C# script markers from the oral content of a comment. PreMarker marks a script that runs before the NC block; PostMarker marks a script that runs after. The symbols are configurable and serialized to XML. public class CsScriptSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CsScriptSyntax 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 CsScriptSyntax() Creates syntax with DefaultPreMarker and DefaultPostMarker. public CsScriptSyntax() CsScriptSyntax(XElement) Loads pre/post script markers from persisted XML. public CsScriptSyntax(XElement src) Parameters src XElement Root element named XName. Fields DefaultPostMarker Default end-of-block script delimiter when none is configured in XML. public const string DefaultPostMarker = \"@@^\" Field Value string DefaultPreMarker Default begin-of-block script delimiter when none is configured in XML. public const string DefaultPreMarker = \"@@\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostMarker Marker prefix for end-of-block script (runs after the NC block). public string PostMarker { get; set; } Property Value string PreMarker Marker prefix for begin-of-block script (runs before the NC block). public string PreMarker { get; set; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html", "title": "Class FanucGotoParsingSyntax | HiAPI-C# 2025", - "summary": "Class FanucGotoParsingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Parses Fanuc Custom Macro B GOTO phrases out of the remaining UnparsedText into a Parsing.FanucGoto sub-object. Two forms are recognised: GOTO — unconditional jump. IF [] GOTO — conditional jump. IF [...] GOTO is matched as a single phrase, not as an IF syntax composed with a GOTO syntax — Fanuc only permits the two fixed forms (the other being IF [...] THEN , out of scope here), so a phrase-level parser is more faithful and avoids parsing-ambiguity rabbit holes. is captured as a raw token (literal like \"100\", variable like \"#1\", or bracketed expression like \"#[#2+5]\"). VariableEvaluatorSyntax substitutes the resolved literal back into the same field downstream; FanucGotoSyntax then parses the final string as an int. Storing as a string at parsing time mirrors how axis tags and canned-cycle params accept #N references and the evaluator rewrites them in place. Pipeline placement: after HeadIndexSyntax (so the leading N{seq} on a block like N50 GOTO 100 has already been consumed) and after QuoteCommentSyntax (so a parenthesised (GOTO 100) inside a comment never matches). The phrase consumes the entire remaining text on the block — Fanuc allows only the GOTO / IF-GOTO phrase after any preceding head index, no other instructions on the same block. public class FanucGotoParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucGotoParsingSyntax 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 #BeforeBuild.UnparsedText: GOTO 100 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"GOTO\", \"N\": \"100\" } } } #BeforeBuild.UnparsedText: GOTO #1 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"GOTO\", \"N\": \"#1\" } } } #BeforeBuild.UnparsedText: IF [#1 GT 0] GOTO 100 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"IF...GOTO\", \"N\": \"100\", \"Condition\": \"#1 GT 0\" } } } Constructors FanucGotoParsingSyntax() Parameterless instance for bundle composition (no XML state). public FanucGotoParsingSyntax() FanucGotoParsingSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucGotoParsingSyntax(XElement src) Parameters src XElement Root element named XName. 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." + "summary": "Class FanucGotoParsingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Parses Fanuc Custom Macro B GOTO phrases out of the remaining UnparsedText into a Parsing.FanucGoto sub-object. Two forms are recognised: GOTO — unconditional jump. IF [] GOTO — conditional jump. IF [...] GOTO is matched as a single phrase, not as an IF syntax composed with a GOTO syntax — Fanuc only permits the two fixed forms (the other being IF [...] THEN , out of scope here), so a phrase-level parser is more faithful and avoids parsing-ambiguity rabbit holes. is captured as a raw token (literal like \"100\", variable like \"#1\", or bracketed expression like \"#[#2+5]\"). VariableEvaluatorSyntax substitutes the resolved literal back into the same field downstream; FanucGotoSyntax then parses the final string as an int. Storing as a string at parsing time mirrors how axis tags and canned-cycle params accept #N references and the evaluator rewrites them in place. Pipeline placement: after HeadIndexSyntax (so the leading N{seq} on a block like N50 GOTO 100 has already been consumed) and after QuoteCommentSyntax (so a parenthesised (GOTO 100) inside a comment never matches). The phrase consumes the entire remaining text on the block — Fanuc allows only the GOTO / IF-GOTO phrase after any preceding head index, no other instructions on the same block. public class FanucGotoParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucGotoParsingSyntax 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 #BeforeBuild.UnparsedText: GOTO 100 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"GOTO\", \"N\": \"100\" } } } #BeforeBuild.UnparsedText: GOTO #1 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"GOTO\", \"N\": \"#1\" } } } #BeforeBuild.UnparsedText: IF [#1 GT 0] GOTO 100 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"IF...GOTO\", \"N\": \"100\", \"Condition\": \"#1 GT 0\" } } } Constructors FanucGotoParsingSyntax() Parameterless instance for bundle composition (no XML state). public FanucGotoParsingSyntax() FanucGotoParsingSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucGotoParsingSyntax(XElement src) Parameters src XElement Root element named XName. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html", "title": "Class FanucIfThenParsingSyntax | HiAPI-C# 2025", - "summary": "Class FanucIfThenParsingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Parses the Fanuc Custom Macro B IF [] THEN single-block conditional phrase out of UnparsedText into a Parsing.FanucIfThen sub-object. Sibling to FanucGotoParsingSyntax — Fanuc spec only permits two IF-led control phrases (IF [...] GOTO handled there, IF [...] THEN handled here) so each form is matched phrase-level rather than composed from a generic IF combinator. Body shape. The body after THEN is conceptually a single statement that affects the current block only — no jump, no label scan. Almost always a Custom Macro B assignment (#nnn = ); multiple assignments in the same body (#100 = 5. #101 = #100 + 1) are also accepted. The parsing syntax pre-extracts these via GrabTagAssignment(ref string, IEnumerable, string, IEnumerable) into Parsing.FanucIfThen.PendingAssignments as {tag: rhs-string} entries — that shape lets VariableEvaluatorSyntax's pass-2 tree walk substitute each RHS to a numeric in place, and lets FanucIfThenSyntax lift the resolved entries into Parsing.Assignments only when the gate condition fires (so unfired bodies leave no trace in the readers). Pipeline placement. This syntax must run before FanucGotoParsingSyntax — the bare IF-GOTO regex over there (^IF[..]GOTO n$) is anchored, but consuming IF-THEN here first keeps the two phrases textually disjoint and avoids any future regression if either regex is loosened. Also placed before TagAssignmentSyntax so a bare IF [...] THEN #100 = 5. is not first half-eaten as a plain assignment. Raw BodyText is retained verbatim on the parsing section regardless of whether the body parsed as assignments — it carries the round-trip view and lets the evaluation syntax warn (FanucIfThen--UnsupportedBody) if no PendingAssignments were produced on a truthy condition. public class FanucIfThenParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucIfThenParsingSyntax 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: IF [#1 GT 0] THEN #100 = #500 + 1 #Output: { \"Parsing\": { \"FanucIfThen\": { \"Condition\": \"#1 GT 0\", \"BodyText\": \"#100 = #500 + 1\", \"PendingAssignments\": { \"#100\": \"#500 + 1\" } } } } Constructors FanucIfThenParsingSyntax() Parameterless instance for bundle composition (no XML state). public FanucIfThenParsingSyntax() FanucIfThenParsingSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucIfThenParsingSyntax(XElement src) Parameters src XElement Root element named XName. 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." + "summary": "Class FanucIfThenParsingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Parses the Fanuc Custom Macro B IF [] THEN single-block conditional phrase out of UnparsedText into a Parsing.FanucIfThen sub-object. Sibling to FanucGotoParsingSyntax — Fanuc spec only permits two IF-led control phrases (IF [...] GOTO handled there, IF [...] THEN handled here) so each form is matched phrase-level rather than composed from a generic IF combinator. Body shape. The body after THEN is conceptually a single statement that affects the current block only — no jump, no label scan. Almost always a Custom Macro B assignment (#nnn = ); multiple assignments in the same body (#100 = 5. #101 = #100 + 1) are also accepted. The parsing syntax pre-extracts these via GrabTagAssignment(ref string, IEnumerable, string, IEnumerable) into Parsing.FanucIfThen.PendingAssignments as {tag: rhs-string} entries — that shape lets VariableEvaluatorSyntax's pass-2 tree walk substitute each RHS to a numeric in place, and lets FanucIfThenSyntax lift the resolved entries into Parsing.Assignments only when the gate condition fires (so unfired bodies leave no trace in the readers). Pipeline placement. This syntax must run before FanucGotoParsingSyntax — the bare IF-GOTO regex over there (^IF[..]GOTO n$) is anchored, but consuming IF-THEN here first keeps the two phrases textually disjoint and avoids any future regression if either regex is loosened. Also placed before TagAssignmentSyntax so a bare IF [...] THEN #100 = 5. is not first half-eaten as a plain assignment. Raw BodyText is retained verbatim on the parsing section regardless of whether the body parsed as assignments — it carries the round-trip view and lets the evaluation syntax warn (FanucIfThen--UnsupportedBody) if no PendingAssignments were produced on a truthy condition. public class FanucIfThenParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucIfThenParsingSyntax 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: IF [#1 GT 0] THEN #100 = #500 + 1 #Output: { \"Parsing\": { \"FanucIfThen\": { \"Condition\": \"#1 GT 0\", \"BodyText\": \"#100 = #500 + 1\", \"PendingAssignments\": { \"#100\": \"#500 + 1\" } } } } Constructors FanucIfThenParsingSyntax() Parameterless instance for bundle composition (no XML state). public FanucIfThenParsingSyntax() FanucIfThenParsingSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucIfThenParsingSyntax(XElement src) Parameters src XElement Root element named XName. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html", "title": "Class FanucProgramNumberSyntax | HiAPI-C# 2025", - "summary": "Class FanucProgramNumberSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Detects a Fanuc-family program identifier header — O1234 or — that follows a TapeBoundary line, and records it under FanucProgramNumber on the block JSON. The wrapping form (bare vs angle-bracketed) is preserved in Wrapper so the block can be emitted back to its original notation. public class FanucProgramNumberSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucProgramNumberSyntax 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 Bare O1234 on the first block of the stream (no #Previous:) — start-of-stream is itself a tape boundary per IsPreviousNodeTapeBoundary(LazyLinkedListNode), so the syntax fires; the consumed text leaves nothing behind: #BeforeBuild.UnparsedText: O1234 #AfterBuild: { \"FanucProgramNumber\": { \"Number\": \"1234\", \"Wrapper\": \"None\" } } Angle-bracketed after an explicit TapeBoundary block (% on the prior line) — Wrapper records the surface form: #Previous: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: #AfterBuild: { \"FanucProgramNumber\": { \"Number\": \"5678\", \"Wrapper\": \"Angle\" } } O1234 followed by trailing text (e.g. an inline comment) — only the program-number header is consumed; the rest stays on UnparsedText for downstream syntaxes to handle: #Previous: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: O1234 (PART-A) #AfterBuild: { \"UnparsedText\": \"(PART-A)\", \"FanucProgramNumber\": { \"Number\": \"1234\", \"Wrapper\": \"None\" } } Previous block is not a tape boundary (e.g. ordinary FanucProgramNumber already in the stream) — the guard rejects the block, leaving UnparsedText intact: #Previous: { \"FanucProgramNumber\": { \"Number\": \"1000\", \"Wrapper\": \"None\" } } #BeforeBuild.UnparsedText: O9999 #AfterBuild: { \"UnparsedText\": \"O9999\" } Constructors FanucProgramNumberSyntax() Parameterless instance for bundle composition (no XML state). public FanucProgramNumberSyntax() FanucProgramNumberSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucProgramNumberSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 FanucProgramNumberSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Detects a Fanuc-family program identifier header — O1234 or — that follows a TapeBoundary line, and records it under FanucProgramNumber on the block JSON. The wrapping form (bare vs angle-bracketed) is preserved in Wrapper so the block can be emitted back to its original notation. public class FanucProgramNumberSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucProgramNumberSyntax 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 Bare O1234 on the first block of the stream (no #Previous:) — start-of-stream is itself a tape boundary per IsPreviousNodeTapeBoundary(LazyLinkedListNode), so the syntax fires; the consumed text leaves nothing behind: #BeforeBuild.UnparsedText: O1234 #AfterBuild: { \"FanucProgramNumber\": { \"Number\": \"1234\", \"Wrapper\": \"None\" } } Angle-bracketed after an explicit TapeBoundary block (% on the prior line) — Wrapper records the surface form: #Previous: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: #AfterBuild: { \"FanucProgramNumber\": { \"Number\": \"5678\", \"Wrapper\": \"Angle\" } } O1234 followed by trailing text (e.g. an inline comment) — only the program-number header is consumed; the rest stays on UnparsedText for downstream syntaxes to handle: #Previous: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: O1234 (PART-A) #AfterBuild: { \"UnparsedText\": \"(PART-A)\", \"FanucProgramNumber\": { \"Number\": \"1234\", \"Wrapper\": \"None\" } } Previous block is not a tape boundary (e.g. ordinary FanucProgramNumber already in the stream) — the guard rejects the block, leaving UnparsedText intact: #Previous: { \"FanucProgramNumber\": { \"Number\": \"1000\", \"Wrapper\": \"None\" } } #BeforeBuild.UnparsedText: O9999 #AfterBuild: { \"UnparsedText\": \"O9999\" } Constructors FanucProgramNumberSyntax() Parameterless instance for bundle composition (no XML state). public FanucProgramNumberSyntax() FanucProgramNumberSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucProgramNumberSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html", @@ -4677,27 +4677,27 @@ "api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html", "title": "Class FlagSyntax | HiAPI-C# 2025", - "summary": "Class FlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax of fully Match flag. public class FlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FlagSyntax 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 Flag generally not accomanys with variable value. The term Tag generally accomanys with variable value. Constructors FlagSyntax(IEnumerable, IEnumerable) Creates syntax from in-memory path and flag lists (tests or programmatic setup). public FlagSyntax(IEnumerable categoryPath, IEnumerable flags) Parameters categoryPath IEnumerable flags IEnumerable FlagSyntax(XElement) Loads category path and flag list items from XML. public FlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath JSON path segments (each Item) under which matched flags are stored. public List CategoryPath { get; set; } Property Value List FlagList NC tokens to detect and record as flags (exact match). public List FlagList { 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 Generators 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 FlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax of fully Match flag. public class FlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FlagSyntax 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 Flag generally not accomanys with variable value. The term Tag generally accomanys with variable value. Constructors FlagSyntax(IEnumerable, IEnumerable) Creates syntax from in-memory path and flag lists (tests or programmatic setup). public FlagSyntax(IEnumerable categoryPath, IEnumerable flags) Parameters categoryPath IEnumerable flags IEnumerable FlagSyntax(XElement) Loads category path and flag list items from XML. public FlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath JSON path segments (each Item) under which matched flags are stored. public List CategoryPath { get; set; } Property Value List FlagList NC tokens to detect and record as flags (exact match). public List FlagList { 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 Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) 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" + "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 Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", "title": "Class HeadIndexSyntax | HiAPI-C# 2025", - "summary": "Class HeadIndexSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses a leading block index (e.g. Heidenhain line numbers) after an optional HeadSymbol prefix. public class HeadIndexSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeadIndexSyntax 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 #BeforeBuild.UnparsedText: N100 X0 (with HeadSymbol=“N”) #AfterBuild: { \"UnparsedText\": \"X0\", \"IndexNote\": { \"Symbol\": \"N\", \"Number\": 100 } } #BeforeBuild.UnparsedText: N42 (lone head index, no trailing tokens; with HeadSymbol=“N”) #AfterBuild: { \"IndexNote\": { \"Symbol\": \"N\", \"Number\": 42 } } Constructors HeadIndexSyntax(string) Creates syntax with the given head symbol prefix (may be empty). public HeadIndexSyntax(string headSymbol) Parameters headSymbol string HeadIndexSyntax(XElement) Loads HeadSymbol from persisted XML. public HeadIndexSyntax(XElement src) Parameters src XElement Root element named XName. Properties HeadSymbol public string HeadSymbol { get; set; } Property Value string Remarks The Head Symbol can be not null empty string. NC Index from Heidenhain may have no head symbol. Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 HeadIndexSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses a leading block index (e.g. Heidenhain line numbers) after an optional HeadSymbol prefix. public class HeadIndexSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeadIndexSyntax 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 #BeforeBuild.UnparsedText: N100 X0 (with HeadSymbol=“N”) #AfterBuild: { \"UnparsedText\": \"X0\", \"IndexNote\": { \"Symbol\": \"N\", \"Number\": 100 } } #BeforeBuild.UnparsedText: N42 (lone head index, no trailing tokens; with HeadSymbol=“N”) #AfterBuild: { \"IndexNote\": { \"Symbol\": \"N\", \"Number\": 42 } } Constructors HeadIndexSyntax(string) Creates syntax with the given head symbol prefix (may be empty). public HeadIndexSyntax(string headSymbol) Parameters headSymbol string HeadIndexSyntax(XElement) Loads HeadSymbol from persisted XML. public HeadIndexSyntax(XElement src) Parameters src XElement Root element named XName. Properties HeadSymbol public string HeadSymbol { get; set; } Property Value string Remarks The Head Symbol can be not null empty string. NC Index from Heidenhain may have no head symbol. Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html", @@ -4707,47 +4707,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 #BeforeBuild.UnparsedText: BLK FORM 0.1 Z X+0 Y+0 Z-40 #AfterBuild: { \"Parsing\": { \"BLK FORM\": { \"Type\": \"0.1\", \"Axis\": \"Z\", \"X\": 0, \"Y\": 0, \"Z\": -40 } } } #BeforeBuild.UnparsedText: BLK FORM 0.2 X+100 Y+100 Z+0 #AfterBuild: { \"Parsing\": { \"BLK FORM\": { \"Type\": \"0.2\", \"X\": 100, \"Y\": 100, \"Z\": 0 } } } #BeforeBuild.UnparsedText: BLK FORM CYLINDER Z R50 L105 #AfterBuild: { \"Parsing\": { \"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." + "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 #BeforeBuild.UnparsedText: BLK FORM 0.1 Z X+0 Y+0 Z-40 #AfterBuild: { \"Parsing\": { \"BLK FORM\": { \"Type\": \"0.1\", \"Axis\": \"Z\", \"X\": 0, \"Y\": 0, \"Z\": -40 } } } #BeforeBuild.UnparsedText: BLK FORM 0.2 X+100 Y+100 Z+0 #AfterBuild: { \"Parsing\": { \"BLK FORM\": { \"Type\": \"0.2\", \"X\": 100, \"Y\": 100, \"Z\": 0 } } } #BeforeBuild.UnparsedText: BLK FORM CYLINDER Z R50 L105 #AfterBuild: { \"Parsing\": { \"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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 #BeforeBuild.UnparsedText: CALL PGM SubProg #AfterBuild: { \"Parsing\": { \"CALL\": { \"Target\": \"PGM\", \"Name\": \"SubProg\" } } } #BeforeBuild.UnparsedText: CALL LBL 5 #AfterBuild: { \"Parsing\": { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"5\" } } } #BeforeBuild.UnparsedText: CALL LBL MyLabel REP 3 #AfterBuild: { \"Parsing\": { \"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." + "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 #BeforeBuild.UnparsedText: CALL PGM SubProg #AfterBuild: { \"Parsing\": { \"CALL\": { \"Target\": \"PGM\", \"Name\": \"SubProg\" } } } #BeforeBuild.UnparsedText: CALL LBL 5 #AfterBuild: { \"Parsing\": { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"5\" } } } #BeforeBuild.UnparsedText: CALL LBL MyLabel REP 3 #AfterBuild: { \"Parsing\": { \"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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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" + "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 Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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. Strips the leading L and grabs axis-tag values for any of AxisTagList (X, Y, Z, U, V, W, A, B, C) that appear afterwards as {axis}{signed-value} pairs; values are parsed as floats via ToFloat(string). 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) Examples #BeforeBuild.UnparsedText: L X+10 Y+20 Z-5 #AfterBuild: { \"Parsing\": { \"L\": { \"X\": 10, \"Y\": 20, \"Z\": -5 } } } #BeforeBuild.UnparsedText: L A+45 B-15 #AfterBuild: { \"Parsing\": { \"L\": { \"A\": 45, \"B\": -15 } } } 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." + "summary": "Class HeidenhainLSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain linear movement (the leading L) syntax. Strips the leading L and grabs axis-tag values for any of AxisTagList (X, Y, Z, U, V, W, A, B, C) that appear afterwards as {axis}{signed-value} pairs; values are parsed as floats via ToFloat(string). 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) Examples #BeforeBuild.UnparsedText: L X+10 Y+20 Z-5 #AfterBuild: { \"Parsing\": { \"L\": { \"X\": 10, \"Y\": 20, \"Z\": -5 } } } #BeforeBuild.UnparsedText: L A+45 B-15 #AfterBuild: { \"Parsing\": { \"L\": { \"A\": 45, \"B\": -15 } } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 #BeforeBuild.UnparsedText: LBL 1 #AfterBuild: { \"Parsing\": { \"LBL\": { \"Name\": \"1\" } } } #BeforeBuild.UnparsedText: LBL MyLabel #AfterBuild: { \"Parsing\": { \"LBL\": { \"Name\": \"MyLabel\" } } } #BeforeBuild.UnparsedText: LBL 0 (LBL 0 is the end-of-subprogram sentinel) #AfterBuild: { \"Parsing\": { \"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." + "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 #BeforeBuild.UnparsedText: LBL 1 #AfterBuild: { \"Parsing\": { \"LBL\": { \"Name\": \"1\" } } } #BeforeBuild.UnparsedText: LBL MyLabel #AfterBuild: { \"Parsing\": { \"LBL\": { \"Name\": \"MyLabel\" } } } #BeforeBuild.UnparsedText: LBL 0 (LBL 0 is the end-of-subprogram sentinel) #AfterBuild: { \"Parsing\": { \"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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 #BeforeBuild.UnparsedText: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN #AfterBuild: { \"Parsing\": { \"PLANE\": { \"Mode\": \"SPATIAL\", \"SPA\": 30, \"SPB\": 0, \"SPC\": -10, \"SEQ\": \"+\", \"Rot\": \"COORD\", \"Positioning\": \"TURN\" } } } #BeforeBuild.UnparsedText: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE #AfterBuild: { \"Parsing\": { \"PLANE\": { \"Mode\": \"PROJECTED\", \"PROPR\": 30, \"PROMIN\": 0, \"ROT\": 45, \"SEQ\": \"-\", \"Rot\": \"TABLE\", \"Positioning\": \"MOVE\" } } } #BeforeBuild.UnparsedText: PLANE RESET #AfterBuild: { \"Parsing\": { \"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." + "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 #BeforeBuild.UnparsedText: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN #AfterBuild: { \"Parsing\": { \"PLANE\": { \"Mode\": \"SPATIAL\", \"SPA\": 30, \"SPB\": 0, \"SPC\": -10, \"SEQ\": \"+\", \"Rot\": \"COORD\", \"Positioning\": \"TURN\" } } } #BeforeBuild.UnparsedText: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE #AfterBuild: { \"Parsing\": { \"PLANE\": { \"Mode\": \"PROJECTED\", \"PROPR\": 30, \"PROMIN\": 0, \"ROT\": 45, \"SEQ\": \"-\", \"Rot\": \"TABLE\", \"Positioning\": \"MOVE\" } } } #BeforeBuild.UnparsedText: PLANE RESET #AfterBuild: { \"Parsing\": { \"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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 #BeforeBuild.UnparsedText: BEGIN PGM DEMO MM #AfterBuild: { \"Parsing\": { \"PGM\": { \"Command\": \"BEGIN\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } } #BeforeBuild.UnparsedText: END PGM DEMO MM #AfterBuild: { \"Parsing\": { \"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." + "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 #BeforeBuild.UnparsedText: BEGIN PGM DEMO MM #AfterBuild: { \"Parsing\": { \"PGM\": { \"Command\": \"BEGIN\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } } #BeforeBuild.UnparsedText: END PGM DEMO MM #AfterBuild: { \"Parsing\": { \"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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 #BeforeBuild.UnparsedText: TOOL CALL 1 Z S5000 #AfterBuild: { \"Parsing\": { \"TOOL CALL\": { \"Axis\": \"Z\", \"S\": \"5000\", \"T\": \"1\" } } } #BeforeBuild.UnparsedText: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 #AfterBuild: { \"Parsing\": { \"TOOL CALL\": { \"Axis\": \"Z\", \"S\": \"3000\", \"DL\": \"+0.5\", \"DR\": \"-0.1\", \"T\": \"MyTool\" } } } 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." + "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 #BeforeBuild.UnparsedText: TOOL CALL 1 Z S5000 #AfterBuild: { \"Parsing\": { \"TOOL CALL\": { \"Axis\": \"Z\", \"S\": \"5000\", \"T\": \"1\" } } } #BeforeBuild.UnparsedText: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 #AfterBuild: { \"Parsing\": { \"TOOL CALL\": { \"Axis\": \"Z\", \"S\": \"3000\", \"DL\": \"+0.5\", \"DR\": \"-0.1\", \"T\": \"MyTool\" } } } 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html", @@ -4757,42 +4757,42 @@ "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) 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" + "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 Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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) 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", "title": "Class NumberedFlagSyntax | HiAPI-C# 2025", - "summary": "Class NumberedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for numbered flags (prefix + number) with optional decimal support. NumberedFlagSyntax often should place after something like ParameterizedFlagSyntax. Since NumberedFlagSyntax is easy to eat those kind of flags. Single-digit integer codes are zero-padded to canonical 2-digit form (e.g. M6 → M06, G0 → G00, M3 → M03) so that downstream logic syntaxes comparing against IsoKeywords constants (which are always 2-digit form like M06) can match Fanuc-style omitted-leading-zero codes. Two-digit and decimal codes are kept as-is. public class NumberedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object NumberedFlagSyntax 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 Examples of stored canonical flags: Single-digit integer codes, padded: G0 → G00, M3 → M03 Two-digit or longer integer codes, unchanged: G54, M30 Decimal codes, unchanged: G54.1 (Fanuc extended work coordinates) Note: Parameters like P2 in G54.1P2 should be handled by TagSetupSyntax separately. Constructors NumberedFlagSyntax(IEnumerable, IEnumerable, bool) Creates a new NumberedFlagSyntax instance. public NumberedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, bool allowDecimal = true) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Code prefixes to match (e.g., [“G”, “M”]). allowDecimal bool Whether to allow decimal numbers. NumberedFlagSyntax(XElement) Loads category path, code prefixes, and decimal policy from XML. public NumberedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties AllowDecimal Whether to allow decimal numbers (e.g., G54.1). public bool AllowDecimal { get; set; } Property Value bool CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Code prefixes to match (e.g., [“G”, “M”]). public List CodePrefixes { 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 Generators 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 NumberedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for numbered flags (prefix + number) with optional decimal support. NumberedFlagSyntax often should place after something like ParameterizedFlagSyntax. Since NumberedFlagSyntax is easy to eat those kind of flags. Single-digit integer codes are zero-padded to canonical 2-digit form (e.g. M6 → M06, G0 → G00, M3 → M03) so that downstream logic syntaxes comparing against IsoKeywords constants (which are always 2-digit form like M06) can match Fanuc-style omitted-leading-zero codes. Two-digit and decimal codes are kept as-is. public class NumberedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object NumberedFlagSyntax 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 Examples of stored canonical flags: Single-digit integer codes, padded: G0 → G00, M3 → M03 Two-digit or longer integer codes, unchanged: G54, M30 Decimal codes, unchanged: G54.1 (Fanuc extended work coordinates) Note: Parameters like P2 in G54.1P2 should be handled by TagSetupSyntax separately. Constructors NumberedFlagSyntax(IEnumerable, IEnumerable, bool) Creates a new NumberedFlagSyntax instance. public NumberedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, bool allowDecimal = true) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Code prefixes to match (e.g., [“G”, “M”]). allowDecimal bool Whether to allow decimal numbers. NumberedFlagSyntax(XElement) Loads category path, code prefixes, and decimal policy from XML. public NumberedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties AllowDecimal Whether to allow decimal numbers (e.g., G54.1). public bool AllowDecimal { get; set; } Property Value bool CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Code prefixes to match (e.g., [“G”, “M”]). public List CodePrefixes { 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 Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html", "title": "Class ParameterizedFlagSyntax | HiAPI-C# 2025", - "summary": "Class ParameterizedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for flags with attached parameters (e.g., G54.1P1, G10L2P1). This is essentially a combination of main flag matching (like NumberedFlagSyntax) plus scoped TagValueSyntax for the parameters after the main flag. Note that the ParameterizedFlagSyntax often should be applied before NumberedFlagSyntax since NumberedFlagSyntax may eat the text that ParameterizedFlagSyntax should handle. public class ParameterizedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ParameterizedFlagSyntax 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 Parameters can be stored as typed values via FloatParamPrefixes and IntParamPrefixes (set via property initializer): ParamPrefixes — stored as string (text, for variables like #1, Q2) FloatParamPrefixes — stored as double when parseable, string otherwise IntParamPrefixes — stored as int when parseable, string otherwise Examples: G54.1P1 → {\"G54.1\": {\"P\": \"1\"}} (text) G68.2 X0 I180 → {\"G68.2\": {\"X\": 0.0, \"I\": 180.0}} (float via property initializer) G54.1P#1 → {\"G54.1\": {\"P\": \"#1\"}} (Fanuc variable, kept as string) G54.1PQ1 → {\"G54.1\": {\"P\": \"Q1\"}} (Heidenhain variable) Constructors ParameterizedFlagSyntax(IEnumerable, IEnumerable, IEnumerable, string, IEnumerable) Creates a new ParameterizedFlagSyntax instance. Use property initializers for FloatParamPrefixes and IntParamPrefixes to enable typed parameter storage. public ParameterizedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, IEnumerable paramPrefixes, string varPrefix, IEnumerable terminateWords = null) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Full code prefixes to match (e.g., [“G54.1”, “G10”]). paramPrefixes IEnumerable Parameter prefixes to extract (e.g., [“P”, “L”]). varPrefix string Variable prefix (e.g., “#” for Fanuc, “Q” for Heidenhain). terminateWords IEnumerable Words that stop parameter extraction. ParameterizedFlagSyntax(XElement) Loads all prefix lists, variable prefix, and terminator words from XML. public ParameterizedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Full code prefixes to match (e.g., [“G54.1”, “G10”]). public List CodePrefixes { get; set; } Property Value List FloatParamPrefixes Parameter prefixes stored as double when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List FloatParamPrefixes { get; set; } Property Value List IntParamPrefixes Parameter prefixes stored as int when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List IntParamPrefixes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string ParamPrefixes Parameter prefixes to extract as text string (e.g., [“P”, “L”, “H”]). Multiple parameters can be attached to one code. public List ParamPrefixes { get; set; } Property Value List TerminateWords Words that terminate parameter extraction (e.g., [“G”, “M”, “X”, “Y”, “Z”]). Extraction stops when encountering these prefixes followed by a number. public List TerminateWords { get; set; } Property Value List VarPrefix Variable prefix for macro variables (e.g., “#” for Fanuc, “Q” for Heidenhain). public string VarPrefix { get; set; } Property Value string XName XML element name for Generators 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 ParameterizedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for flags with attached parameters (e.g., G54.1P1, G10L2P1). This is essentially a combination of main flag matching (like NumberedFlagSyntax) plus scoped TagValueSyntax for the parameters after the main flag. Note that the ParameterizedFlagSyntax often should be applied before NumberedFlagSyntax since NumberedFlagSyntax may eat the text that ParameterizedFlagSyntax should handle. public class ParameterizedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ParameterizedFlagSyntax 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 Parameters can be stored as typed values via FloatParamPrefixes and IntParamPrefixes (set via property initializer): ParamPrefixes — stored as string (text, for variables like #1, Q2) FloatParamPrefixes — stored as double when parseable, string otherwise IntParamPrefixes — stored as int when parseable, string otherwise Examples: G54.1P1 → {\"G54.1\": {\"P\": \"1\"}} (text) G68.2 X0 I180 → {\"G68.2\": {\"X\": 0.0, \"I\": 180.0}} (float via property initializer) G54.1P#1 → {\"G54.1\": {\"P\": \"#1\"}} (Fanuc variable, kept as string) G54.1PQ1 → {\"G54.1\": {\"P\": \"Q1\"}} (Heidenhain variable) Constructors ParameterizedFlagSyntax(IEnumerable, IEnumerable, IEnumerable, string, IEnumerable) Creates a new ParameterizedFlagSyntax instance. Use property initializers for FloatParamPrefixes and IntParamPrefixes to enable typed parameter storage. public ParameterizedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, IEnumerable paramPrefixes, string varPrefix, IEnumerable terminateWords = null) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Full code prefixes to match (e.g., [“G54.1”, “G10”]). paramPrefixes IEnumerable Parameter prefixes to extract (e.g., [“P”, “L”]). varPrefix string Variable prefix (e.g., “#” for Fanuc, “Q” for Heidenhain). terminateWords IEnumerable Words that stop parameter extraction. ParameterizedFlagSyntax(XElement) Loads all prefix lists, variable prefix, and terminator words from XML. public ParameterizedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Full code prefixes to match (e.g., [“G54.1”, “G10”]). public List CodePrefixes { get; set; } Property Value List FloatParamPrefixes Parameter prefixes stored as double when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List FloatParamPrefixes { get; set; } Property Value List IntParamPrefixes Parameter prefixes stored as int when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List IntParamPrefixes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string ParamPrefixes Parameter prefixes to extract as text string (e.g., [“P”, “L”, “H”]). Multiple parameters can be attached to one code. public List ParamPrefixes { get; set; } Property Value List TerminateWords Words that terminate parameter extraction (e.g., [“G”, “M”, “X”, “Y”, “Z”]). Extraction stops when encountering these prefixes followed by a number. public List TerminateWords { get; set; } Property Value List VarPrefix Variable prefix for macro variables (e.g., “#” for Fanuc, “Q” for Heidenhain). public string VarPrefix { get; set; } Property Value string XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html", "title": "Class ShrinkIfNoDecimalPointSyntax | HiAPI-C# 2025", - "summary": "Class ShrinkIfNoDecimalPointSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Applies the “conventional type” decimal-point interpretation to coordinate values in UnparsedText. When a tag value has no decimal point (e.g. Y20), it is shrunk by the implied decimal places: Y20 → Y0.020 (3 decimal places). Values that already contain a decimal point are left unchanged. Place inside BundleSyntax before FloatTagValueSyntax so the modified text is parsed correctly by subsequent syntaxes. public class ShrinkIfNoDecimalPointSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ShrinkIfNoDecimalPointSyntax 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 Modern CNC controllers default to “calculator type” where Y20 = Y20.0. This syntax is only needed for legacy “conventional type” configurations where Y20 = Y0.020 (Fanuc DPI=0, etc.). Properties ImpliedDecimalPlaces Number of implied decimal places when no decimal point is present. 3 → 0.001 (mm), 4 → 0.0001 (inch). public int ImpliedDecimalPlaces { get; set; } Property Value int Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string Tags Tags to check for missing decimal points. Default: X, Y, Z. public List Tags { get; set; } Property Value List XName XML element name for Generators 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 ShrinkIfNoDecimalPointSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Applies the “conventional type” decimal-point interpretation to coordinate values in UnparsedText. When a tag value has no decimal point (e.g. Y20), it is shrunk by the implied decimal places: Y20 → Y0.020 (3 decimal places). Values that already contain a decimal point are left unchanged. Place inside BundleSyntax before FloatTagValueSyntax so the modified text is parsed correctly by subsequent syntaxes. public class ShrinkIfNoDecimalPointSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ShrinkIfNoDecimalPointSyntax 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 Modern CNC controllers default to “calculator type” where Y20 = Y20.0. This syntax is only needed for legacy “conventional type” configurations where Y20 = Y0.020 (Fanuc DPI=0, etc.). Properties ImpliedDecimalPlaces Number of implied decimal places when no decimal point is present. 3 → 0.001 (mm), 4 → 0.0001 (inch). public int ImpliedDecimalPlaces { get; set; } Property Value int Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string Tags Tags to check for missing decimal points. Default: X, Y, Z. public List Tags { get; set; } Property Value List XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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) 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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) 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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.TapeBoundarySyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html", "title": "Class TapeBoundarySyntax | HiAPI-C# 2025", - "summary": "Class TapeBoundarySyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Detects the % tape leader / trailer at the start of a block and records it under TapeBoundary on the block JSON. Universal across ISO controllers (Fanuc, Mazak, Syntec, Siemens) — a brand's program-identifier header (e.g. Fanuc O1234) is a separate concern handled by its own brand-specific syntax. public class TapeBoundarySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TapeBoundarySyntax 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 #BeforeBuild.UnparsedText: % #AfterBuild: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: %foo #AfterBuild: { \"TapeBoundary\": { \"Text\": \"foo\" } } #BeforeBuild.UnparsedText: % header text #AfterBuild: { \"TapeBoundary\": { \"Text\": \"header text\" } } Constructors TapeBoundarySyntax() Parameterless instance for bundle composition (no XML state). public TapeBoundarySyntax() TapeBoundarySyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public TapeBoundarySyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 IsPreviousNodeTapeBoundary(LazyLinkedListNode) Returns true if the previous block carries a TapeBoundary section, or if there is no previous block at all (start-of-stream is itself a tape boundary). Brand-specific program-identifier syntaxes use this to decide whether the current block can host a program-number header. public static bool IsPreviousNodeTapeBoundary(LazyLinkedListNode node) Parameters node LazyLinkedListNode 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." + "summary": "Class TapeBoundarySyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Detects the % tape leader / trailer at the start of a block and records it under TapeBoundary on the block JSON. Universal across ISO controllers (Fanuc, Mazak, Syntec, Siemens) — a brand's program-identifier header (e.g. Fanuc O1234) is a separate concern handled by its own brand-specific syntax. public class TapeBoundarySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TapeBoundarySyntax 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 #BeforeBuild.UnparsedText: % #AfterBuild: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: %foo #AfterBuild: { \"TapeBoundary\": { \"Text\": \"foo\" } } #BeforeBuild.UnparsedText: % header text #AfterBuild: { \"TapeBoundary\": { \"Text\": \"header text\" } } Constructors TapeBoundarySyntax() Parameterless instance for bundle composition (no XML state). public TapeBoundarySyntax() TapeBoundarySyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public TapeBoundarySyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators 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 IsPreviousNodeTapeBoundary(LazyLinkedListNode) Returns true if the previous block carries a TapeBoundary section, or if there is no previous block at all (start-of-stream is itself a tape boundary). Brand-specific program-identifier syntaxes use this to decide whether the current block can host a program-number header. public static bool IsPreviousNodeTapeBoundary(LazyLinkedListNode node) Parameters node LazyLinkedListNode 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.ParsingSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.html", @@ -4802,12 +4802,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. A JSON section is a candidate for TrackedKeys when ALL four criteria hold: Writers concentrated — one or two syntaxes own the section (e.g. LinearMotionSyntax / CircularMotionSyntax own MotionState; the call/return pair own SubProgramCall-derived state). Readers distributed — multiple downstream consumers each need the value, and none of them should walk back to find it. Single-reader sections do not benefit from blanket carry. Every block must see the section — cache-dump readers landing randomly, single-block UI views, and look-ahead syntaxes all require the section to be present on every block. Carry is unconditional — no frame-gating or other per-block veto. Sections that need conditional carry (e.g. FanucLocalVariableReadingSyntax's frame-aware Vars.Local dict-merge — carry only when MacroFrame matches) belong in the owning syntax's own carry logic, not here. A section failing any criterion should be carried through its owning syntax's own logic (single-step node.Previous read, or no carry at all if absence is meaningful — e.g. MacroFrame absent = main frame). 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 Full-set carrier (Logic ∪ PostLogic) — retained for the legacy backstop in SoftNcRunner that appends a single ModalCarry to pre-3.1.168 project syntax lists. New brand syntax kits should split into Logic + PostLogic instead. public static ModalCarrySyntax Default { get; } Property Value ModalCarrySyntax Logic Logic-stage carrier — modal sections that are written in the Logic bundle and never mutated by PostLogic. Carrying these at the end of each block's Logic bundle keeps single-step node.Previous modal lookups from Logic syntaxes correct, even when a PostLogic syntax (e.g. RadiusCompensationSyntax) does node.Next look-forward and drags subsequent blocks' Logic builds forward before the intermediate block's PostLogic ModalCarry has run. public static ModalCarrySyntax Logic { get; } Property Value ModalCarrySyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostLogic PostLogic-stage carrier — modal sections that may still be mutated by PostLogic syntaxes after Logic completes. Today only MachineCoordinateState qualifies (overwritten by RadiusCompensationSyntax with the radius-compensated position). Carrying these at the end of PostLogic ensures the modal value reflects the final, post-compensation state. public static ModalCarrySyntax PostLogic { get; } Property Value ModalCarrySyntax TrackedKeys Section keys to carry. Order-insensitive; duplicates ignored. public List TrackedKeys { get; set; } Property Value List XName XML element name for Generators 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." + "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. A JSON section is a candidate for TrackedKeys when ALL four criteria hold: Writers concentrated — one or two syntaxes own the section (e.g. LinearMotionSyntax / CircularMotionSyntax own MotionState; the call/return pair own SubProgramCall-derived state). Readers distributed — multiple downstream consumers each need the value, and none of them should walk back to find it. Single-reader sections do not benefit from blanket carry. Every block must see the section — cache-dump readers landing randomly, single-block UI views, and look-ahead syntaxes all require the section to be present on every block. Carry is unconditional — no frame-gating or other per-block veto. Sections that need conditional carry (e.g. FanucLocalVariableReadingSyntax's frame-aware Vars.Local dict-merge — carry only when MacroFrame matches) belong in the owning syntax's own carry logic, not here. A section failing any criterion should be carried through its owning syntax's own logic (single-step node.Previous read, or no carry at all if absence is meaningful — e.g. MacroFrame absent = main frame). 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 Full-set carrier (Logic ∪ PostLogic) — retained for the legacy backstop in SoftNcRunner that appends a single ModalCarry to pre-3.1.168 project syntax lists. New brand syntax kits should split into Logic + PostLogic instead. public static ModalCarrySyntax Default { get; } Property Value ModalCarrySyntax Logic Logic-stage carrier — modal sections that are written in the Logic bundle and never mutated by PostLogic. Carrying these at the end of each block's Logic bundle keeps single-step node.Previous modal lookups from Logic syntaxes correct, even when a PostLogic syntax (e.g. RadiusCompensationSyntax) does node.Next look-forward and drags subsequent blocks' Logic builds forward before the intermediate block's PostLogic ModalCarry has run. public static ModalCarrySyntax Logic { get; } Property Value ModalCarrySyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostLogic PostLogic-stage carrier — modal sections that may still be mutated by PostLogic syntaxes after Logic completes. Today only MachineCoordinateState qualifies (overwritten by RadiusCompensationSyntax with the radius-compensated position). Carrying these at the end of PostLogic ensures the modal value reflects the final, post-compensation state. public static ModalCarrySyntax PostLogic { get; } Property Value ModalCarrySyntax TrackedKeys Section keys to carry. Order-insensitive; duplicates ignored. public List TrackedKeys { get; set; } Property Value List XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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() 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 Generators 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 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 Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.PostLogicSyntaxs.html": { "href": "api/Hi.NcParsers.PostLogicSyntaxs.html", @@ -4817,7 +4817,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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -4827,12 +4827,12 @@ "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() 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", "title": "Class SingleLineSegmenter | HiAPI-C# 2025", - "summary": "Class SingleLineSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Maps each physical source line to one Sentence (no multi-line merging). public class SingleLineSegmenter : ISegmenter, IToXElement Inheritance object SingleLineSegmenter 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) Properties Name Display name of this segmenter. public string Name { get; } Property Value string XName XML element name for Generators registration. 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 SingleLineSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Maps each physical source line to one Sentence (no multi-line merging). public class SingleLineSegmenter : ISegmenter, IToXElement Inheritance object SingleLineSegmenter 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) Properties Name Display name of this segmenter. public string Name { get; } Property Value string XName XML element name for Generators registration. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcParsers.Segmenters.html": { "href": "api/Hi.NcParsers.Segmenters.html", @@ -4842,27 +4842,27 @@ "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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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, DVec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig, IMachineKinematics). 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" + "summary": "Class CompoundMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ICompoundMotionDef into acts by delegating ItemsKey to ResolveItems(JsonArray, LazyLinkedListNode, DVec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig, IMachineKinematics). 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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 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." + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Semantics.CsScriptSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CsScriptSemantic.html", @@ -4877,32 +4877,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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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 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" + "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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -4917,7 +4917,7 @@ "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() 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 Generators 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" + "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 Generators 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. Reg(XFactory) Registers SoftNcRunner and chains Reg() on every pipeline component the runner may deserialize from XML — dependencies, initializers, segmenters, parsing/logic/evaluation/post-logic/inspection syntaxes, and semantics. Idempotent; safe to call from any number of boot paths. public static void Reg(XFactory factory = null) Parameters factory XFactory 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", @@ -4927,7 +4927,7 @@ "api/Hi.NcParsers.Syntaxs.BundleSyntax.html": { "href": "api/Hi.NcParsers.Syntaxs.BundleSyntax.html", "title": "Class BundleSyntax | HiAPI-C# 2025", - "summary": "Class BundleSyntax Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Depth-First Sequential Syntaxes management. It saves space by save the LazyLinkedLists from each syntax to only one LazyLinkedLists in SoftNcRunner to get better performance. If the INcSyntax only edit the current node itself, those self-editing INcSyntax without looks-forward is suitable to put into the BundleSyntax. public class BundleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BundleSyntax 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 BundleSyntax() Creates an empty bundle (name defaults to the type name BundleSyntax). public BundleSyntax() BundleSyntax(IEnumerable) Creates a bundle with default Name from an ordered syntax list. public BundleSyntax(IEnumerable syntaxes) Parameters syntaxes IEnumerable BundleSyntax(string, IEnumerable) Creates a named bundle wrapping the given syntax list. public BundleSyntax(string name, IEnumerable syntaxes) Parameters name string syntaxes IEnumerable BundleSyntax(XElement, string, string, IProgress) Loads nested in-situ syntax elements from XML under Name. public BundleSyntax(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement baseDirectory string relFile string progress IProgress Properties Name Syntax kind name (typically the concrete type name). public string Name { get; set; } Property Value string SyntaxList Child syntaxes executed in registration order within this bundle. public List SyntaxList { get; } Property Value List XName XML element name for Generators 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 BundleSyntax Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Depth-First Sequential Syntaxes management. It saves space by save the LazyLinkedLists from each syntax to only one LazyLinkedLists in SoftNcRunner to get better performance. If the INcSyntax only edit the current node itself, those self-editing INcSyntax without looks-forward is suitable to put into the BundleSyntax. public class BundleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BundleSyntax 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 BundleSyntax() Creates an empty bundle (name defaults to the type name BundleSyntax). public BundleSyntax() BundleSyntax(IEnumerable) Creates a bundle with default Name from an ordered syntax list. public BundleSyntax(IEnumerable syntaxes) Parameters syntaxes IEnumerable BundleSyntax(string, IEnumerable) Creates a named bundle wrapping the given syntax list. public BundleSyntax(string name, IEnumerable syntaxes) Parameters name string syntaxes IEnumerable BundleSyntax(XElement, string, string, IProgress) Loads nested in-situ syntax elements from XML under Name. public BundleSyntax(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement baseDirectory string relFile string progress IProgress Properties Name Syntax kind name (typically the concrete type name). public string Name { get; set; } Property Value string SyntaxList Child syntaxes executed in registration order within this bundle. public List SyntaxList { get; } Property Value List XName XML element name for Generators 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html": { "href": "api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html", @@ -5262,7 +5262,7 @@ "api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html": { "href": "api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html", "title": "Class CsvRunnerConfig | HiAPI-C# 2025", - "summary": "Class CsvRunnerConfig Namespace Hi.Numerical.FilePlayers Assembly HiNc.dll Configuration class for CSV Runner. public class CsvRunnerConfig : IMakeXmlSource Inheritance object CsvRunnerConfig 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 CsvRunnerConfig() Default constructor. public CsvRunnerConfig() CsvRunnerConfig(XElement) Constructor from XML. public CsvRunnerConfig(XElement src) Parameters src XElement XML element Properties ActualTimeTag Actual time tag for CSV parsing. public string ActualTimeTag { get; set; } Property Value string CutterLocationPrefix Cutter Location Prefix Tag for CSV Parsing. public string CutterLocationPrefix { get; set; } Property Value string DurationTag Duration tag for CSV parsing. public string DurationTag { get; set; } Property Value string FeedrateTag_mmdmin Feedrate for Simulator Tag for CSV Parsing. public string FeedrateTag_mmdmin { get; set; } Property Value string LineBeginCsScriptTag LineBeginCsScript Tag for CSV Parsing. public string LineBeginCsScriptTag { get; set; } Property Value string LineEndCsScriptTag LineEndCsScript Tag for CSV Parsing. public string LineEndCsScriptTag { get; set; } Property Value string MachineCoordinatePrefix Machine Coordinate Prefix Tag for CSV Parsing. public string MachineCoordinatePrefix { get; set; } Property Value string ParsingDictionary Parsing dictionary for custom field parsing. Note: This dictionary cannot be serialized to XML as it contains functions. public Dictionary> ParsingDictionary { get; set; } Property Value Dictionary> SpindleDirectionTag Spindle direction Tag for CSV Parsing. public string SpindleDirectionTag { get; set; } Property Value string SpindleSpeedTag_rpm Spindle speed for Simulator Tag for CSV Parsing. public string SpindleSpeedTag_rpm { get; set; } Property Value string ToolIdTag Tool ID Tag for CSV Parsing. public string ToolIdTag { get; set; } Property Value string XName Name for XML IO. 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 CsvRunnerConfig Namespace Hi.Numerical.FilePlayers Assembly HiNc.dll Configuration class for CSV Runner. public class CsvRunnerConfig : IMakeXmlSource Inheritance object CsvRunnerConfig 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 CsvRunnerConfig() Default constructor. public CsvRunnerConfig() CsvRunnerConfig(XElement) Constructor from XML. public CsvRunnerConfig(XElement src) Parameters src XElement XML element Properties ActualTimeTag Actual time tag for CSV parsing. public string ActualTimeTag { get; set; } Property Value string CutterLocationPrefix Cutter Location Prefix Tag for CSV Parsing. public string CutterLocationPrefix { get; set; } Property Value string DurationTag Duration tag for CSV parsing. public string DurationTag { get; set; } Property Value string FeedrateTag_mmdmin Feedrate for Simulator Tag for CSV Parsing. public string FeedrateTag_mmdmin { get; set; } Property Value string LineBeginCsScriptTag LineBeginCsScript Tag for CSV Parsing. public string LineBeginCsScriptTag { get; set; } Property Value string LineEndCsScriptTag LineEndCsScript Tag for CSV Parsing. public string LineEndCsScriptTag { get; set; } Property Value string MachineCoordinatePrefix Machine Coordinate Prefix Tag for CSV Parsing. public string MachineCoordinatePrefix { get; set; } Property Value string ParsingDictionary Parsing dictionary for custom field parsing. Note: This dictionary cannot be serialized to XML as it contains functions. public Dictionary> ParsingDictionary { get; set; } Property Value Dictionary> SpindleDirectionTag Spindle direction Tag for CSV Parsing. public string SpindleDirectionTag { get; set; } Property Value string SpindleSpeedTag_rpm Spindle speed for Simulator Tag for CSV Parsing. public string SpindleSpeedTag_rpm { get; set; } Property Value string ToolIdTag Tool ID Tag for CSV Parsing. public string ToolIdTag { get; set; } Property Value string XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.FilePlayers.HardNcRunner.html": { "href": "api/Hi.Numerical.FilePlayers.HardNcRunner.html", @@ -5287,12 +5287,12 @@ "api/Hi.Numerical.HardNcEnv.html": { "href": "api/Hi.Numerical.HardNcEnv.html", "title": "Class HardNcEnv | HiAPI-C# 2025", - "summary": "Class HardNcEnv Namespace Hi.Numerical Assembly HiUniNc.dll Represents the numerical control environment containing configuration for CNC operations. public class HardNcEnv : IMakeXmlSource Inheritance object HardNcEnv 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 HardNcEnv(CncBrand) Ctor. public HardNcEnv(CncBrand cncBrand = CncBrand.Fanuc) Parameters cncBrand CncBrand HardNcEnv(XElement, string, string, IProgress) Ctor. public HardNcEnv(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string The base directory for relative paths. relFile string The relative file path. progress IProgress Optional progress reporter for nested XML factory calls. Properties AttacherAtMcZeroOnTableCoordinate Gets the attacher position at machine zero on table coordinate. public Vec3d AttacherAtMcZeroOnTableCoordinate { get; } Property Value Vec3d CncBrand Gets or sets the CNC brand/controller type. public CncBrand CncBrand { get; set; } Property Value CncBrand CommentSymbol Gets the comment symbol used by the current CNC controller. public string CommentSymbol { get; } Property Value string ConfigurationTable Gets a dictionary of CNC configuration parameters used by the system. public Dictionary ConfigurationTable { get; } Property Value Dictionary EnableArcCornerRadiusCompensation Gets or sets whether arc corner radius compensation is enabled. public bool EnableArcCornerRadiusCompensation { get; set; } Property Value bool EnableIntegerShrinkOnPositionCommand Gets or sets whether integer shrinking is enabled for position commands. e.g., “X1.” is interpreted as X=1.0 when enabled. public bool EnableIntegerShrinkOnPositionCommand { get; set; } Property Value bool EnableShortestRotary Enables shortest rotary path movement. This option does not affect Heidenhain controllers. For Heidenhain controllers, see Hi.UniNc.Heidenhain.IHeidenhainShortestRotaryPathEnabled, Hi.UniNc.Heidenhain.HeidenhainM126 and Hi.UniNc.Heidenhain.HeidenhainM127. public bool EnableShortestRotary { get; set; } Property Value bool FanucPara5003 Fanuc 5003. These bits are used to specify the type of startup/cancellation of tool radius - tool nose radius compensation. 0: type A; 1: type B; 2,3: type C. Assume always zero. Type A: A compensation vector perpendicular to the block next to the startup block or the block preceding the cancellation block is output. Type B: A compensation vector perpendicular to the startup block or cancellation block and an intersection vector are output. Type C: When the startup block or cancellation block specifies no movement operation, the tool is shifted by the cutter compensation amount in a direction perpendicular to the block next to the startup or the block before cancellation block. public byte FanucPara5003 { get; set; } Property Value byte HeidenhainDatumPresetTable For Heidenhain CYCL DEF 247 Datum Preset. public Dictionary HeidenhainDatumPresetTable { get; } Property Value Dictionary Remarks Datum Preset seems an older settings in heidenhain manual relative to Datum Shift. HeidenhainDatumShiftTable For Heidenhain CYCL DEF 7 Datum Shift. Also called Datum table in heidenhain manual. public Dictionary HeidenhainDatumShiftTable { get; } Property Value Dictionary Remarks Datum Preset seems an older settings in heidenhain manual relative to Datum Shift. HeidenhainMasterAxisChar Gets or sets the Heidenhain master rotary axis as a character (A, B, or C). public char HeidenhainMasterAxisChar { get; set; } Property Value char HeidenhainMasterAxisDir The master axis determines the behaviour of SEQ command. ex. PLANE SPATIAL SPA-77.516 SPB+0 SPC-10.365 STAY SEQ-TABLE ROT The master axis is the 1st rotary axis from the tool, or the last rotary axis from the table(depending on the machine configuration). SEQ+ positions the master axis so that it assumes a positive angle. See: TNC 640 | User's ManualDIN/ISO Programming | 1/2015 p432 public int HeidenhainMasterAxisDir { get; set; } Property Value int HomeMc Home machine coordinate. First reference position. The position may not equal to machine zero in real Fanuc controller. public Vec3d HomeMc { get; set; } Property Value Vec3d IsAxisAExisted Gets whether the A axis exists in the machine configuration. public bool IsAxisAExisted { get; } Property Value bool IsAxisBExisted Gets whether the B axis exists in the machine configuration. public bool IsAxisBExisted { get; } Property Value bool IsAxisCExisted Gets whether the C axis exists in the machine configuration. public bool IsAxisCExisted { get; } Property Value bool IsoCoordinateTable ISO coordinate table. i.e., CoordinateTable For G54 series. public IsoCoordinateTable IsoCoordinateTable { get; set; } Property Value IsoCoordinateTable MaxRotarySpeedABC_degds For safety reason, internal use only. Maximum rotary speed in degds. public Vec3d MaxRotarySpeedABC_degds { get; set; } Property Value Vec3d MaxRotarySpeedABC_radds Maximum rotary speed in rad/s. public Vec3d MaxRotarySpeedABC_radds { get; set; } Property Value Vec3d MaxSpindleSpeed_rpm Gets or sets the maximum spindle speed in revolutions per minute. public double MaxSpindleSpeed_rpm { get; set; } Property Value double MillingToolOffsetTable Gets or sets the milling tool offset table for tool compensation. public MillingToolOffsetTable MillingToolOffsetTable { get; set; } Property Value MillingToolOffsetTable RapidFeedrate_mmdmin Rapid move speed in mm/min. public double RapidFeedrate_mmdmin { get; set; } Property Value double RapidFeedrate_mmds Rapid move speed in mm/s. public double RapidFeedrate_mmds { get; set; } Property Value double RefNcLineOnInit Gets or sets the reference NC line used during initialization. public HardNcLine RefNcLineOnInit { get; set; } Property Value HardNcLine StrokeLimitAbc_rad Gets or sets the ABC axis stroke limits in radians. public Box3d StrokeLimitAbc_rad { get; set; } Property Value Box3d StrokeLimitXyz_mm Gets or sets the XYZ axis stroke limits in millimeters. public Box3d StrokeLimitXyz_mm { get; set; } Property Value Box3d ToolingMcAbc_deg Gets or sets the rotary machine coordinate for tooling operations. Defaults to HomeMc if not explicitly set. Set to NaN if tooling motion not apply the axis motion. Unit is degree. public Vec3d ToolingMcAbc_deg { get; set; } Property Value Vec3d ToolingMcAbc_rad Gets or sets the rotary machine coordinate for tooling operations. Defaults to HomeMc if not explicitly set. Set to NaN if tooling motion not apply the axis motion. Unit is radian. public Vec3d ToolingMcAbc_rad { get; set; } Property Value Vec3d ToolingMcXyz Gets or sets the translation machine coordinate for tooling operations. Defaults to HomeMc if not explicitly set. Set to NaN if tooling motion not apply the axis motion. public Vec3d ToolingMcXyz { get; set; } Property Value Vec3d ToolingTime Tool changing duration in sec. public TimeSpan ToolingTime { get; set; } Property Value TimeSpan XName Name for XML IO. public static string XName { get; } Property Value string XyzabcSolver Gets or sets the coordinate converter used for transformations between different coordinate systems. public XyzabcSolver XyzabcSolver { get; set; } Property Value XyzabcSolver Methods CheckStrokeLimit(DVec3d, IProgress) Check stroke limit. public bool CheckStrokeLimit(DVec3d mcXyzabc_mm_rad, IProgress messageKit) Parameters mcXyzabc_mm_rad DVec3d Machine coordinates in mm and radians. messageKit IProgress Message kit for error reporting. Returns bool Is under stroke limit. IsAxisExisted(int) Determines whether a specific rotary axis exists in the machine configuration. public bool IsAxisExisted(int dir) Parameters dir int The direction index (0=A, 1=B, 2=C). Returns bool True if the specified axis exists; otherwise, false. 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 HardNcEnv Namespace Hi.Numerical Assembly HiUniNc.dll Represents the numerical control environment containing configuration for CNC operations. public class HardNcEnv : IMakeXmlSource Inheritance object HardNcEnv 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 HardNcEnv(CncBrand) Ctor. public HardNcEnv(CncBrand cncBrand = CncBrand.Fanuc) Parameters cncBrand CncBrand HardNcEnv(XElement, string, string, IProgress) Ctor. public HardNcEnv(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string The base directory for relative paths. relFile string The relative file path. progress IProgress Optional progress reporter for nested XML factory calls. Properties AttacherAtMcZeroOnTableCoordinate Gets the attacher position at machine zero on table coordinate. public Vec3d AttacherAtMcZeroOnTableCoordinate { get; } Property Value Vec3d CncBrand Gets or sets the CNC brand/controller type. public CncBrand CncBrand { get; set; } Property Value CncBrand CommentSymbol Gets the comment symbol used by the current CNC controller. public string CommentSymbol { get; } Property Value string ConfigurationTable Gets a dictionary of CNC configuration parameters used by the system. public Dictionary ConfigurationTable { get; } Property Value Dictionary EnableArcCornerRadiusCompensation Gets or sets whether arc corner radius compensation is enabled. public bool EnableArcCornerRadiusCompensation { get; set; } Property Value bool EnableIntegerShrinkOnPositionCommand Gets or sets whether integer shrinking is enabled for position commands. e.g., “X1.” is interpreted as X=1.0 when enabled. public bool EnableIntegerShrinkOnPositionCommand { get; set; } Property Value bool EnableShortestRotary Enables shortest rotary path movement. This option does not affect Heidenhain controllers. For Heidenhain controllers, see Hi.UniNc.Heidenhain.IHeidenhainShortestRotaryPathEnabled, Hi.UniNc.Heidenhain.HeidenhainM126 and Hi.UniNc.Heidenhain.HeidenhainM127. public bool EnableShortestRotary { get; set; } Property Value bool FanucPara5003 Fanuc 5003. These bits are used to specify the type of startup/cancellation of tool radius - tool nose radius compensation. 0: type A; 1: type B; 2,3: type C. Assume always zero. Type A: A compensation vector perpendicular to the block next to the startup block or the block preceding the cancellation block is output. Type B: A compensation vector perpendicular to the startup block or cancellation block and an intersection vector are output. Type C: When the startup block or cancellation block specifies no movement operation, the tool is shifted by the cutter compensation amount in a direction perpendicular to the block next to the startup or the block before cancellation block. public byte FanucPara5003 { get; set; } Property Value byte HeidenhainDatumPresetTable For Heidenhain CYCL DEF 247 Datum Preset. public Dictionary HeidenhainDatumPresetTable { get; } Property Value Dictionary Remarks Datum Preset seems an older settings in heidenhain manual relative to Datum Shift. HeidenhainDatumShiftTable For Heidenhain CYCL DEF 7 Datum Shift. Also called Datum table in heidenhain manual. public Dictionary HeidenhainDatumShiftTable { get; } Property Value Dictionary Remarks Datum Preset seems an older settings in heidenhain manual relative to Datum Shift. HeidenhainMasterAxisChar Gets or sets the Heidenhain master rotary axis as a character (A, B, or C). public char HeidenhainMasterAxisChar { get; set; } Property Value char HeidenhainMasterAxisDir The master axis determines the behaviour of SEQ command. ex. PLANE SPATIAL SPA-77.516 SPB+0 SPC-10.365 STAY SEQ-TABLE ROT The master axis is the 1st rotary axis from the tool, or the last rotary axis from the table(depending on the machine configuration). SEQ+ positions the master axis so that it assumes a positive angle. See: TNC 640 | User's ManualDIN/ISO Programming | 1/2015 p432 public int HeidenhainMasterAxisDir { get; set; } Property Value int HomeMc Home machine coordinate. First reference position. The position may not equal to machine zero in real Fanuc controller. public Vec3d HomeMc { get; set; } Property Value Vec3d IsAxisAExisted Gets whether the A axis exists in the machine configuration. public bool IsAxisAExisted { get; } Property Value bool IsAxisBExisted Gets whether the B axis exists in the machine configuration. public bool IsAxisBExisted { get; } Property Value bool IsAxisCExisted Gets whether the C axis exists in the machine configuration. public bool IsAxisCExisted { get; } Property Value bool IsoCoordinateTable ISO coordinate table. i.e., CoordinateTable For G54 series. public IsoCoordinateTable IsoCoordinateTable { get; set; } Property Value IsoCoordinateTable MaxRotarySpeedABC_degds For safety reason, internal use only. Maximum rotary speed in degds. public Vec3d MaxRotarySpeedABC_degds { get; set; } Property Value Vec3d MaxRotarySpeedABC_radds Maximum rotary speed in rad/s. public Vec3d MaxRotarySpeedABC_radds { get; set; } Property Value Vec3d MaxSpindleSpeed_rpm Gets or sets the maximum spindle speed in revolutions per minute. public double MaxSpindleSpeed_rpm { get; set; } Property Value double MillingToolOffsetTable Gets or sets the milling tool offset table for tool compensation. public MillingToolOffsetTable MillingToolOffsetTable { get; set; } Property Value MillingToolOffsetTable RapidFeedrate_mmdmin Rapid move speed in mm/min. public double RapidFeedrate_mmdmin { get; set; } Property Value double RapidFeedrate_mmds Rapid move speed in mm/s. public double RapidFeedrate_mmds { get; set; } Property Value double RefNcLineOnInit Gets or sets the reference NC line used during initialization. public HardNcLine RefNcLineOnInit { get; set; } Property Value HardNcLine StrokeLimitAbc_rad Gets or sets the ABC axis stroke limits in radians. public Box3d StrokeLimitAbc_rad { get; set; } Property Value Box3d StrokeLimitXyz_mm Gets or sets the XYZ axis stroke limits in millimeters. public Box3d StrokeLimitXyz_mm { get; set; } Property Value Box3d ToolingMcAbc_deg Gets or sets the rotary machine coordinate for tooling operations. Defaults to HomeMc if not explicitly set. Set to NaN if tooling motion not apply the axis motion. Unit is degree. public Vec3d ToolingMcAbc_deg { get; set; } Property Value Vec3d ToolingMcAbc_rad Gets or sets the rotary machine coordinate for tooling operations. Defaults to HomeMc if not explicitly set. Set to NaN if tooling motion not apply the axis motion. Unit is radian. public Vec3d ToolingMcAbc_rad { get; set; } Property Value Vec3d ToolingMcXyz Gets or sets the translation machine coordinate for tooling operations. Defaults to HomeMc if not explicitly set. Set to NaN if tooling motion not apply the axis motion. public Vec3d ToolingMcXyz { get; set; } Property Value Vec3d ToolingTime Tool changing duration in sec. public TimeSpan ToolingTime { get; set; } Property Value TimeSpan XName Name for XML IO. public static string XName { get; } Property Value string XyzabcSolver Gets or sets the coordinate converter used for transformations between different coordinate systems. public XyzabcSolver XyzabcSolver { get; set; } Property Value XyzabcSolver Methods CheckStrokeLimit(DVec3d, IProgress) Check stroke limit. public bool CheckStrokeLimit(DVec3d mcXyzabc_mm_rad, IProgress messageKit) Parameters mcXyzabc_mm_rad DVec3d Machine coordinates in mm and radians. messageKit IProgress Message kit for error reporting. Returns bool Is under stroke limit. IsAxisExisted(int) Determines whether a specific rotary axis exists in the machine configuration. public bool IsAxisExisted(int dir) Parameters dir int The direction index (0=A, 1=B, 2=C). Returns bool True if the specified axis exists; otherwise, false. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "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, ISentenceCarrier, IGetSentence, ISentenceIndexed Inheritance object HardNcLine Implements IIndexedFileLine IFileLine IFileLineIndex IGetIndexedFileLine IGetFileLineIndex IFlagText ISentenceCarrier IGetSentence ISentenceIndexed 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, int, out NcNoteCache, IProgress) Ctor from the reference HardNcLine. public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, int sentenceIndex, 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. sentenceIndex int 0-based ordinal in NC execution order; stamped at construction and exposed via SentenceIndex. ncNoteCache NcNoteCache Output NC note cache progress IProgress Message host for warnings HardNcLine(HardNcEnv, IProgress) Ctor for initial state. The instance is the pre-pipeline seed (RefNcLineOnInit), so SentenceIndex is set to -1 as a “not in pipeline” sentinel. 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 SentenceIndex 0-based ordinal in NC execution order, stamped at construction by Hi.Numerical.FilePlayers.HardNcRunner (source-side) or by NcOptProc (optimized-side, a fresh independent count). Init-state lines (RefNcLineOnInit) carry -1 as a “not in pipeline” sentinel. public int SentenceIndex { get; } 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." + "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, ISentenceCarrier, IGetSentence, ISentenceIndexed Inheritance object HardNcLine Implements IIndexedFileLine IFileLine IFileLineIndex IGetIndexedFileLine IGetFileLineIndex IFlagText ISentenceCarrier IGetSentence ISentenceIndexed 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, int, out NcNoteCache, IProgress) Ctor from the reference HardNcLine. public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, int sentenceIndex, 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. sentenceIndex int 0-based ordinal in NC execution order; stamped at construction and exposed via SentenceIndex. ncNoteCache NcNoteCache Output NC note cache progress IProgress Message host for warnings HardNcLine(HardNcEnv, IProgress) Ctor for initial state. The instance is the pre-pipeline seed (RefNcLineOnInit), so SentenceIndex is set to -1 as a “not in pipeline” sentinel. 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 SentenceIndex 0-based ordinal in NC execution order, stamped at construction by HardNcRunner (source-side) or by NcOptProc (optimized-side, a fresh independent count). Init-state lines (RefNcLineOnInit) carry -1 as a “not in pipeline” sentinel. public int SentenceIndex { get; } 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", @@ -5342,17 +5342,17 @@ "api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html": { "href": "api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html", "title": "Class FeedPerCycleMachiningMotionResolution | HiAPI-C# 2025", - "summary": "Class FeedPerCycleMachiningMotionResolution Namespace Hi.Numerical.MachiningMotionResolutionUtils Assembly HiMech.dll Automatic resolution by feed per spindle cycle. public class FeedPerCycleMachiningMotionResolution : IMachiningMotionResolution, IMakeXmlSource, IToXElement Inheritance object FeedPerCycleMachiningMotionResolution Implements IMachiningMotionResolution IMakeXmlSource 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 FeedPerCycleMachiningMotionResolution() Ctor. public FeedPerCycleMachiningMotionResolution() FeedPerCycleMachiningMotionResolution(XElement) Ctor. public FeedPerCycleMachiningMotionResolution(XElement src) Parameters src XElement XML Properties LinearResolution_mm Linear axis resolution in millimeter. public double LinearResolution_mm { get; } Property Value double Remarks setter is for internal usage MinLinearResolution_mm Optional floor (millimetres) for LinearResolution_mm after feed-per-cycle scaling; zero disables clamping. public double MinLinearResolution_mm { get; set; } Property Value double RotaryResolution_deg Rotary axis resolution in degree. public double RotaryResolution_deg { get; } Property Value double Remarks setter is for internal usage RotaryResolution_rad Rotary axis resolution in radian. public double RotaryResolution_rad { get; } Property Value double Remarks setter is for internal usage Scale Gets or sets the scale factor for resolution calculation. Default value is 1. public double Scale { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods AdjustMotionResolution(double, double) Adjusts the resolution based on feed rate and spindle speed. public void AdjustMotionResolution(double feedrate_mmds, double spindleSpeed_radds) Parameters feedrate_mmds double Feed rate in mm per second spindleSpeed_radds double Spindle speed in radians per second 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class FeedPerCycleMachiningMotionResolution Namespace Hi.Numerical.MachiningMotionResolutionUtils Assembly HiMech.dll Automatic resolution by feed per spindle cycle. public class FeedPerCycleMachiningMotionResolution : IMachiningMotionResolution, IMakeXmlSource, IToXElement Inheritance object FeedPerCycleMachiningMotionResolution Implements IMachiningMotionResolution IMakeXmlSource 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 FeedPerCycleMachiningMotionResolution() Ctor. public FeedPerCycleMachiningMotionResolution() FeedPerCycleMachiningMotionResolution(XElement) Ctor. public FeedPerCycleMachiningMotionResolution(XElement src) Parameters src XElement XML Properties LinearResolution_mm Linear axis resolution in millimeter. public double LinearResolution_mm { get; } Property Value double Remarks setter is for internal usage MinLinearResolution_mm Optional floor (millimetres) for LinearResolution_mm after feed-per-cycle scaling; zero disables clamping. public double MinLinearResolution_mm { get; set; } Property Value double RotaryResolution_deg Rotary axis resolution in degree. public double RotaryResolution_deg { get; } Property Value double Remarks setter is for internal usage RotaryResolution_rad Rotary axis resolution in radian. public double RotaryResolution_rad { get; } Property Value double Remarks setter is for internal usage Scale Gets or sets the scale factor for resolution calculation. Default value is 1. public double Scale { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods AdjustMotionResolution(double, double) Adjusts the resolution based on feed rate and spindle speed. public void AdjustMotionResolution(double feedrate_mmds, double spindleSpeed_radds) Parameters feedrate_mmds double Feed rate in mm per second spindleSpeed_radds double Spindle speed in radians per second MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html": { "href": "api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html", "title": "Class FeedPerToothMachiningMotionResolution | HiAPI-C# 2025", - "summary": "Class FeedPerToothMachiningMotionResolution Namespace Hi.Numerical.MachiningMotionResolutionUtils Assembly HiMech.dll Automatic resolution by feed per tooth. public class FeedPerToothMachiningMotionResolution : IMachiningMotionResolution, IMakeXmlSource, IToXElement Inheritance object FeedPerToothMachiningMotionResolution Implements IMachiningMotionResolution IMakeXmlSource 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 FeedPerToothMachiningMotionResolution() Ctor. public FeedPerToothMachiningMotionResolution() Properties LinearResolution_mm Linear axis resolution in millimeter. public double LinearResolution_mm { get; } Property Value double Remarks setter is for internal usage RotaryResolution_deg Rotary axis resolution in degree. public double RotaryResolution_deg { get; set; } Property Value double Remarks setter is for internal usage RotaryResolution_rad Rotary axis resolution in radian. public double RotaryResolution_rad { get; } Property Value double Remarks setter is for internal usage XName Name for XML IO. public static string XName { get; } Property Value string Methods AdjustResolution(int, double, double) Adjusts the resolution based on flute number, feed rate and spindle speed. public void AdjustResolution(int fluteNum, double feedrate_mmds, double spindleSpeed_radds) Parameters fluteNum int Number of flutes in the cutting tool feedrate_mmds double Feed rate in mm per second spindleSpeed_radds double Spindle speed in radians per second 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class FeedPerToothMachiningMotionResolution Namespace Hi.Numerical.MachiningMotionResolutionUtils Assembly HiMech.dll Automatic resolution by feed per tooth. public class FeedPerToothMachiningMotionResolution : IMachiningMotionResolution, IMakeXmlSource, IToXElement Inheritance object FeedPerToothMachiningMotionResolution Implements IMachiningMotionResolution IMakeXmlSource 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 FeedPerToothMachiningMotionResolution() Ctor. public FeedPerToothMachiningMotionResolution() Properties LinearResolution_mm Linear axis resolution in millimeter. public double LinearResolution_mm { get; } Property Value double Remarks setter is for internal usage RotaryResolution_deg Rotary axis resolution in degree. public double RotaryResolution_deg { get; set; } Property Value double Remarks setter is for internal usage RotaryResolution_rad Rotary axis resolution in radian. public double RotaryResolution_rad { get; } Property Value double Remarks setter is for internal usage XName Name for XML IO. public static string XName { get; } Property Value string Methods AdjustResolution(int, double, double) Adjusts the resolution based on flute number, feed rate and spindle speed. public void AdjustResolution(int fluteNum, double feedrate_mmds, double spindleSpeed_radds) Parameters fluteNum int Number of flutes in the cutting tool feedrate_mmds double Feed rate in mm per second spindleSpeed_radds double Spindle speed in radians per second MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html": { "href": "api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html", "title": "Class FixedMachiningMotionResolution | HiAPI-C# 2025", - "summary": "Class FixedMachiningMotionResolution Namespace Hi.Numerical.MachiningMotionResolutionUtils Assembly HiMech.dll Represents a fixed machining motion resolution with user-defined values. public class FixedMachiningMotionResolution : IMachiningMotionResolution, IMakeXmlSource, IToXElement Inheritance object FixedMachiningMotionResolution Implements IMachiningMotionResolution IMakeXmlSource 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 FixedMachiningMotionResolution() Ctor. public FixedMachiningMotionResolution() FixedMachiningMotionResolution(double, double) Ctor. public FixedMachiningMotionResolution(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double rotaryResolution_deg double FixedMachiningMotionResolution(XElement) Ctor. public FixedMachiningMotionResolution(XElement src) Parameters src XElement XML Properties LinearResolution_mm Linear axis resolution in millimeter. public double LinearResolution_mm { get; set; } Property Value double RotaryResolution_deg Rotary axis resolution in degree. public double RotaryResolution_deg { get; set; } Property Value double RotaryResolution_rad Rotary axis resolution in radian. public double RotaryResolution_rad { get; set; } Property Value double XName Name for XML IO. 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class FixedMachiningMotionResolution Namespace Hi.Numerical.MachiningMotionResolutionUtils Assembly HiMech.dll Represents a fixed machining motion resolution with user-defined values. public class FixedMachiningMotionResolution : IMachiningMotionResolution, IMakeXmlSource, IToXElement Inheritance object FixedMachiningMotionResolution Implements IMachiningMotionResolution IMakeXmlSource 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 FixedMachiningMotionResolution() Ctor. public FixedMachiningMotionResolution() FixedMachiningMotionResolution(double, double) Ctor. public FixedMachiningMotionResolution(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double rotaryResolution_deg double FixedMachiningMotionResolution(XElement) Ctor. public FixedMachiningMotionResolution(XElement src) Parameters src XElement XML Properties LinearResolution_mm Linear axis resolution in millimeter. public double LinearResolution_mm { get; set; } Property Value double RotaryResolution_deg Rotary axis resolution in degree. public double RotaryResolution_deg { get; set; } Property Value double RotaryResolution_rad Rotary axis resolution in radian. public double RotaryResolution_rad { get; set; } Property Value double XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html": { "href": "api/Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html", @@ -5372,12 +5372,12 @@ "api/Hi.Numerical.MillingToolOffsetTable.html": { "href": "api/Hi.Numerical.MillingToolOffsetTable.html", "title": "Class MillingToolOffsetTable | HiAPI-C# 2025", - "summary": "Class MillingToolOffsetTable Namespace Hi.Numerical Assembly HiUniNc.dll Offset table for milling tool. The key is Offset ID (H or D in NC code). public class MillingToolOffsetTable : Dictionary, IDictionary, ICollection>, IReadOnlyDictionary, IReadOnlyCollection>, IEnumerable>, IDictionary, ICollection, IEnumerable, IDeserializationCallback, ISerializable, IMakeXmlSource Inheritance object Dictionary MillingToolOffsetTable Implements IDictionary ICollection> IReadOnlyDictionary IReadOnlyCollection> IEnumerable> IDictionary ICollection IEnumerable IDeserializationCallback ISerializable IMakeXmlSource Inherited Members Dictionary.Add(int, MillingToolOffsetTableRow) Dictionary.Clear() Dictionary.ContainsKey(int) Dictionary.ContainsValue(MillingToolOffsetTableRow) Dictionary.EnsureCapacity(int) Dictionary.GetAlternateLookup() Dictionary.GetEnumerator() Dictionary.OnDeserialization(object) Dictionary.Remove(int) Dictionary.Remove(int, out MillingToolOffsetTableRow) Dictionary.TrimExcess() Dictionary.TrimExcess(int) Dictionary.TryAdd(int, MillingToolOffsetTableRow) Dictionary.TryGetAlternateLookup(out Dictionary.AlternateLookup) Dictionary.TryGetValue(int, out MillingToolOffsetTableRow) Dictionary.Comparer Dictionary.Count Dictionary.Capacity Dictionary.this[int] Dictionary.Keys Dictionary.Values 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) DictionaryUtil.Retrieve(Dictionary, K, out V, bool) DictionaryUtil.GetOrCreate(IDictionary, TKey) DictionaryUtil.GetOrCreate(IDictionary, TKey, TValue) DictionaryUtil.GetOrCreate(IDictionary, TKey, Func) DictionaryUtil.TryGetValueByKeys(IDictionary, IEnumerable, out TValue) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MillingToolOffsetTable() Initializes a new instance of the MillingToolOffsetTable class. public MillingToolOffsetTable() MillingToolOffsetTable(MillingToolOffsetTable) Initializes a new instance of the MillingToolOffsetTable class by copying an existing table. public MillingToolOffsetTable(MillingToolOffsetTable src) Parameters src MillingToolOffsetTable The source table to copy. MillingToolOffsetTable(XElement) Initializes a new instance of the MillingToolOffsetTable class from XML. public MillingToolOffsetTable(XElement src) Parameters src XElement The XML element containing tool offset data. Fields XName Gets the XML element name for the MillingToolOffsetTable. public static string XName Field Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of this offset table. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for relative paths. relFile string The relative file path. exhibitionOnly bool Returns XElement An XML element representing this offset table. UpdateIdealMillingToolOffsetTableByToolHouse(MachiningToolHouse) Updates the ideal tool offsets in this table based on a tool house. public void UpdateIdealMillingToolOffsetTableByToolHouse(MachiningToolHouse millingToolHouse) Parameters millingToolHouse MachiningToolHouse The machining tool house containing tool information." + "summary": "Class MillingToolOffsetTable Namespace Hi.Numerical Assembly HiUniNc.dll Offset table for milling tool. The key is Offset ID (H or D in NC code). public class MillingToolOffsetTable : Dictionary, IDictionary, ICollection>, IReadOnlyDictionary, IReadOnlyCollection>, IEnumerable>, IDictionary, ICollection, IEnumerable, IDeserializationCallback, ISerializable, IMakeXmlSource Inheritance object Dictionary MillingToolOffsetTable Implements IDictionary ICollection> IReadOnlyDictionary IReadOnlyCollection> IEnumerable> IDictionary ICollection IEnumerable IDeserializationCallback ISerializable IMakeXmlSource Inherited Members Dictionary.Add(int, MillingToolOffsetTableRow) Dictionary.Clear() Dictionary.ContainsKey(int) Dictionary.ContainsValue(MillingToolOffsetTableRow) Dictionary.EnsureCapacity(int) Dictionary.GetAlternateLookup() Dictionary.GetEnumerator() Dictionary.OnDeserialization(object) Dictionary.Remove(int) Dictionary.Remove(int, out MillingToolOffsetTableRow) Dictionary.TrimExcess() Dictionary.TrimExcess(int) Dictionary.TryAdd(int, MillingToolOffsetTableRow) Dictionary.TryGetAlternateLookup(out Dictionary.AlternateLookup) Dictionary.TryGetValue(int, out MillingToolOffsetTableRow) Dictionary.Comparer Dictionary.Count Dictionary.Capacity Dictionary.this[int] Dictionary.Keys Dictionary.Values 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) DictionaryUtil.Retrieve(Dictionary, K, out V, bool) DictionaryUtil.GetOrCreate(IDictionary, TKey) DictionaryUtil.GetOrCreate(IDictionary, TKey, TValue) DictionaryUtil.GetOrCreate(IDictionary, TKey, Func) DictionaryUtil.TryGetValueByKeys(IDictionary, IEnumerable, out TValue) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MillingToolOffsetTable() Initializes a new instance of the MillingToolOffsetTable class. public MillingToolOffsetTable() MillingToolOffsetTable(MillingToolOffsetTable) Initializes a new instance of the MillingToolOffsetTable class by copying an existing table. public MillingToolOffsetTable(MillingToolOffsetTable src) Parameters src MillingToolOffsetTable The source table to copy. MillingToolOffsetTable(XElement) Initializes a new instance of the MillingToolOffsetTable class from XML. public MillingToolOffsetTable(XElement src) Parameters src XElement The XML element containing tool offset data. Fields XName Gets the XML element name for the MillingToolOffsetTable. public static string XName Field Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of this offset table. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for relative paths. relFile string The relative file path. exhibitionOnly bool Returns XElement An XML element representing this offset table. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory UpdateIdealMillingToolOffsetTableByToolHouse(MachiningToolHouse) Updates the ideal tool offsets in this table based on a tool house. public void UpdateIdealMillingToolOffsetTableByToolHouse(MachiningToolHouse millingToolHouse) Parameters millingToolHouse MachiningToolHouse The machining tool house containing tool information." }, "api/Hi.Numerical.MillingToolOffsetTableRow.html": { "href": "api/Hi.Numerical.MillingToolOffsetTableRow.html", "title": "Class MillingToolOffsetTableRow | HiAPI-C# 2025", - "summary": "Class MillingToolOffsetTableRow Namespace Hi.Numerical Assembly HiUniNc.dll Raw of MillingToolOffsetTable public class MillingToolOffsetTableRow Inheritance object MillingToolOffsetTableRow 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 MillingToolOffsetTableRow() Ctor. public MillingToolOffsetTableRow() MillingToolOffsetTableRow(XElement) Initializes a new instance of the MillingToolOffsetTableRow class from XML. public MillingToolOffsetTableRow(XElement src) Parameters src XElement The XML element containing tool offset row data. Properties AxialWear_mm Gets or sets the axial wear of the tool in millimeters. public double AxialWear_mm { get; set; } Property Value double FullHeight_mm Gets the total height of the tool including wear in millimeters. public double FullHeight_mm { get; } Property Value double FullRadius_mm Gets the total radius of the tool including wear in millimeters. public double FullRadius_mm { get; } Property Value double IdealHeight_mm Gets or sets the ideal height of the tool in millimeters. public double IdealHeight_mm { get; set; } Property Value double IdealRadius_mm Gets or sets the ideal radius of the tool in millimeters. public double IdealRadius_mm { get; set; } Property Value double RadialWear_mm Gets or sets the radial wear of the tool in millimeters. public double RadialWear_mm { get; set; } Property Value double XName XML Name. public static string XName { get; } Property Value string Methods ToXElement() Converts this offset table row to an XML element. public XElement ToXElement() Returns XElement An XML element representing this offset table row." + "summary": "Class MillingToolOffsetTableRow Namespace Hi.Numerical Assembly HiUniNc.dll Raw of MillingToolOffsetTable public class MillingToolOffsetTableRow Inheritance object MillingToolOffsetTableRow 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 MillingToolOffsetTableRow() Ctor. public MillingToolOffsetTableRow() MillingToolOffsetTableRow(XElement) Initializes a new instance of the MillingToolOffsetTableRow class from XML. public MillingToolOffsetTableRow(XElement src) Parameters src XElement The XML element containing tool offset row data. Properties AxialWear_mm Gets or sets the axial wear of the tool in millimeters. public double AxialWear_mm { get; set; } Property Value double FullHeight_mm Gets the total height of the tool including wear in millimeters. public double FullHeight_mm { get; } Property Value double FullRadius_mm Gets the total radius of the tool including wear in millimeters. public double FullRadius_mm { get; } Property Value double IdealHeight_mm Gets or sets the ideal height of the tool in millimeters. public double IdealHeight_mm { get; set; } Property Value double IdealRadius_mm Gets or sets the ideal radius of the tool in millimeters. public double IdealRadius_mm { get; set; } Property Value double RadialWear_mm Gets or sets the radial wear of the tool in millimeters. public double RadialWear_mm { get; set; } Property Value double XName XML Name. public static string XName { get; } Property Value string Methods Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Converts this offset table row to an XML element. public XElement ToXElement() Returns XElement An XML element representing this offset table row." }, "api/Hi.Numerical.NcArgs.ArcNcArg.html": { "href": "api/Hi.Numerical.NcArgs.ArcNcArg.html", @@ -5627,12 +5627,12 @@ "api/Hi.Numerical.StepSelectionUtils.BoundSelector.html": { "href": "api/Hi.Numerical.StepSelectionUtils.BoundSelector.html", "title": "Class BoundSelector | HiAPI-C# 2025", - "summary": "Class BoundSelector Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Mark on source command line for managing step. public class BoundSelector : IFileLineIndex, IGetFileLineIndex, IMakeXmlSource Inheritance object BoundSelector Implements IFileLineIndex IGetFileLineIndex 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 BoundSelector(AnchorMode, IStepShift, FileLineIndex, int) Initializes a new instance of the BoundSelector class. public BoundSelector(AnchorMode anchorMode, IStepShift shift, FileLineIndex fileLineIndex, int boundStepIndex) Parameters anchorMode AnchorMode The anchor mode for the bound. shift IStepShift The step shift to apply. fileLineIndex FileLineIndex The file line index. boundStepIndex int The step index at the boundary. BoundSelector(XElement, string, IProgress) Ctor. public BoundSelector(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested XML factory calls. Properties BoundStepIndex If locale on begin, the step index should be the first step of the line; if locale on end, the step index should be the last step of the line. i.e. the index is inclusive. public int BoundStepIndex { get; set; } Property Value int FileIndex File Index. Start on 0. public int FileIndex { get; set; } Property Value int FileLineIndex Gets or sets the file line index. public FileLineIndex FileLineIndex { get; set; } Property Value FileLineIndex FileNo Gets or sets the file number. public int FileNo { get; set; } Property Value int KeyAnchorMode Gets or sets the key anchor mode that determines how the boundary is anchored. public AnchorMode KeyAnchorMode { get; set; } Property Value AnchorMode LineIndex Line Index. Start on 0. public int LineIndex { get; set; } Property Value int LineNo Gets or sets the line number. public int LineNo { get; set; } Property Value int Shift Gets or sets the shift to apply to the step index. public IStepShift Shift { get; set; } Property Value IStepShift XName Name for XML IO. public static string XName { get; } Property Value string Methods GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex 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 BoundSelector Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Mark on source command line for managing step. public class BoundSelector : IFileLineIndex, IGetFileLineIndex, IMakeXmlSource Inheritance object BoundSelector Implements IFileLineIndex IGetFileLineIndex 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 BoundSelector(AnchorMode, IStepShift, FileLineIndex, int) Initializes a new instance of the BoundSelector class. public BoundSelector(AnchorMode anchorMode, IStepShift shift, FileLineIndex fileLineIndex, int boundStepIndex) Parameters anchorMode AnchorMode The anchor mode for the bound. shift IStepShift The step shift to apply. fileLineIndex FileLineIndex The file line index. boundStepIndex int The step index at the boundary. BoundSelector(XElement, string, IProgress) Ctor. public BoundSelector(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested XML factory calls. Properties BoundStepIndex If locale on begin, the step index should be the first step of the line; if locale on end, the step index should be the last step of the line. i.e. the index is inclusive. public int BoundStepIndex { get; set; } Property Value int FileIndex File Index. Start on 0. public int FileIndex { get; set; } Property Value int FileLineIndex Gets or sets the file line index. public FileLineIndex FileLineIndex { get; set; } Property Value FileLineIndex FileNo Gets or sets the file number. public int FileNo { get; set; } Property Value int KeyAnchorMode Gets or sets the key anchor mode that determines how the boundary is anchored. public AnchorMode KeyAnchorMode { get; set; } Property Value AnchorMode LineIndex Line Index. Start on 0. public int LineIndex { get; set; } Property Value int LineNo Gets or sets the line number. public int LineNo { get; set; } Property Value int Shift Gets or sets the shift to apply to the step index. public IStepShift Shift { get; set; } Property Value IStepShift XName Name for XML IO. public static string XName { get; } Property Value string Methods GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html": { "href": "api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html", "title": "Class BoundSelectorHost | HiAPI-C# 2025", - "summary": "Class BoundSelectorHost Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Hosts bound selectors and manages step sections within a CL strip. public class BoundSelectorHost : IMakeXmlSource Inheritance object BoundSelectorHost 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 BoundSelectorHost() Initializes a new instance of the BoundSelectorHost class. public BoundSelectorHost() BoundSelectorHost(XElement, string, IProgress) Ctor. public BoundSelectorHost(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested bundle XML. Properties XName Name for XML IO. public static string XName { get; } Property Value string Methods Begin(string, AnchorMode, IStepShift, FileLineIndex, int) Marks the beginning of a step section with the specified key and parameters. public void Begin(string key, AnchorMode anchorMode, IStepShift shift, FileLineIndex fileLineIndex, int boundStepIndex) Parameters key string The key identifying the step section. anchorMode AnchorMode The anchor mode for the bound. shift IStepShift The step shift to apply. fileLineIndex FileLineIndex The file line index. boundStepIndex int The step index at the boundary. Begin(string, BoundSelector) Marks the beginning of a step section with the specified key. public void Begin(string key, BoundSelector beginMark) Parameters key string The key identifying the step section. beginMark BoundSelector The bound selector marking the beginning. Clear() Clears all unclosed sections and bound selector bundles. public void Clear() End(string, AnchorMode, IStepShift, FileLineIndex, int) Marks the end of a step section with the specified key and parameters. public void End(string key, AnchorMode anchorMode, IStepShift shift, FileLineIndex fileLineIndex, int boundStepIndex) Parameters key string The key identifying the step section. anchorMode AnchorMode The anchor mode for the bound. shift IStepShift The step shift to apply. fileLineIndex FileLineIndex The file line index. boundStepIndex int The step index at the boundary. End(string, BoundSelector) Marks the end of a step section with the specified key. public void End(string key, BoundSelector endMark) Parameters key string The key identifying the step section. endMark BoundSelector The bound selector marking the end. GetKeyToStepSectionDictionary(ClStrip) Gets a dictionary mapping keys to their corresponding step section ranges in the CL strip. public Dictionary> GetKeyToStepSectionDictionary(ClStrip clStrip) Parameters clStrip ClStrip The CL strip containing the steps. Returns Dictionary> A dictionary mapping keys to step section ranges. GetStepSection(string, ClStrip) Gets the step section range for the specified key in the CL strip. public Range GetStepSection(string key, ClStrip clStrip) Parameters key string The key identifying the step section. clStrip ClStrip The CL strip containing the steps. Returns Range The step section range, or null if the key is not found. 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 BoundSelectorHost Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Hosts bound selectors and manages step sections within a CL strip. public class BoundSelectorHost : IMakeXmlSource Inheritance object BoundSelectorHost 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 BoundSelectorHost() Initializes a new instance of the BoundSelectorHost class. public BoundSelectorHost() BoundSelectorHost(XElement, string, IProgress) Ctor. public BoundSelectorHost(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested bundle XML. Properties XName Name for XML IO. public static string XName { get; } Property Value string Methods Begin(string, AnchorMode, IStepShift, FileLineIndex, int) Marks the beginning of a step section with the specified key and parameters. public void Begin(string key, AnchorMode anchorMode, IStepShift shift, FileLineIndex fileLineIndex, int boundStepIndex) Parameters key string The key identifying the step section. anchorMode AnchorMode The anchor mode for the bound. shift IStepShift The step shift to apply. fileLineIndex FileLineIndex The file line index. boundStepIndex int The step index at the boundary. Begin(string, BoundSelector) Marks the beginning of a step section with the specified key. public void Begin(string key, BoundSelector beginMark) Parameters key string The key identifying the step section. beginMark BoundSelector The bound selector marking the beginning. Clear() Clears all unclosed sections and bound selector bundles. public void Clear() End(string, AnchorMode, IStepShift, FileLineIndex, int) Marks the end of a step section with the specified key and parameters. public void End(string key, AnchorMode anchorMode, IStepShift shift, FileLineIndex fileLineIndex, int boundStepIndex) Parameters key string The key identifying the step section. anchorMode AnchorMode The anchor mode for the bound. shift IStepShift The step shift to apply. fileLineIndex FileLineIndex The file line index. boundStepIndex int The step index at the boundary. End(string, BoundSelector) Marks the end of a step section with the specified key. public void End(string key, BoundSelector endMark) Parameters key string The key identifying the step section. endMark BoundSelector The bound selector marking the end. GetKeyToStepSectionDictionary(ClStrip) Gets a dictionary mapping keys to their corresponding step section ranges in the CL strip. public Dictionary> GetKeyToStepSectionDictionary(ClStrip clStrip) Parameters clStrip ClStrip The CL strip containing the steps. Returns Dictionary> A dictionary mapping keys to step section ranges. GetStepSection(string, ClStrip) Gets the step section range for the specified key in the CL strip. public Range GetStepSection(string key, ClStrip clStrip) Parameters key string The key identifying the step section. clStrip ClStrip The CL strip containing the steps. Returns Range The step section range, or null if the key is not found. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html": { "href": "api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html", @@ -5642,12 +5642,12 @@ "api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html": { "href": "api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html", "title": "Class BoundSelectorPair | HiAPI-C# 2025", - "summary": "Class BoundSelectorPair Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Represents a pair of bound selectors defining the beginning and end of a step section. public class BoundSelectorPair : IMakeXmlSource Inheritance object BoundSelectorPair 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 BoundSelectorPair(BoundSelector, BoundSelector) Initializes a new instance of the BoundSelectorPair class with specified begin and end bound selectors. public BoundSelectorPair(BoundSelector begin, BoundSelector end) Parameters begin BoundSelector The beginning bound selector. end BoundSelector The ending bound selector. BoundSelectorPair(XElement, string, IProgress) Ctor. public BoundSelectorPair(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested selector XML. Properties Begin Gets the beginning bound selector. public BoundSelector Begin { get; } Property Value BoundSelector End Gets the ending bound selector. public BoundSelector End { get; } Property Value BoundSelector XName Name for XML IO. public static string XName { get; } Property Value string Methods GetStepSectionBound(BoundLocale) Gets the bound selector for the specified location. public BoundSelector GetStepSectionBound(BoundSelectorPair.BoundLocale locale) Parameters locale BoundSelectorPair.BoundLocale The location of the bound to retrieve. Returns BoundSelector The bound selector at the specified location. 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 BoundSelectorPair Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Represents a pair of bound selectors defining the beginning and end of a step section. public class BoundSelectorPair : IMakeXmlSource Inheritance object BoundSelectorPair 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 BoundSelectorPair(BoundSelector, BoundSelector) Initializes a new instance of the BoundSelectorPair class with specified begin and end bound selectors. public BoundSelectorPair(BoundSelector begin, BoundSelector end) Parameters begin BoundSelector The beginning bound selector. end BoundSelector The ending bound selector. BoundSelectorPair(XElement, string, IProgress) Ctor. public BoundSelectorPair(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested selector XML. Properties Begin Gets the beginning bound selector. public BoundSelector Begin { get; } Property Value BoundSelector End Gets the ending bound selector. public BoundSelector End { get; } Property Value BoundSelector XName Name for XML IO. public static string XName { get; } Property Value string Methods GetStepSectionBound(BoundLocale) Gets the bound selector for the specified location. public BoundSelector GetStepSectionBound(BoundSelectorPair.BoundLocale locale) Parameters locale BoundSelectorPair.BoundLocale The location of the bound to retrieve. Returns BoundSelector The bound selector at the specified location. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html": { "href": "api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html", "title": "Class BoundSelectorStepSectionBundle | HiAPI-C# 2025", - "summary": "Class BoundSelectorStepSectionBundle Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Represents a bundle containing a boundary selector pair and the corresponding step section range. public class BoundSelectorStepSectionBundle : IMakeXmlSource Inheritance object BoundSelectorStepSectionBundle 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 BoundSelectorStepSectionBundle(BoundSelectorPair, Range) Initializes a new instance of the BoundSelectorStepSectionBundle class with the specified boundary selector pair and step section. public BoundSelectorStepSectionBundle(BoundSelectorPair boundSelectorPair, Range stepSection) Parameters boundSelectorPair BoundSelectorPair The boundary selector pair. stepSection Range The step section range. BoundSelectorStepSectionBundle(XElement, string, IProgress) Ctor. public BoundSelectorStepSectionBundle(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested selector XML. Properties BoundSelectorPair Gets or sets the boundary selector pair that defines the step section. public BoundSelectorPair BoundSelectorPair { get; set; } Property Value BoundSelectorPair XName Name for XML IO. public static string XName { get; } Property Value string Methods BuildStepSection(ClStrip) Builds the step section range from the CL strip using the boundary selector pair. public Range BuildStepSection(ClStrip clStrip) Parameters clStrip ClStrip The CL strip to build the step section from. Returns Range The built step section range. CallStepSection(ClStrip) Gets the existing step section or builds it if it doesn't exist. public Range CallStepSection(ClStrip clStrip) Parameters clStrip ClStrip The CL strip to use for building the step section if needed. Returns Range The step section range. 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 BoundSelectorStepSectionBundle Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Represents a bundle containing a boundary selector pair and the corresponding step section range. public class BoundSelectorStepSectionBundle : IMakeXmlSource Inheritance object BoundSelectorStepSectionBundle 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 BoundSelectorStepSectionBundle(BoundSelectorPair, Range) Initializes a new instance of the BoundSelectorStepSectionBundle class with the specified boundary selector pair and step section. public BoundSelectorStepSectionBundle(BoundSelectorPair boundSelectorPair, Range stepSection) Parameters boundSelectorPair BoundSelectorPair The boundary selector pair. stepSection Range The step section range. BoundSelectorStepSectionBundle(XElement, string, IProgress) Ctor. public BoundSelectorStepSectionBundle(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML source element baseDirectory string Base directory for resolving relative paths progress IProgress Progress reporter for nested selector XML. Properties BoundSelectorPair Gets or sets the boundary selector pair that defines the step section. public BoundSelectorPair BoundSelectorPair { get; set; } Property Value BoundSelectorPair XName Name for XML IO. public static string XName { get; } Property Value string Methods BuildStepSection(ClStrip) Builds the step section range from the CL strip using the boundary selector pair. public Range BuildStepSection(ClStrip clStrip) Parameters clStrip ClStrip The CL strip to build the step section from. Returns Range The built step section range. CallStepSection(ClStrip) Gets the existing step section or builds it if it doesn't exist. public Range CallStepSection(ClStrip clStrip) Parameters clStrip ClStrip The CL strip to use for building the step section if needed. Returns Range The step section range. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html": { "href": "api/Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html", @@ -5657,7 +5657,7 @@ "api/Hi.Numerical.StepSelectionUtils.DistanceShift.html": { "href": "api/Hi.Numerical.StepSelectionUtils.DistanceShift.html", "title": "Class DistanceShift | HiAPI-C# 2025", - "summary": "Class DistanceShift Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll A step shift implementation that shifts based on distance along the tool path. public class DistanceShift : IStepShift, IMakeXmlSource Inheritance object DistanceShift Implements IStepShift 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 DistanceShift(double) Constructor with specified distance shift in millimeters. public DistanceShift(double distanceShift_mm) Parameters distanceShift_mm double The distance to shift in millimeters. DistanceShift(XElement) Ctor. public DistanceShift(XElement src) Parameters src XElement XML Properties DistanceShift_mm The distance to shift in millimeters. public double DistanceShift_mm { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods GetShiftedStepIndex(ClStrip, int) Gets the shifted step index based on distance along the tool path. public int GetShiftedStepIndex(ClStrip host, int originalStepIndex) Parameters host ClStrip The CL strip hosting the steps. originalStepIndex int The original step index to shift from. Returns int The shifted step index after applying the distance shift. 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 DistanceShift Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll A step shift implementation that shifts based on distance along the tool path. public class DistanceShift : IStepShift, IMakeXmlSource Inheritance object DistanceShift Implements IStepShift 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 DistanceShift(double) Constructor with specified distance shift in millimeters. public DistanceShift(double distanceShift_mm) Parameters distanceShift_mm double The distance to shift in millimeters. DistanceShift(XElement) Ctor. public DistanceShift(XElement src) Parameters src XElement XML Properties DistanceShift_mm The distance to shift in millimeters. public double DistanceShift_mm { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods GetShiftedStepIndex(ClStrip, int) Gets the shifted step index based on distance along the tool path. public int GetShiftedStepIndex(ClStrip host, int originalStepIndex) Parameters host ClStrip The CL strip hosting the steps. originalStepIndex int The original step index to shift from. Returns int The shifted step index after applying the distance shift. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.StepSelectionUtils.IStepShift.html": { "href": "api/Hi.Numerical.StepSelectionUtils.IStepShift.html", @@ -5667,7 +5667,7 @@ "api/Hi.Numerical.StepSelectionUtils.TimeShift.html": { "href": "api/Hi.Numerical.StepSelectionUtils.TimeShift.html", "title": "Class TimeShift | HiAPI-C# 2025", - "summary": "Class TimeShift Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Represents a time-based shift operation for machining steps. This class provides functionality to shift step indices based on time offsets. public class TimeShift : IStepShift, IMakeXmlSource Inheritance object TimeShift Implements IStepShift 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 TimeShift(TimeSpan, bool) Initializes a new instance of the TimeShift class with the specified parameters. public TimeShift(TimeSpan timeShift, bool isBackward) Parameters timeShift TimeSpan The amount of time to shift. isBackward bool True to shift backward in time, false to shift forward. TimeShift(XElement) Initializes a new instance of the TimeShift class from XML. public TimeShift(XElement src) Parameters src XElement The XML element containing the time shift configuration. Properties IsBackward Gets or sets a value indicating whether the shift is backward in time. When true, shifts steps earlier in time; when false, shifts steps later in time. public bool IsBackward { get; set; } Property Value bool ShiftTimeSpan Gets or sets the amount of time to shift. public TimeSpan ShiftTimeSpan { get; set; } Property Value TimeSpan XName Gets the XML element name used for serialization. public static string XName { get; } Property Value string Remarks This name is used as the XML tag when serializing/deserializing TimeShift instances. The value is the unqualified name of the class (TimeShift). Methods GetShiftedStepIndex(ClStrip, int) Gets the shifted step index based on the original index and the time shift configuration. public int GetShiftedStepIndex(ClStrip host, int originalStepIndex) Parameters host ClStrip The cutter location strip containing the steps. originalStepIndex int The original step index to shift. Returns int The shifted step index, or -1 if the shift results in an invalid index. 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 TimeShift Namespace Hi.Numerical.StepSelectionUtils Assembly HiMech.dll Represents a time-based shift operation for machining steps. This class provides functionality to shift step indices based on time offsets. public class TimeShift : IStepShift, IMakeXmlSource Inheritance object TimeShift Implements IStepShift 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 TimeShift(TimeSpan, bool) Initializes a new instance of the TimeShift class with the specified parameters. public TimeShift(TimeSpan timeShift, bool isBackward) Parameters timeShift TimeSpan The amount of time to shift. isBackward bool True to shift backward in time, false to shift forward. TimeShift(XElement) Initializes a new instance of the TimeShift class from XML. public TimeShift(XElement src) Parameters src XElement The XML element containing the time shift configuration. Properties IsBackward Gets or sets a value indicating whether the shift is backward in time. When true, shifts steps earlier in time; when false, shifts steps later in time. public bool IsBackward { get; set; } Property Value bool ShiftTimeSpan Gets or sets the amount of time to shift. public TimeSpan ShiftTimeSpan { get; set; } Property Value TimeSpan XName Gets the XML element name used for serialization. public static string XName { get; } Property Value string Remarks This name is used as the XML tag when serializing/deserializing TimeShift instances. The value is the unqualified name of the class (TimeShift). Methods GetShiftedStepIndex(ClStrip, int) Gets the shifted step index based on the original index and the time shift configuration. public int GetShiftedStepIndex(ClStrip host, int originalStepIndex) Parameters host ClStrip The cutter location strip containing the steps. originalStepIndex int The original step index to shift. Returns int The shifted step index, or -1 if the shift results in an invalid index. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.StepSelectionUtils.html": { "href": "api/Hi.Numerical.StepSelectionUtils.html", @@ -5697,12 +5697,12 @@ "api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html": { "href": "api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html", "title": "Class CodeXyzabcChain | HiAPI-C# 2025", - "summary": "Class CodeXyzabcChain Namespace Hi.Numerical.Xyzabc Assembly HiMech.dll IXyzabcChain Composed by ChainCode. On purpose of easy XML hand management. public class CodeXyzabcChain : IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, IMakeXmlSource Inheritance object CodeXyzabcChain Implements IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CodeXyzabcChain(string, bool) Initializes a new instance of the CodeXyzabcChain class. public CodeXyzabcChain(string chainCode = \"[O][Z][C][w];[O][Y][X][B][S][t]\", bool isVertical = true) Parameters chainCode string Chain code of machine tool. Must contain at least base, tool buckle and table buckle, where the code is O,t and w, respectively. The other available members: S is spindle. X,Y and Z are translational motion component. A,B and C are rotational motion component. The codes should be all uppercases. isVertical bool Whether the machine is in vertical configuration Examples The chain code of a three axis machine tool can be defined by \"[O][Z][w];[O][Y][X][S][t]\". The chain code of a five axis machine tool can be defined by \"[O][Z][C][w];[O][Y][X][B][S][t]\". CodeXyzabcChain(XElement, string, string, IProgress) Initializes a new instance of the CodeXyzabcChain class from XML. public CodeXyzabcChain(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress The progress reporter. Properties AnchorToSolid Gets or sets the dictionary mapping anchors to solids for display purposes. public Dictionary AnchorToSolid { get; set; } Property Value Dictionary Asmb Gets the assembly instance. public Asmb Asmb { get; } Property Value Asmb ChainBegin Gets the chain begin anchor. public Anchor ChainBegin { get; } Property Value Anchor ChainCode ChainCode is the chain code of machine tool. Each machine tool component is represented by a word embraced by brackets. Must contain at least base, tool buckle and table buckle, where the code is O,t and w, respectively. The other available members: S is spindle. X,Y and Z are translational motion component. A,B and C are rotational motion component. public string ChainCode { get; } Property Value string ChainEnd Gets the chain end anchor. public Anchor ChainEnd { get; } Property Value Anchor CodeToAnc Gets the dictionary mapping component codes to anchors. public Dictionary CodeToAnc { get; } Property Value Dictionary ComponentCodes_O2T Gets the list of component codes from root to tool buckle. public List ComponentCodes_O2T { get; } Property Value List ComponentCodes_O2W Gets the list of component codes from root to table buckle. public List ComponentCodes_O2W { get; } Property Value List IsVertical Set the machine to vertical; otherwise, set to horizontal. public bool IsVertical { get; } Property Value bool McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] RootAnchor Gets the root anchor of the XYZABC chain. public Anchor RootAnchor { get; } Property Value Anchor TableBuckleTransformer Gets the table buckle transformer. public IStaticTransformer TableBuckleTransformer { get; set; } Property Value IStaticTransformer ToolBuckleTransformer Gets or sets the static transformer for the tool buckle. public IStaticTransformer ToolBuckleTransformer { get; set; } Property Value IStaticTransformer TransformerA Gets the A-axis transformer. public DynamicRotation TransformerA { get; } Property Value DynamicRotation TransformerB Gets the B-axis transformer. public DynamicRotation TransformerB { get; } Property Value DynamicRotation TransformerC Gets the C-axis transformer. public DynamicRotation TransformerC { get; } Property Value DynamicRotation TransformerX Gets the X-axis transformer. public DynamicTranslation TransformerX { get; } Property Value DynamicTranslation TransformerY Gets the Y-axis transformer. public DynamicTranslation TransformerY { get; } Property Value DynamicTranslation TransformerZ Gets the Z-axis transformer. public DynamicTranslation TransformerZ { get; } Property Value DynamicTranslation XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods 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. GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain 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 CodeXyzabcChain Namespace Hi.Numerical.Xyzabc Assembly HiMech.dll IXyzabcChain Composed by ChainCode. On purpose of easy XML hand management. public class CodeXyzabcChain : IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, IMakeXmlSource Inheritance object CodeXyzabcChain Implements IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CodeXyzabcChain(string, bool) Initializes a new instance of the CodeXyzabcChain class. public CodeXyzabcChain(string chainCode = \"[O][Z][C][w];[O][Y][X][B][S][t]\", bool isVertical = true) Parameters chainCode string Chain code of machine tool. Must contain at least base, tool buckle and table buckle, where the code is O,t and w, respectively. The other available members: S is spindle. X,Y and Z are translational motion component. A,B and C are rotational motion component. The codes should be all uppercases. isVertical bool Whether the machine is in vertical configuration Examples The chain code of a three axis machine tool can be defined by \"[O][Z][w];[O][Y][X][S][t]\". The chain code of a five axis machine tool can be defined by \"[O][Z][C][w];[O][Y][X][B][S][t]\". CodeXyzabcChain(XElement, string, string, IProgress) Initializes a new instance of the CodeXyzabcChain class from XML. public CodeXyzabcChain(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress The progress reporter. Properties AnchorToSolid Gets or sets the dictionary mapping anchors to solids for display purposes. public Dictionary AnchorToSolid { get; set; } Property Value Dictionary Asmb Gets the assembly instance. public Asmb Asmb { get; } Property Value Asmb ChainBegin Gets the chain begin anchor. public Anchor ChainBegin { get; } Property Value Anchor ChainCode ChainCode is the chain code of machine tool. Each machine tool component is represented by a word embraced by brackets. Must contain at least base, tool buckle and table buckle, where the code is O,t and w, respectively. The other available members: S is spindle. X,Y and Z are translational motion component. A,B and C are rotational motion component. public string ChainCode { get; } Property Value string ChainEnd Gets the chain end anchor. public Anchor ChainEnd { get; } Property Value Anchor CodeToAnc Gets the dictionary mapping component codes to anchors. public Dictionary CodeToAnc { get; } Property Value Dictionary ComponentCodes_O2T Gets the list of component codes from root to tool buckle. public List ComponentCodes_O2T { get; } Property Value List ComponentCodes_O2W Gets the list of component codes from root to table buckle. public List ComponentCodes_O2W { get; } Property Value List IsVertical Set the machine to vertical; otherwise, set to horizontal. public bool IsVertical { get; } Property Value bool McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] RootAnchor Gets the root anchor of the XYZABC chain. public Anchor RootAnchor { get; } Property Value Anchor TableBuckleTransformer Gets the table buckle transformer. public IStaticTransformer TableBuckleTransformer { get; set; } Property Value IStaticTransformer ToolBuckleTransformer Gets or sets the static transformer for the tool buckle. public IStaticTransformer ToolBuckleTransformer { get; set; } Property Value IStaticTransformer TransformerA Gets the A-axis transformer. public DynamicRotation TransformerA { get; } Property Value DynamicRotation TransformerB Gets the B-axis transformer. public DynamicRotation TransformerB { get; } Property Value DynamicRotation TransformerC Gets the C-axis transformer. public DynamicRotation TransformerC { get; } Property Value DynamicRotation TransformerX Gets the X-axis transformer. public DynamicTranslation TransformerX { get; } Property Value DynamicTranslation TransformerY Gets the Y-axis transformer. public DynamicTranslation TransformerY { get; } Property Value DynamicTranslation TransformerZ Gets the Z-axis transformer. public DynamicTranslation TransformerZ { get; } Property Value DynamicTranslation XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods 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. GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html": { "href": "api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html", "title": "Class GeneralXyzabcChain | HiAPI-C# 2025", - "summary": "Class GeneralXyzabcChain Namespace Hi.Numerical.Xyzabc Assembly HiMech.dll Represents a general XYZABC chain that can be constructed from a general mechanism. public class GeneralXyzabcChain : IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, IMakeXmlSource Inheritance object GeneralXyzabcChain Implements IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GeneralXyzabcChain(GeneralMechanism) Initializes a new instance of the GeneralXyzabcChain class with the specified general mechanism. public GeneralXyzabcChain(GeneralMechanism generalMechanism) Parameters generalMechanism GeneralMechanism The general mechanism to use for the chain. GeneralXyzabcChain(XElement, string, IProgress) Initializes a new instance of the GeneralXyzabcChain class from XML. public GeneralXyzabcChain(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for loading the nested mechanism. Properties Asmb Asmb. public Asmb Asmb { get; } Property Value Asmb GeneralMechanismFile Gets or sets the file path for the general mechanism. public string GeneralMechanismFile { get; set; } Property Value string McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] TableBuckleTransformer Gets or sets the static transformer for the table buckle. public IStaticTransformer TableBuckleTransformer { get; set; } Property Value IStaticTransformer ToolBuckleTransformer Gets or sets the static transformer for the tool buckle. public IStaticTransformer ToolBuckleTransformer { get; set; } Property Value IStaticTransformer TransformerA Transformer A. public DynamicRotation TransformerA { get; } Property Value DynamicRotation TransformerB Transformer B. public DynamicRotation TransformerB { get; } Property Value DynamicRotation TransformerC Transformer C. public DynamicRotation TransformerC { get; } Property Value DynamicRotation TransformerX Transformer X. public DynamicTranslation TransformerX { get; } Property Value DynamicTranslation TransformerY Transformer Y. public DynamicTranslation TransformerY { get; } Property Value DynamicTranslation TransformerZ Transformer Z. public DynamicTranslation TransformerZ { get; } Property Value DynamicTranslation XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods 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. GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain 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. UpdateByMechanism() Updates the XYZABC chain components based on the current general mechanism. public void UpdateByMechanism()" + "summary": "Class GeneralXyzabcChain Namespace Hi.Numerical.Xyzabc Assembly HiMech.dll Represents a general XYZABC chain that can be constructed from a general mechanism. public class GeneralXyzabcChain : IXyzabcChain, IGetXyzabcChain, IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchorToSolidDictionary, IGetAnchoredDisplayeeList, IExpandToBox3d, IMakeXmlSource Inheritance object GeneralXyzabcChain Implements IXyzabcChain IGetXyzabcChain IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IGetAnchorToSolidDictionary IGetAnchoredDisplayeeList IExpandToBox3d IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) XyzabcUtil.GenerateCollisionIndexPairs(IXyzabcChain) XyzabcUtil.GetMc(IXyzabcChain, out DVec3d) XyzabcUtil.GetMc(IXyzabcChain, out double, out double, out double, out double, out double, out double) XyzabcUtil.GetMcAbc_rad(IXyzabcChain, out Abc) XyzabcUtil.GetMcXyzabc(IXyzabcChain) XyzabcUtil.GetNp(IXyzabcChain) XyzabcUtil.GetTransformationMat4d(IXyzabcChain) XyzabcUtil.SetMc(IXyzabcChain, DVec3d) XyzabcUtil.SetMc(IXyzabcChain, Vec3d) XyzabcUtil.SetMc(IXyzabcChain, double, double, double) XyzabcUtil.SetMc(IXyzabcChain, double, double, double, double, double, double) XyzabcUtil.SetMcAbc_rad(IXyzabcChain, Vec3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GeneralXyzabcChain(GeneralMechanism) Initializes a new instance of the GeneralXyzabcChain class with the specified general mechanism. public GeneralXyzabcChain(GeneralMechanism generalMechanism) Parameters generalMechanism GeneralMechanism The general mechanism to use for the chain. GeneralXyzabcChain(XElement, string, IProgress) Initializes a new instance of the GeneralXyzabcChain class from XML. public GeneralXyzabcChain(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for loading the nested mechanism. Properties Asmb Asmb. public Asmb Asmb { get; } Property Value Asmb GeneralMechanismFile Gets or sets the file path for the general mechanism. public string GeneralMechanismFile { get; set; } Property Value string McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] TableBuckleTransformer Gets or sets the static transformer for the table buckle. public IStaticTransformer TableBuckleTransformer { get; set; } Property Value IStaticTransformer ToolBuckleTransformer Gets or sets the static transformer for the tool buckle. public IStaticTransformer ToolBuckleTransformer { get; set; } Property Value IStaticTransformer TransformerA Transformer A. public DynamicRotation TransformerA { get; } Property Value DynamicRotation TransformerB Transformer B. public DynamicRotation TransformerB { get; } Property Value DynamicRotation TransformerC Transformer C. public DynamicRotation TransformerC { get; } Property Value DynamicRotation TransformerX Transformer X. public DynamicTranslation TransformerX { get; } Property Value DynamicTranslation TransformerY Transformer Y. public DynamicTranslation TransformerY { get; } Property Value DynamicTranslation TransformerZ Transformer Z. public DynamicTranslation TransformerZ { get; } Property Value DynamicTranslation XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods 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. GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. GetTransformerA() Get transformer A. public DynamicRotation GetTransformerA() Returns DynamicRotation transformer A GetTransformerB() Get transformer B. public DynamicRotation GetTransformerB() Returns DynamicRotation transformer B GetTransformerC() Get transformer C. public DynamicRotation GetTransformerC() Returns DynamicRotation transformer C GetTransformerX() Get transformer X. public DynamicTranslation GetTransformerX() Returns DynamicTranslation transformer X GetTransformerY() Get transformer Y. public DynamicTranslation GetTransformerY() Returns DynamicTranslation transformer Y GetTransformerZ() Get transformer Z. public DynamicTranslation GetTransformerZ() Returns DynamicTranslation transformer Z GetXyzabcChain() Get IXyzabcChain. public IXyzabcChain GetXyzabcChain() Returns IXyzabcChain IXyzabcChain MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory UpdateByMechanism() Updates the XYZABC chain components based on the current general mechanism. public void UpdateByMechanism()" }, "api/Hi.Numerical.Xyzabc.IGetMcXyzabc.html": { "href": "api/Hi.Numerical.Xyzabc.IGetMcXyzabc.html", @@ -5867,17 +5867,17 @@ "api/Hi.Physics.CoatingMaterial.html": { "href": "api/Hi.Physics.CoatingMaterial.html", "title": "Class CoatingMaterial | HiAPI-C# 2025", - "summary": "Class CoatingMaterial Namespace Hi.Physics Assembly HiMech.dll Represents a coating material used in cutting tools. public class CoatingMaterial : CutterMaterial, ISurfaceMaterial, IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote, IToXElement Inheritance object CutterMaterial CoatingMaterial Implements ISurfaceMaterial IStructureMaterial IMakeXmlSource IDuplicate INameNote IToXElement Inherited Members CutterMaterial.Name CutterMaterial.Note CutterMaterial.ElasticModulus_GPa CutterMaterial.PoissonRatio CutterMaterial.TensileStrength_MPa CutterMaterial.ThermalExpansionCoefficient_dMK CutterMaterial.HeatConductivity_WdmK CutterMaterial.HeatConductivity_WdmmK CutterMaterial.HeatCapacity_JdgK CutterMaterial.Density_gdm3 CutterMaterial.Density_gdcm3 CutterMaterial.Density_gdmm3 CutterMaterial.MeltingTemperature_K CutterMaterial.FusionLatentHeat_Jdg CutterMaterial.FrictionCoefficient CutterMaterial.TemperatureVsHardnessCurve CutterMaterial.TemperatureVsWearCoefficientCurve CutterMaterial.WC CutterMaterial.WC_Co6_800nm 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 CoatingMaterial() Initializes a new instance of the CoatingMaterial class. public CoatingMaterial() CoatingMaterial(CoatingMaterial) Initializes a new instance of the CoatingMaterial class by copying from another instance. public CoatingMaterial(CoatingMaterial src) Parameters src CoatingMaterial The source coating material to copy from. CoatingMaterial(XElement) Initializes a new instance of the CoatingMaterial class from XML data. public CoatingMaterial(XElement src) Parameters src XElement The XML element containing coating material data. Properties DefaultFrictionCoefficient Gets the default friction coefficient for coating materials. public static double DefaultFrictionCoefficient { get; } Property Value double PreferedThickness_mm Gets or sets the preferred thickness of the coating in millimeters. public double PreferedThickness_mm { get; set; } Property Value double PreferedThickness_um Gets or sets the preferred thickness of the coating in micrometers. public double PreferedThickness_um { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods Duplicate(params object[]) public object Duplicate(params object[] res) Parameters res object[] Returns object 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. ToXElement() Get the XElement to represent the object. public override XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class CoatingMaterial Namespace Hi.Physics Assembly HiMech.dll Represents a coating material used in cutting tools. public class CoatingMaterial : CutterMaterial, ISurfaceMaterial, IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote, IToXElement Inheritance object CutterMaterial CoatingMaterial Implements ISurfaceMaterial IStructureMaterial IMakeXmlSource IDuplicate INameNote IToXElement Inherited Members CutterMaterial.Name CutterMaterial.Note CutterMaterial.ElasticModulus_GPa CutterMaterial.PoissonRatio CutterMaterial.TensileStrength_MPa CutterMaterial.ThermalExpansionCoefficient_dMK CutterMaterial.HeatConductivity_WdmK CutterMaterial.HeatConductivity_WdmmK CutterMaterial.HeatCapacity_JdgK CutterMaterial.Density_gdm3 CutterMaterial.Density_gdcm3 CutterMaterial.Density_gdmm3 CutterMaterial.MeltingTemperature_K CutterMaterial.FusionLatentHeat_Jdg CutterMaterial.FrictionCoefficient CutterMaterial.TemperatureVsHardnessCurve CutterMaterial.TemperatureVsWearCoefficientCurve CutterMaterial.WC CutterMaterial.WC_Co6_800nm 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 CoatingMaterial() Initializes a new instance of the CoatingMaterial class. public CoatingMaterial() CoatingMaterial(CoatingMaterial) Initializes a new instance of the CoatingMaterial class by copying from another instance. public CoatingMaterial(CoatingMaterial src) Parameters src CoatingMaterial The source coating material to copy from. CoatingMaterial(XElement) Initializes a new instance of the CoatingMaterial class from XML data. public CoatingMaterial(XElement src) Parameters src XElement The XML element containing coating material data. Properties DefaultFrictionCoefficient Gets the default friction coefficient for coating materials. public static double DefaultFrictionCoefficient { get; } Property Value double PreferedThickness_mm Gets or sets the preferred thickness of the coating in millimeters. public double PreferedThickness_mm { get; set; } Property Value double PreferedThickness_um Gets or sets the preferred thickness of the coating in micrometers. public double PreferedThickness_um { get; set; } Property Value double XName Name for XML IO. public static string XName { get; } Property Value string Methods Duplicate(params object[]) public object Duplicate(params object[] res) Parameters res object[] Returns object 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public override XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Physics.CoolantHeatCondition.html": { "href": "api/Hi.Physics.CoolantHeatCondition.html", "title": "Class CoolantHeatCondition | HiAPI-C# 2025", - "summary": "Class CoolantHeatCondition Namespace Hi.Physics Assembly HiMech.dll Represents the heat condition parameters for coolant in machining operations. Provides effective convection-coefficient lookups keyed by CoolantMode — Flood uses the configured baseline CoolantConvectionCoefficient_Wdm2K; Mist scales it by MistFloodConvectionRatio; Off falls back to OffConvectionCoefficient_Wdm2K (natural/forced air). public class CoolantHeatCondition : IMakeXmlSource Inheritance object CoolantHeatCondition 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 CoolantHeatCondition() Initializes a new instance of the CoolantHeatCondition class. public CoolantHeatCondition() CoolantHeatCondition(XElement) Initializes a new instance of the CoolantHeatCondition class from XML data. public CoolantHeatCondition(XElement src) Parameters src XElement The XML element containing coolant heat condition data. Properties CoolantConvectionCoefficient_Wdm2K Gets or sets the coolant heat transfer coefficient (flood baseline) in Watts per square meter per Kelvin. public double CoolantConvectionCoefficient_Wdm2K { get; set; } Property Value double Remarks Common value: forced air: 10~500; coolant: 1e3~1e4 (ref by “Effects of coolant on temperature distribution in metal machining”, 1988) coolant: 1e3 (ref by “Modeling heat transfer in die milling”, 2014) CoolantConvectionCoefficient_Wdmm2K Gets or sets the coolant heat transfer coefficient (flood baseline) in Watts per square millimeter per Kelvin. public double CoolantConvectionCoefficient_Wdmm2K { get; set; } Property Value double CoolantTemperature_C Gets or sets the coolant temperature in Celsius. public double CoolantTemperature_C { get; set; } Property Value double CoolantTemperature_K Gets or sets the coolant temperature in Kelvin. public double CoolantTemperature_K { get; set; } Property Value double MistFloodConvectionRatio Convection-coefficient ratio of mist coolant (MQL) relative to flood coolant. Applied multiplicatively to CoolantConvectionCoefficient_Wdm2K when the current CoolantMode is Mist. public double MistFloodConvectionRatio { get; set; } Property Value double Remarks Default 0.5. Industry handbooks place MQL at roughly half the heat removal of flood coolant — UNIST MQL Handbook: “actual heat removal is generally about half of that removed by a flood coolant”. Empirical milling / turning measurements on AISI 1045 steel give ΔT_flood ≈ 230 °C vs ΔT_mist ≈ 170 °C relative to dry (Mist ≈ 0.74 of flood), while tool-life / surface-finish studies on aluminium and titanium range 0.4–0.8. The single-number 0.5 default is the conservative midpoint; projects that characterise their own MQL system should override via XML. OffConvectionCoefficient_Wdm2K Gets or sets the convection coefficient when coolant is off (ambient air / forced blow-off), in Watts per square meter per Kelvin. public double OffConvectionCoefficient_Wdm2K { get; set; } Property Value double Remarks Natural convection in still air is ~5–25 W/(m²·K); forced air (shop blow-off / chip conveyor draft) falls in 10–500 W/(m²·K). Default 50 W/(m²·K) represents a mild forced-air environment typical of a running machine enclosure. XName Name for XML IO. public static string XName { get; } Property Value string Methods GetEffectiveConvectionCoefficient_Wdm2K(CoolantMode) Gets the effective convection coefficient for the given coolant mode in Watts per square meter per Kelvin. Flood: CoolantConvectionCoefficient_Wdm2K Mist: CoolantConvectionCoefficient_Wdm2K × MistFloodConvectionRatio Off / UnDefined: OffConvectionCoefficient_Wdm2K public double GetEffectiveConvectionCoefficient_Wdm2K(CoolantMode mode) Parameters mode CoolantMode Returns double GetEffectiveConvectionCoefficient_Wdmm2K(CoolantMode) Mode-dependent convection coefficient in Watts per square millimetre per Kelvin (direct input to the FEM layer). See GetEffectiveConvectionCoefficient_Wdm2K(CoolantMode). public double GetEffectiveConvectionCoefficient_Wdmm2K(CoolantMode mode) Parameters mode CoolantMode 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." + "summary": "Class CoolantHeatCondition Namespace Hi.Physics Assembly HiMech.dll Represents the heat condition parameters for coolant in machining operations. Provides effective convection-coefficient lookups keyed by CoolantMode — Flood uses the configured baseline CoolantConvectionCoefficient_Wdm2K; Mist scales it by MistFloodConvectionRatio; Off falls back to OffConvectionCoefficient_Wdm2K (natural/forced air). public class CoolantHeatCondition : IMakeXmlSource Inheritance object CoolantHeatCondition 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 CoolantHeatCondition() Initializes a new instance of the CoolantHeatCondition class. public CoolantHeatCondition() CoolantHeatCondition(XElement) Initializes a new instance of the CoolantHeatCondition class from XML data. public CoolantHeatCondition(XElement src) Parameters src XElement The XML element containing coolant heat condition data. Properties CoolantConvectionCoefficient_Wdm2K Gets or sets the coolant heat transfer coefficient (flood baseline) in Watts per square meter per Kelvin. public double CoolantConvectionCoefficient_Wdm2K { get; set; } Property Value double Remarks Common value: forced air: 10~500; coolant: 1e3~1e4 (ref by “Effects of coolant on temperature distribution in metal machining”, 1988) coolant: 1e3 (ref by “Modeling heat transfer in die milling”, 2014) CoolantConvectionCoefficient_Wdmm2K Gets or sets the coolant heat transfer coefficient (flood baseline) in Watts per square millimeter per Kelvin. public double CoolantConvectionCoefficient_Wdmm2K { get; set; } Property Value double CoolantTemperature_C Gets or sets the coolant temperature in Celsius. public double CoolantTemperature_C { get; set; } Property Value double CoolantTemperature_K Gets or sets the coolant temperature in Kelvin. public double CoolantTemperature_K { get; set; } Property Value double MistFloodConvectionRatio Convection-coefficient ratio of mist coolant (MQL) relative to flood coolant. Applied multiplicatively to CoolantConvectionCoefficient_Wdm2K when the current CoolantMode is Mist. public double MistFloodConvectionRatio { get; set; } Property Value double Remarks Default 0.5. Industry handbooks place MQL at roughly half the heat removal of flood coolant — UNIST MQL Handbook: “actual heat removal is generally about half of that removed by a flood coolant”. Empirical milling / turning measurements on AISI 1045 steel give ΔT_flood ≈ 230 °C vs ΔT_mist ≈ 170 °C relative to dry (Mist ≈ 0.74 of flood), while tool-life / surface-finish studies on aluminium and titanium range 0.4–0.8. The single-number 0.5 default is the conservative midpoint; projects that characterise their own MQL system should override via XML. OffConvectionCoefficient_Wdm2K Gets or sets the convection coefficient when coolant is off (ambient air / forced blow-off), in Watts per square meter per Kelvin. public double OffConvectionCoefficient_Wdm2K { get; set; } Property Value double Remarks Natural convection in still air is ~5–25 W/(m²·K); forced air (shop blow-off / chip conveyor draft) falls in 10–500 W/(m²·K). Default 50 W/(m²·K) represents a mild forced-air environment typical of a running machine enclosure. XName Name for XML IO. public static string XName { get; } Property Value string Methods GetEffectiveConvectionCoefficient_Wdm2K(CoolantMode) Gets the effective convection coefficient for the given coolant mode in Watts per square meter per Kelvin. Flood: CoolantConvectionCoefficient_Wdm2K Mist: CoolantConvectionCoefficient_Wdm2K × MistFloodConvectionRatio Off / UnDefined: OffConvectionCoefficient_Wdm2K public double GetEffectiveConvectionCoefficient_Wdm2K(CoolantMode mode) Parameters mode CoolantMode Returns double GetEffectiveConvectionCoefficient_Wdmm2K(CoolantMode) Mode-dependent convection coefficient in Watts per square millimetre per Kelvin (direct input to the FEM layer). See GetEffectiveConvectionCoefficient_Wdm2K(CoolantMode). public double GetEffectiveConvectionCoefficient_Wdmm2K(CoolantMode mode) Parameters mode CoolantMode 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Physics.CutterMaterial.html": { "href": "api/Hi.Physics.CutterMaterial.html", "title": "Class CutterMaterial | HiAPI-C# 2025", - "summary": "Class CutterMaterial Namespace Hi.Physics Assembly HiMech.dll Represents a cutter material with physical and thermal properties. public class CutterMaterial : ISurfaceMaterial, IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote, IToXElement Inheritance object CutterMaterial Implements ISurfaceMaterial IStructureMaterial IMakeXmlSource IDuplicate INameNote IToXElement Derived CoatingMaterial 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 CutterMaterial() Default constructor. public CutterMaterial() CutterMaterial(CutterMaterial) Creates a new cutter material as a copy of an existing one. public CutterMaterial(CutterMaterial src) Parameters src CutterMaterial The source material to copy from. CutterMaterial(XElement) Ctor. public CutterMaterial(XElement src) Parameters src XElement XML Properties Density_gdcm3 Gets or sets the density in grams per cubic centimeter. public double Density_gdcm3 { get; set; } Property Value double Density_gdm3 Density in g/dm³. public double Density_gdm3 { get; set; } Property Value double Density_gdmm3 Density in g/mm³. public double Density_gdmm3 { get; set; } Property Value double ElasticModulus_GPa Gets or sets the elastic modulus in gigapascals. public double ElasticModulus_GPa { get; set; } Property Value double FrictionCoefficient Gets or sets the friction coefficient of the surface material. public double FrictionCoefficient { get; set; } Property Value double FusionLatentHeat_Jdg Latent Heat of Fusion. public double FusionLatentHeat_Jdg { get; set; } Property Value double HeatCapacity_JdgK Gets or sets the heat capacity in Joules per gram-Kelvin. public double HeatCapacity_JdgK { get; set; } Property Value double HeatConductivity_WdmK Gets or sets the heat transfer coefficient in Watts per meter-Kelvin. public double HeatConductivity_WdmK { get; set; } Property Value double HeatConductivity_WdmmK Heat transfer coefficient in W/(mm·K). public double HeatConductivity_WdmmK { get; set; } Property Value double MeltingTemperature_K public double MeltingTemperature_K { get; set; } Property Value double 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 PoissonRatio public double PoissonRatio { get; set; } Property Value double TemperatureVsHardnessCurve Temperature versus hardness curve data. public List TemperatureVsHardnessCurve { get; set; } Property Value List TemperatureVsWearCoefficientCurve Temperature(K) vs WearCoefficient. Unit of WearCoefficient: 1e-6 (non-unit). public List TemperatureVsWearCoefficientCurve { get; set; } Property Value List TensileStrength_MPa public double TensileStrength_MPa { get; set; } Property Value double ThermalExpansionCoefficient_dMK public double ThermalExpansionCoefficient_dMK { get; set; } Property Value double WC General condition of WC (Tungsten Carbide). public static CutterMaterial WC { get; } Property Value CutterMaterial WC_Co6_800nm WC-Co6 with 800nm grain size properties. public static CutterMaterial WC_Co6_800nm { get; } Property Value CutterMaterial 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 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. ToXElement() Get the XElement to represent the object. public virtual XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class CutterMaterial Namespace Hi.Physics Assembly HiMech.dll Represents a cutter material with physical and thermal properties. public class CutterMaterial : ISurfaceMaterial, IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote, IToXElement Inheritance object CutterMaterial Implements ISurfaceMaterial IStructureMaterial IMakeXmlSource IDuplicate INameNote IToXElement Derived CoatingMaterial 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 CutterMaterial() Default constructor. public CutterMaterial() CutterMaterial(CutterMaterial) Creates a new cutter material as a copy of an existing one. public CutterMaterial(CutterMaterial src) Parameters src CutterMaterial The source material to copy from. CutterMaterial(XElement) Ctor. public CutterMaterial(XElement src) Parameters src XElement XML Properties Density_gdcm3 Gets or sets the density in grams per cubic centimeter. public double Density_gdcm3 { get; set; } Property Value double Density_gdm3 Density in g/dm³. public double Density_gdm3 { get; set; } Property Value double Density_gdmm3 Density in g/mm³. public double Density_gdmm3 { get; set; } Property Value double ElasticModulus_GPa Gets or sets the elastic modulus in gigapascals. public double ElasticModulus_GPa { get; set; } Property Value double FrictionCoefficient Gets or sets the friction coefficient of the surface material. public double FrictionCoefficient { get; set; } Property Value double FusionLatentHeat_Jdg Latent Heat of Fusion. public double FusionLatentHeat_Jdg { get; set; } Property Value double HeatCapacity_JdgK Gets or sets the heat capacity in Joules per gram-Kelvin. public double HeatCapacity_JdgK { get; set; } Property Value double HeatConductivity_WdmK Gets or sets the heat transfer coefficient in Watts per meter-Kelvin. public double HeatConductivity_WdmK { get; set; } Property Value double HeatConductivity_WdmmK Heat transfer coefficient in W/(mm·K). public double HeatConductivity_WdmmK { get; set; } Property Value double MeltingTemperature_K public double MeltingTemperature_K { get; set; } Property Value double 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 PoissonRatio public double PoissonRatio { get; set; } Property Value double TemperatureVsHardnessCurve Temperature versus hardness curve data. public List TemperatureVsHardnessCurve { get; set; } Property Value List TemperatureVsWearCoefficientCurve Temperature(K) vs WearCoefficient. Unit of WearCoefficient: 1e-6 (non-unit). public List TemperatureVsWearCoefficientCurve { get; set; } Property Value List TensileStrength_MPa public double TensileStrength_MPa { get; set; } Property Value double ThermalExpansionCoefficient_dMK public double ThermalExpansionCoefficient_dMK { get; set; } Property Value double WC General condition of WC (Tungsten Carbide). public static CutterMaterial WC { get; } Property Value CutterMaterial WC_Co6_800nm WC-Co6 with 800nm grain size properties. public static CutterMaterial WC_Co6_800nm { get; } Property Value CutterMaterial 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 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public virtual XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Physics.IGetThermalLayerList.html": { "href": "api/Hi.Physics.IGetThermalLayerList.html", @@ -5917,7 +5917,7 @@ "api/Hi.Physics.StructureMaterial.html": { "href": "api/Hi.Physics.StructureMaterial.html", "title": "Class StructureMaterial | HiAPI-C# 2025", - "summary": "Class StructureMaterial Namespace Hi.Physics Assembly HiMech.dll Represents a material with physical and thermal properties used in structural analysis. public class StructureMaterial : IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote, IToXElement Inheritance object StructureMaterial Implements IStructureMaterial IMakeXmlSource IDuplicate INameNote 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 StructureMaterial() Default constructor. public StructureMaterial() StructureMaterial(StructureMaterial) Creates a new cutter material as a copy of an existing one. public StructureMaterial(StructureMaterial src) Parameters src StructureMaterial The source material to copy from. StructureMaterial(XElement) Ctor. public StructureMaterial(XElement src) Parameters src XElement XML Properties AlloySteel42CrMo Gets a predefined 42CrMo alloy steel material commonly used for milling cutter bodies. public static StructureMaterial AlloySteel42CrMo { get; } Property Value StructureMaterial Density_gdcm3 Gets or sets the density in grams per cubic centimeter. public double Density_gdcm3 { get; set; } Property Value double Density_gdm3 Density in g/dm³. public double Density_gdm3 { get; set; } Property Value double Density_gdmm3 Density in g/mm³. public double Density_gdmm3 { get; set; } Property Value double ElasticModulus_GPa Gets or sets the elastic modulus in gigapascals. public double ElasticModulus_GPa { get; set; } Property Value double HeatCapacity_JdgK Gets or sets the heat capacity in Joules per gram-Kelvin. public double HeatCapacity_JdgK { get; set; } Property Value double HeatConductivity_WdmK Gets or sets the heat transfer coefficient in Watts per meter-Kelvin. public double HeatConductivity_WdmK { get; set; } Property Value double HeatConductivity_WdmmK Heat transfer coefficient in W/(mm·K). public double HeatConductivity_WdmmK { get; set; } Property Value double 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 PoissonRatio public double PoissonRatio { get; set; } Property Value double TensileStrength_MPa public double TensileStrength_MPa { get; set; } Property Value double ThermalExpansionCoefficient_dMK public double ThermalExpansionCoefficient_dMK { get; set; } Property Value double 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 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. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class StructureMaterial Namespace Hi.Physics Assembly HiMech.dll Represents a material with physical and thermal properties used in structural analysis. public class StructureMaterial : IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote, IToXElement Inheritance object StructureMaterial Implements IStructureMaterial IMakeXmlSource IDuplicate INameNote 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 StructureMaterial() Default constructor. public StructureMaterial() StructureMaterial(StructureMaterial) Creates a new cutter material as a copy of an existing one. public StructureMaterial(StructureMaterial src) Parameters src StructureMaterial The source material to copy from. StructureMaterial(XElement) Ctor. public StructureMaterial(XElement src) Parameters src XElement XML Properties AlloySteel42CrMo Gets a predefined 42CrMo alloy steel material commonly used for milling cutter bodies. public static StructureMaterial AlloySteel42CrMo { get; } Property Value StructureMaterial Density_gdcm3 Gets or sets the density in grams per cubic centimeter. public double Density_gdcm3 { get; set; } Property Value double Density_gdm3 Density in g/dm³. public double Density_gdm3 { get; set; } Property Value double Density_gdmm3 Density in g/mm³. public double Density_gdmm3 { get; set; } Property Value double ElasticModulus_GPa Gets or sets the elastic modulus in gigapascals. public double ElasticModulus_GPa { get; set; } Property Value double HeatCapacity_JdgK Gets or sets the heat capacity in Joules per gram-Kelvin. public double HeatCapacity_JdgK { get; set; } Property Value double HeatConductivity_WdmK Gets or sets the heat transfer coefficient in Watts per meter-Kelvin. public double HeatConductivity_WdmK { get; set; } Property Value double HeatConductivity_WdmmK Heat transfer coefficient in W/(mm·K). public double HeatConductivity_WdmmK { get; set; } Property Value double 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 PoissonRatio public double PoissonRatio { get; set; } Property Value double TensileStrength_MPa public double TensileStrength_MPa { get; set; } Property Value double ThermalExpansionCoefficient_dMK public double ThermalExpansionCoefficient_dMK { get; set; } Property Value double 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 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.Physics.TemperatureUtil.html": { "href": "api/Hi.Physics.TemperatureUtil.html", @@ -5932,7 +5932,7 @@ "api/Hi.Physics.ThermalLayer1D.html": { "href": "api/Hi.Physics.ThermalLayer1D.html", "title": "Class ThermalLayer1D | HiAPI-C# 2025", - "summary": "Class ThermalLayer1D Namespace Hi.Physics Assembly HiMech.dll Represents a one-dimensional thermal layer for heat transfer calculations. public class ThermalLayer1D : IMakeXmlSource Inheritance object ThermalLayer1D 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 ThermalLayer1D() Initializes a new instance of the ThermalLayer1D class. public ThermalLayer1D() ThermalLayer1D(IStructureMaterial, double) Initializes a new instance of the ThermalLayer1D class with the specified material and length. public ThermalLayer1D(IStructureMaterial material, double length_mm) Parameters material IStructureMaterial The thermal material of this layer. length_mm double The length of this layer in millimeters. ThermalLayer1D(ThermalLayer1D) Initializes a new instance of the ThermalLayer1D class by copying from another instance. public ThermalLayer1D(ThermalLayer1D src) Parameters src ThermalLayer1D The source thermal layer to copy from. ThermalLayer1D(XElement, string, string, IProgress) Initializes a new instance of the ThermalLayer1D class from XML data. public ThermalLayer1D(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing thermal layer data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Progress reporter for nested material XML loading. Properties Length_mm Gets or sets the length of this thermal layer in millimeters. public double Length_mm { get; set; } Property Value double Length_um Gets or sets the length of this thermal layer in micrometers. public double Length_um { get; set; } Property Value double Material Gets or sets the thermal material of this layer. public IStructureMaterial Material { get; set; } Property Value IStructureMaterial XName Name for XML IO. 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 ThermalLayer1D Namespace Hi.Physics Assembly HiMech.dll Represents a one-dimensional thermal layer for heat transfer calculations. public class ThermalLayer1D : IMakeXmlSource Inheritance object ThermalLayer1D 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 ThermalLayer1D() Initializes a new instance of the ThermalLayer1D class. public ThermalLayer1D() ThermalLayer1D(IStructureMaterial, double) Initializes a new instance of the ThermalLayer1D class with the specified material and length. public ThermalLayer1D(IStructureMaterial material, double length_mm) Parameters material IStructureMaterial The thermal material of this layer. length_mm double The length of this layer in millimeters. ThermalLayer1D(ThermalLayer1D) Initializes a new instance of the ThermalLayer1D class by copying from another instance. public ThermalLayer1D(ThermalLayer1D src) Parameters src ThermalLayer1D The source thermal layer to copy from. ThermalLayer1D(XElement, string, string, IProgress) Initializes a new instance of the ThermalLayer1D class from XML data. public ThermalLayer1D(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing thermal layer data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Progress reporter for nested material XML loading. Properties Length_mm Gets or sets the length of this thermal layer in millimeters. public double Length_mm { get; set; } Property Value double Length_um Gets or sets the length of this thermal layer in micrometers. public double Length_um { get; set; } Property Value double Material Gets or sets the thermal material of this layer. public IStructureMaterial Material { get; set; } Property Value IStructureMaterial XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Physics.TimeSeriesUtil.html": { "href": "api/Hi.Physics.TimeSeriesUtil.html", @@ -5947,7 +5947,7 @@ "api/Hi.Physics.WorkpieceMaterial.html": { "href": "api/Hi.Physics.WorkpieceMaterial.html", "title": "Class WorkpieceMaterial | HiAPI-C# 2025", - "summary": "Class WorkpieceMaterial Namespace Hi.Physics Assembly HiMech.dll Represents the physical and mechanical properties of a workpiece material. public class WorkpieceMaterial : IPreferredFileName, IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote Inheritance object WorkpieceMaterial Implements IPreferredFileName IStructureMaterial IMakeXmlSource IDuplicate INameNote 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 WorkpieceMaterial() Ctor. public WorkpieceMaterial() WorkpieceMaterial(XElement, string) Ctor. public WorkpieceMaterial(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties Al6061T6 General condition of Al6061T6. public static WorkpieceMaterial Al6061T6 { get; } Property Value WorkpieceMaterial CompressiveYieldStrength_MPa Gets or sets the compressive yield strength in megapascals (MPa). public double CompressiveYieldStrength_MPa { get; set; } Property Value double Density_gdcm3 Gets or sets the density in grams per cubic centimeter (g/cm³). public double Density_gdcm3 { get; set; } Property Value double Density_gdm3 Gets or sets the density in grams per cubic decimeter (g/dm³). public double Density_gdm3 { get; set; } Property Value double Density_gdmm3 Gets or sets the density in grams per cubic millimeter (g/mm³). public double Density_gdmm3 { get; set; } Property Value double ElasticModulus_GPa Gets or sets the elastic modulus in gigapascals (GPa). public double ElasticModulus_GPa { get; set; } Property Value double ElogationRaioAtBreak Gets or sets the elongation ratio at break point. public double ElogationRaioAtBreak { get; set; } Property Value double FusionLatentHeat_Jdg Gets or sets the latent heat of fusion in joules per gram (J/g). public double FusionLatentHeat_Jdg { get; set; } Property Value double HeatCapacity_JdgK Gets or sets the specific heat capacity in joules per gram per Kelvin (J/g·K). public double HeatCapacity_JdgK { get; set; } Property Value double HeatConductivity_WdmK Gets or sets the heat transfer coefficient in watts per decimeter per Kelvin (W/dm·K). public double HeatConductivity_WdmK { get; set; } Property Value double HeatConductivity_WdmmK Gets or sets the heat conductivity in watts per millimeter per Kelvin (W/mm·K). This is a conversion of HeatConductivity_WdmK with a factor of 1/1000. public double HeatConductivity_WdmmK { get; set; } Property Value double MeltingTemperature_C Gets or sets the melting temperature in Celsius (°C). public double MeltingTemperature_C { get; set; } Property Value double MeltingTemperature_K Gets or sets the melting temperature in Kelvin (K). public double MeltingTemperature_K { get; set; } Property Value double Name Gets or sets the name of the material. public string Name { get; set; } Property Value string Note Gets or sets additional notes about the material. public string Note { get; set; } Property Value string PoissonRatio Gets or sets the Poisson's ratio of the material. public double PoissonRatio { get; set; } Property Value double PreferredFileName Gets or sets the preferred file name for this object when generating or saving files. public string PreferredFileName { get; set; } Property Value string TensileYieldStrength_MPa Gets or sets the tensile yield strength in megapascals (MPa). public double TensileYieldStrength_MPa { get; set; } Property Value double 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 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 WorkpieceMaterial Namespace Hi.Physics Assembly HiMech.dll Represents the physical and mechanical properties of a workpiece material. public class WorkpieceMaterial : IPreferredFileName, IStructureMaterial, IMakeXmlSource, IDuplicate, INameNote Inheritance object WorkpieceMaterial Implements IPreferredFileName IStructureMaterial IMakeXmlSource IDuplicate INameNote 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 WorkpieceMaterial() Ctor. public WorkpieceMaterial() WorkpieceMaterial(XElement, string) Ctor. public WorkpieceMaterial(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths Properties Al6061T6 General condition of Al6061T6. public static WorkpieceMaterial Al6061T6 { get; } Property Value WorkpieceMaterial CompressiveYieldStrength_MPa Gets or sets the compressive yield strength in megapascals (MPa). public double CompressiveYieldStrength_MPa { get; set; } Property Value double Density_gdcm3 Gets or sets the density in grams per cubic centimeter (g/cm³). public double Density_gdcm3 { get; set; } Property Value double Density_gdm3 Gets or sets the density in grams per cubic decimeter (g/dm³). public double Density_gdm3 { get; set; } Property Value double Density_gdmm3 Gets or sets the density in grams per cubic millimeter (g/mm³). public double Density_gdmm3 { get; set; } Property Value double ElasticModulus_GPa Gets or sets the elastic modulus in gigapascals (GPa). public double ElasticModulus_GPa { get; set; } Property Value double ElogationRaioAtBreak Gets or sets the elongation ratio at break point. public double ElogationRaioAtBreak { get; set; } Property Value double FusionLatentHeat_Jdg Gets or sets the latent heat of fusion in joules per gram (J/g). public double FusionLatentHeat_Jdg { get; set; } Property Value double HeatCapacity_JdgK Gets or sets the specific heat capacity in joules per gram per Kelvin (J/g·K). public double HeatCapacity_JdgK { get; set; } Property Value double HeatConductivity_WdmK Gets or sets the heat transfer coefficient in watts per decimeter per Kelvin (W/dm·K). public double HeatConductivity_WdmK { get; set; } Property Value double HeatConductivity_WdmmK Gets or sets the heat conductivity in watts per millimeter per Kelvin (W/mm·K). This is a conversion of HeatConductivity_WdmK with a factor of 1/1000. public double HeatConductivity_WdmmK { get; set; } Property Value double MeltingTemperature_C Gets or sets the melting temperature in Celsius (°C). public double MeltingTemperature_C { get; set; } Property Value double MeltingTemperature_K Gets or sets the melting temperature in Kelvin (K). public double MeltingTemperature_K { get; set; } Property Value double Name Gets or sets the name of the material. public string Name { get; set; } Property Value string Note Gets or sets additional notes about the material. public string Note { get; set; } Property Value string PoissonRatio Gets or sets the Poisson's ratio of the material. public double PoissonRatio { get; set; } Property Value double PreferredFileName Gets or sets the preferred file name for this object when generating or saving files. public string PreferredFileName { get; set; } Property Value string TensileYieldStrength_MPa Gets or sets the tensile yield strength in megapascals (MPa). public double TensileYieldStrength_MPa { get; set; } Property Value double 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 MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.Physics.html": { "href": "api/Hi.Physics.html", @@ -5957,12 +5957,12 @@ "api/Hi.SessionCommands.EnablingWrapper.html": { "href": "api/Hi.SessionCommands.EnablingWrapper.html", "title": "Class EnablingWrapper | HiAPI-C# 2025", - "summary": "Class EnablingWrapper Namespace Hi.SessionCommands Assembly HiNc.dll Wrapper for session commands that provides enable/disable functionality. public class EnablingWrapper : ISessionCommand, IMakeXmlSource Inheritance object EnablingWrapper Implements ISessionCommand 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 EnablingWrapper() Ctor. public EnablingWrapper() EnablingWrapper(ISessionCommand) Initializes a new instance of the EnablingWrapper class with the specified command. public EnablingWrapper(ISessionCommand command) Parameters command ISessionCommand The command to wrap. EnablingWrapper(XElement, string, string, IProgress, object[]) Ctor. public EnablingWrapper(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Progress reporter for nested command XML. res object[] Additional resources Properties Command Gets or sets the wrapped session command. public ISessionCommand Command { get; set; } Property Value ISessionCommand IsEnabled Gets or sets whether the wrapped command is enabled. public bool IsEnabled { get; set; } Property Value bool XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class EnablingWrapper Namespace Hi.SessionCommands Assembly HiNc.dll Wrapper for session commands that provides enable/disable functionality. public class EnablingWrapper : ISessionCommand, IMakeXmlSource Inheritance object EnablingWrapper Implements ISessionCommand 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 EnablingWrapper() Ctor. public EnablingWrapper() EnablingWrapper(ISessionCommand) Initializes a new instance of the EnablingWrapper class with the specified command. public EnablingWrapper(ISessionCommand command) Parameters command ISessionCommand The command to wrap. EnablingWrapper(XElement, string, string, IProgress, object[]) Ctor. public EnablingWrapper(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Progress reporter for nested command XML. res object[] Additional resources Properties Command Gets or sets the wrapped session command. public ISessionCommand Command { get; set; } Property Value ISessionCommand IsEnabled Gets or sets whether the wrapped command is enabled. public bool IsEnabled { get; set; } Property Value bool XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.GeomDiffCommand.html": { "href": "api/Hi.SessionCommands.GeomDiffCommand.html", "title": "Class GeomDiffCommand | HiAPI-C# 2025", - "summary": "Class GeomDiffCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for calculating geometric differences between workpieces. public class GeomDiffCommand : ISessionCommand, IMakeXmlSource Inheritance object GeomDiffCommand Implements ISessionCommand 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 GeomDiffCommand() Default constructor. public GeomDiffCommand() GeomDiffCommand(XElement, string) Ctor. public GeomDiffCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for relative paths. Fields ConstDisplayName Display name constant for this command. public const string ConstDisplayName = \"Geometry Difference\" Field Value string Properties DetectRadius_mm Detection radius in millimeters. public double DetectRadius_mm { get; set; } Property Value double XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class GeomDiffCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for calculating geometric differences between workpieces. public class GeomDiffCommand : ISessionCommand, IMakeXmlSource Inheritance object GeomDiffCommand Implements ISessionCommand 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 GeomDiffCommand() Default constructor. public GeomDiffCommand() GeomDiffCommand(XElement, string) Ctor. public GeomDiffCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for relative paths. Fields ConstDisplayName Display name constant for this command. public const string ConstDisplayName = \"Geometry Difference\" Field Value string Properties DetectRadius_mm Detection radius in millimeters. public double DetectRadius_mm { get; set; } Property Value double XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.ISessionCommand.html": { "href": "api/Hi.SessionCommands.ISessionCommand.html", @@ -5982,47 +5982,47 @@ "api/Hi.SessionCommands.ListCommand.html": { "href": "api/Hi.SessionCommands.ListCommand.html", "title": "Class ListCommand | HiAPI-C# 2025", - "summary": "Class ListCommand Namespace Hi.SessionCommands Assembly HiNc.dll A command that contains and executes a list of other commands. public class ListCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object ListCommand Implements ITitleCommand ISessionCommand 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 ListCommand() Default constructor. public ListCommand() ListCommand(XElement, string, string, IProgress, object[]) Ctor. public ListCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths. relFile string Relative file path. progress IProgress Progress reporter for nested command XML. res object[] Additional resources Properties CommandEntryList Command List. The item in list is null capable. public List CommandEntryList { get; set; } Property Value List XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class ListCommand Namespace Hi.SessionCommands Assembly HiNc.dll A command that contains and executes a list of other commands. public class ListCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object ListCommand Implements ITitleCommand ISessionCommand 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 ListCommand() Default constructor. public ListCommand() ListCommand(XElement, string, string, IProgress, object[]) Ctor. public ListCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths. relFile string Relative file path. progress IProgress Progress reporter for nested command XML. res object[] Additional resources Properties CommandEntryList Command List. The item in list is null capable. public List CommandEntryList { get; set; } Property Value List XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null), and chains Reg(factory) on dependents so the registration graph is observable. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.MachiningMotionResolutionCommand.html": { "href": "api/Hi.SessionCommands.MachiningMotionResolutionCommand.html", "title": "Class MachiningMotionResolutionCommand | HiAPI-C# 2025", - "summary": "Class MachiningMotionResolutionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for setting machining motion resolution for the milling process. public class MachiningMotionResolutionCommand : ISessionCommand, IMakeXmlSource Inheritance object MachiningMotionResolutionCommand Implements ISessionCommand 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 MachiningMotionResolutionCommand() Ctor. public MachiningMotionResolutionCommand() MachiningMotionResolutionCommand(XElement, string, string, IProgress) Ctor. public MachiningMotionResolutionCommand(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths relFile string Relative file path progress IProgress Progress reporter for nested resolution XML. Properties MachiningMotionResolution Main content. Machining Cycle Resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class MachiningMotionResolutionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for setting machining motion resolution for the milling process. public class MachiningMotionResolutionCommand : ISessionCommand, IMakeXmlSource Inheritance object MachiningMotionResolutionCommand Implements ISessionCommand 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 MachiningMotionResolutionCommand() Ctor. public MachiningMotionResolutionCommand() MachiningMotionResolutionCommand(XElement, string, string, IProgress) Ctor. public MachiningMotionResolutionCommand(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths relFile string Relative file path progress IProgress Progress reporter for nested resolution XML. Properties MachiningMotionResolution Main content. Machining Cycle Resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null), and chains Reg(factory) on dependents so the registration graph is observable. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.NcCodeCommand.html": { "href": "api/Hi.SessionCommands.NcCodeCommand.html", "title": "Class NcCodeCommand | HiAPI-C# 2025", - "summary": "Class NcCodeCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing NC code directly. public class NcCodeCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object NcCodeCommand Implements ITitleCommand ISessionCommand 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 NcCodeCommand() Ctor. public NcCodeCommand() NcCodeCommand(string) Initializes a new instance of the NcCodeCommand class with the specified NC text. public NcCodeCommand(string nc) Parameters nc string The NC code text. NcCodeCommand(XElement, string) Ctor. public NcCodeCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties NcText The NC code text content. public string NcText { get; set; } Property Value string Title Title. Alternative file name for the NC code file. public string Title { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class NcCodeCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing NC code directly. public class NcCodeCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object NcCodeCommand Implements ITitleCommand ISessionCommand 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 NcCodeCommand() Ctor. public NcCodeCommand() NcCodeCommand(string) Initializes a new instance of the NcCodeCommand class with the specified NC text. public NcCodeCommand(string nc) Parameters nc string The NC code text. NcCodeCommand(XElement, string) Ctor. public NcCodeCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties NcText The NC code text content. public string NcText { get; set; } Property Value string Title Title. Alternative file name for the NC code file. public string Title { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.NcFileCommand.html": { "href": "api/Hi.SessionCommands.NcFileCommand.html", "title": "Class NcFileCommand | HiAPI-C# 2025", - "summary": "Class NcFileCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing NC code from a file. public class NcFileCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object NcFileCommand Implements ITitleCommand ISessionCommand 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 NcFileCommand() Default constructor. public NcFileCommand() NcFileCommand(string) Initializes a new instance of the NcFileCommand class with the specified NC file path. public NcFileCommand(string ncFile) Parameters ncFile string The NC file path. NcFileCommand(XElement, string) Ctor. public NcFileCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties NcFile Path to the NC file. public string NcFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class NcFileCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing NC code from a file. public class NcFileCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object NcFileCommand Implements ITitleCommand ISessionCommand 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 NcFileCommand() Default constructor. public NcFileCommand() NcFileCommand(string) Initializes a new instance of the NcFileCommand class with the specified NC file path. public NcFileCommand(string ncFile) Parameters ncFile string The NC file path. NcFileCommand(XElement, string) Ctor. public NcFileCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties NcFile Path to the NC file. public string NcFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.NcFileListCommand.html": { "href": "api/Hi.SessionCommands.NcFileListCommand.html", "title": "Class NcFileListCommand | HiAPI-C# 2025", - "summary": "Class NcFileListCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing multiple NC files sequentially. public class NcFileListCommand : ISessionCommand, IMakeXmlSource Inheritance object NcFileListCommand Implements ISessionCommand 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 NcFileListCommand() Default constructor. public NcFileListCommand() NcFileListCommand(XElement, string) Ctor. public NcFileListCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties NcFileList List of NC files to execute. public List NcFileList { get; set; } Property Value List XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class NcFileListCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing multiple NC files sequentially. public class NcFileListCommand : ISessionCommand, IMakeXmlSource Inheritance object NcFileListCommand Implements ISessionCommand 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 NcFileListCommand() Default constructor. public NcFileListCommand() NcFileListCommand(XElement, string) Ctor. public NcFileListCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties NcFileList List of NC files to execute. public List NcFileList { get; set; } Property Value List XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.NcOptOptionCommand.html": { "href": "api/Hi.SessionCommands.NcOptOptionCommand.html", "title": "Class NcOptOptionCommand | HiAPI-C# 2025", - "summary": "Class NcOptOptionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for NC optimization options. public class NcOptOptionCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object NcOptOptionCommand Implements ITitleCommand ISessionCommand 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 NcOptOptionCommand() Ctor. public NcOptOptionCommand() NcOptOptionCommand(XElement, string, string, IProgress, object[]) Ctor. public NcOptOptionCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Progress reporter for nested option XML. res object[] Additional resources Properties NcOptOption Gets or sets the NC optimization options. public NcOptOption NcOptOption { get; set; } Property Value NcOptOption XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class NcOptOptionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for NC optimization options. public class NcOptOptionCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object NcOptOptionCommand Implements ITitleCommand ISessionCommand 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 NcOptOptionCommand() Ctor. public NcOptOptionCommand() NcOptOptionCommand(XElement, string, string, IProgress, object[]) Ctor. public NcOptOptionCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Progress reporter for nested option XML. res object[] Additional resources Properties NcOptOption Gets or sets the NC optimization options. public NcOptOption NcOptOption { get; set; } Property Value NcOptOption XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.OptimizeToFilesCommand.html": { "href": "api/Hi.SessionCommands.OptimizeToFilesCommand.html", "title": "Class OptimizeToFilesCommand | HiAPI-C# 2025", - "summary": "Class OptimizeToFilesCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call OptimizeToFiles(string). public class OptimizeToFilesCommand : ISessionCommand, IMakeXmlSource Inheritance object OptimizeToFilesCommand Implements ISessionCommand 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 OptimizeToFilesCommand() Default constructor. public OptimizeToFilesCommand() OptimizeToFilesCommand(XElement, string) Ctor. public OptimizeToFilesCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFileTemplate Template for the relative file path. public string RelFileTemplate { get; set; } Property Value string XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class OptimizeToFilesCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call OptimizeToFiles(string). public class OptimizeToFilesCommand : ISessionCommand, IMakeXmlSource Inheritance object OptimizeToFilesCommand Implements ISessionCommand 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 OptimizeToFilesCommand() Default constructor. public OptimizeToFilesCommand() OptimizeToFilesCommand(XElement, string) Ctor. public OptimizeToFilesCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFileTemplate Template for the relative file path. public string RelFileTemplate { get; set; } Property Value string XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.PostExecutionCommand.html": { "href": "api/Hi.SessionCommands.PostExecutionCommand.html", "title": "Class PostExecutionCommand | HiAPI-C# 2025", - "summary": "Class PostExecutionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for post-execution actions after NC command running. public class PostExecutionCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object PostExecutionCommand Implements ITitleCommand ISessionCommand 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 PostExecutionCommand() Ctor. public PostExecutionCommand() PostExecutionCommand(XElement, string, string, params object[]) Ctor. public PostExecutionCommand(XElement src, string baseDirectory, string relFile, params object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path res object[] Additional resources Properties EnableGeomDiff Gets or sets whether to enable geometry difference detection. public bool EnableGeomDiff { get; set; } Property Value bool EnableOptimizeToFiles Gets or sets whether to enable optimization to files. public bool EnableOptimizeToFiles { get; set; } Property Value bool EnableWriteRuntimeGeom Gets or sets whether to write runtime geometry to file. public bool EnableWriteRuntimeGeom { get; set; } Property Value bool EnableWriteShotFiles Gets or sets whether to write shot files. public bool EnableWriteShotFiles { get; set; } Property Value bool EnableWriteStepFiles Gets or sets whether to write step files. public bool EnableWriteStepFiles { get; set; } Property Value bool GeomDiffDetectRadius_mm Gets or sets the geometry difference detection radius in millimeters. public double GeomDiffDetectRadius_mm { get; set; } Property Value double OptimizationFileTemplate Gets or sets the optimization file template path. public string OptimizationFileTemplate { get; set; } Property Value string RuntimeGeomFilePath Gets or sets the runtime geometry file path. public string RuntimeGeomFilePath { get; set; } Property Value string ShotFileTemplate Gets or sets the shot file template path. public string ShotFileTemplate { get; set; } Property Value string ShotFileTimeResolution_ms Gets or sets the time resolution for shot files in milliseconds. public double ShotFileTimeResolution_ms { get; set; } Property Value double StepFileTemplate Gets or sets the step file template path. public string StepFileTemplate { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class PostExecutionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for post-execution actions after NC command running. public class PostExecutionCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object PostExecutionCommand Implements ITitleCommand ISessionCommand 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 PostExecutionCommand() Ctor. public PostExecutionCommand() PostExecutionCommand(XElement, string, string, params object[]) Ctor. public PostExecutionCommand(XElement src, string baseDirectory, string relFile, params object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path res object[] Additional resources Properties EnableGeomDiff Gets or sets whether to enable geometry difference detection. public bool EnableGeomDiff { get; set; } Property Value bool EnableOptimizeToFiles Gets or sets whether to enable optimization to files. public bool EnableOptimizeToFiles { get; set; } Property Value bool EnableWriteRuntimeGeom Gets or sets whether to write runtime geometry to file. public bool EnableWriteRuntimeGeom { get; set; } Property Value bool EnableWriteShotFiles Gets or sets whether to write shot files. public bool EnableWriteShotFiles { get; set; } Property Value bool EnableWriteStepFiles Gets or sets whether to write step files. public bool EnableWriteStepFiles { get; set; } Property Value bool GeomDiffDetectRadius_mm Gets or sets the geometry difference detection radius in millimeters. public double GeomDiffDetectRadius_mm { get; set; } Property Value double OptimizationFileTemplate Gets or sets the optimization file template path. public string OptimizationFileTemplate { get; set; } Property Value string RuntimeGeomFilePath Gets or sets the runtime geometry file path. public string RuntimeGeomFilePath { get; set; } Property Value string ShotFileTemplate Gets or sets the shot file template path. public string ShotFileTemplate { get; set; } Property Value string ShotFileTimeResolution_ms Gets or sets the time resolution for shot files in milliseconds. public double ShotFileTimeResolution_ms { get; set; } Property Value double StepFileTemplate Gets or sets the step file template path. public string StepFileTemplate { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.PreSettingCommand.html": { "href": "api/Hi.SessionCommands.PreSettingCommand.html", "title": "Class PreSettingCommand | HiAPI-C# 2025", - "summary": "Class PreSettingCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for pre-settings before NC command running. public class PreSettingCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object PreSettingCommand Implements ITitleCommand ISessionCommand 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 PreSettingCommand() Ctor. public PreSettingCommand() PreSettingCommand(XElement, string, string, IProgress, object[]) Ctor. public PreSettingCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Progress reporter for nested preset XML. res object[] Additional resources Properties EnableCollisionDetection Gets or sets whether collision detection is enabled. public bool EnableCollisionDetection { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure. public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether physics is enabled. public bool EnablePhysics { get; set; } Property Value bool EnableReadRuntimeGeom Gets or sets whether to enable reading runtime geometry. public bool EnableReadRuntimeGeom { get; set; } Property Value bool MachiningMotionResolution Gets or sets the machining motion resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution_mm Gets or sets the machining resolution in millimeters. public double MachiningResolution_mm { get; set; } Property Value double RuntimeGeomFile Gets or sets the runtime geometry file path. public string RuntimeGeomFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class PreSettingCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for pre-settings before NC command running. public class PreSettingCommand : ITitleCommand, ISessionCommand, IMakeXmlSource Inheritance object PreSettingCommand Implements ITitleCommand ISessionCommand 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 PreSettingCommand() Ctor. public PreSettingCommand() PreSettingCommand(XElement, string, string, IProgress, object[]) Ctor. public PreSettingCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Progress reporter for nested preset XML. res object[] Additional resources Properties EnableCollisionDetection Gets or sets whether collision detection is enabled. public bool EnableCollisionDetection { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure. public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether physics is enabled. public bool EnablePhysics { get; set; } Property Value bool EnableReadRuntimeGeom Gets or sets whether to enable reading runtime geometry. public bool EnableReadRuntimeGeom { get; set; } Property Value bool MachiningMotionResolution Gets or sets the machining motion resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution_mm Gets or sets the machining resolution in millimeters. public double MachiningResolution_mm { get; set; } Property Value double RuntimeGeomFile Gets or sets the runtime geometry file path. public string RuntimeGeomFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.RecordRuntimeGeomActionEnum.html": { "href": "api/Hi.SessionCommands.RecordRuntimeGeomActionEnum.html", @@ -6032,32 +6032,32 @@ "api/Hi.SessionCommands.RecordRuntimeGeomCommand.html": { "href": "api/Hi.SessionCommands.RecordRuntimeGeomCommand.html", "title": "Class RecordRuntimeGeomCommand | HiAPI-C# 2025", - "summary": "Class RecordRuntimeGeomCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for recording runtime geometry to/from file. public class RecordRuntimeGeomCommand : ISessionCommand, IMakeXmlSource Inheritance object RecordRuntimeGeomCommand Implements ISessionCommand 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 RecordRuntimeGeomCommand() Default constructor. public RecordRuntimeGeomCommand() RecordRuntimeGeomCommand(XElement, string) Ctor. public RecordRuntimeGeomCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties MainActionEnum Main action to perform (read, write, or conditional). public RecordRuntimeGeomActionEnum MainActionEnum { get; set; } Property Value RecordRuntimeGeomActionEnum RelFile Relative file path. public string RelFile { get; set; } Property Value string XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class RecordRuntimeGeomCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for recording runtime geometry to/from file. public class RecordRuntimeGeomCommand : ISessionCommand, IMakeXmlSource Inheritance object RecordRuntimeGeomCommand Implements ISessionCommand 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 RecordRuntimeGeomCommand() Default constructor. public RecordRuntimeGeomCommand() RecordRuntimeGeomCommand(XElement, string) Ctor. public RecordRuntimeGeomCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties MainActionEnum Main action to perform (read, write, or conditional). public RecordRuntimeGeomActionEnum MainActionEnum { get; set; } Property Value RecordRuntimeGeomActionEnum RelFile Relative file path. public string RelFile { get; set; } Property Value string XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.ScriptCommand.html": { "href": "api/Hi.SessionCommands.ScriptCommand.html", "title": "Class ScriptCommand | HiAPI-C# 2025", - "summary": "Class ScriptCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing C# scripts in the milling process. public class ScriptCommand : ITitleCommand, ISessionCommand, IMakeXmlSource, IGetSelectionName Inheritance object ScriptCommand Implements ITitleCommand ISessionCommand IMakeXmlSource IGetSelectionName 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 ScriptCommand() Ctor. public ScriptCommand() ScriptCommand(XElement, string) Ctor. public ScriptCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties ExecutionTemplate Gets the execution template command. public static ScriptCommand ExecutionTemplate { get; } Property Value ScriptCommand OptimizationConfigurationTemplate Gets the optimization configuration template command. public static ScriptCommand OptimizationConfigurationTemplate { get; } Property Value ScriptCommand PreSettingTemplate Gets the pre-setting template command. public static ScriptCommand PreSettingTemplate { get; } Property Value ScriptCommand ScriptText The script text content. public string ScriptText { get; set; } Property Value string ScriptTitle Title or name of the script. public string ScriptTitle { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GenTemplateCommand() Generates a template script command with default values. public static ScriptCommand GenTemplateCommand() Returns ScriptCommand A new ScriptCommand with template values GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. GetSelectionName() Gets a name that can be used for selection in UI or other contexts. public string GetSelectionName() Returns string The selection name for this 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed. Run(SessionShell, string) Runs a specified script with the given session shell. public IEnumerable Run(SessionShell sessionShell, string scriptText) Parameters sessionShell SessionShell The session shell that scripts delegate to. scriptText string The script text to run Returns IEnumerable Enumerable of actions to perform" + "summary": "Class ScriptCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command for executing C# scripts in the milling process. public class ScriptCommand : ITitleCommand, ISessionCommand, IMakeXmlSource, IGetSelectionName Inheritance object ScriptCommand Implements ITitleCommand ISessionCommand IMakeXmlSource IGetSelectionName 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 ScriptCommand() Ctor. public ScriptCommand() ScriptCommand(XElement, string) Ctor. public ScriptCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties ExecutionTemplate Gets the execution template command. public static ScriptCommand ExecutionTemplate { get; } Property Value ScriptCommand OptimizationConfigurationTemplate Gets the optimization configuration template command. public static ScriptCommand OptimizationConfigurationTemplate { get; } Property Value ScriptCommand PreSettingTemplate Gets the pre-setting template command. public static ScriptCommand PreSettingTemplate { get; } Property Value ScriptCommand ScriptText The script text content. public string ScriptText { get; set; } Property Value string ScriptTitle Title or name of the script. public string ScriptTitle { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GenTemplateCommand() Generates a template script command with default values. public static ScriptCommand GenTemplateCommand() Returns ScriptCommand A new ScriptCommand with template values GetCommandTitle() Gets the title of the command. public string GetCommandTitle() Returns string The command title. GetSelectionName() Gets a name that can be used for selection in UI or other contexts. public string GetSelectionName() Returns string The selection name for this 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. Reg(XFactory) Registers this type's deserializer (and its legacy alias) with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed. Run(SessionShell, string) Runs a specified script with the given session shell. public IEnumerable Run(SessionShell sessionShell, string scriptText) Parameters sessionShell SessionShell The session shell that scripts delegate to. scriptText string The script text to run Returns IEnumerable Enumerable of actions to perform" }, "api/Hi.SessionCommands.SimpleSessionCommand.html": { "href": "api/Hi.SessionCommands.SimpleSessionCommand.html", "title": "Class SimpleSessionCommand | HiAPI-C# 2025", - "summary": "Class SimpleSessionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Simple session command for executing machining operations. public class SimpleSessionCommand : ISessionCommand, IMakeXmlSource Inheritance object SimpleSessionCommand Implements ISessionCommand 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 SimpleSessionCommand() Ctor. public SimpleSessionCommand() SimpleSessionCommand(XElement, string, string, IProgress, object[]) Ctor. public SimpleSessionCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Optional progress reporter. res object[] Additional resources Properties EnableCollisionDetection Gets or sets whether collision detection is enabled. public bool EnableCollisionDetection { get; set; } Property Value bool EnableGeomDiff Gets or sets whether to enable geometry difference detection. public bool EnableGeomDiff { get; set; } Property Value bool EnableOptimizeToFiles Gets or sets whether to enable optimization to files. public bool EnableOptimizeToFiles { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure. public bool EnablePauseOnFailure { get; set; } Property Value bool EnableReadRuntimeGeom Gets or sets whether to enable reading runtime geometry. public bool EnableReadRuntimeGeom { get; set; } Property Value bool EnableWriteRuntimeGeom Gets or sets whether to write runtime geometry to file. public bool EnableWriteRuntimeGeom { get; set; } Property Value bool EnableWriteShotFiles Gets or sets whether to write shot files. public bool EnableWriteShotFiles { get; set; } Property Value bool EnableWriteStepFiles Gets or sets whether to write step files. public bool EnableWriteStepFiles { get; set; } Property Value bool GeomDiffDetectRadius_mm Gets or sets the geometry difference detection radius in millimeters. public double GeomDiffDetectRadius_mm { get; set; } Property Value double MachiningMotionResolution Gets or sets the machining motion resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution_mm Gets or sets the machining resolution in millimeters. public double MachiningResolution_mm { get; set; } Property Value double NcCommandList Middle command list. Mainly for NC commands. Because of the design idea is for simplicity, only expect the wrapper content to be NcFileCommand or NcCodeCommand or ScriptCommand. public List NcCommandList { get; set; } Property Value List NcOptOption Gets or sets the NC optimization options. public NcOptOption NcOptOption { get; set; } Property Value NcOptOption OptimizationFileTemplate Gets or sets the optimization file template path. public string OptimizationFileTemplate { get; set; } Property Value string RuntimeGeomFile Gets or sets the runtime geometry file path. public string RuntimeGeomFile { get; set; } Property Value string RuntimeGeomFileTemplate Gets or sets the runtime geometry file template. public string RuntimeGeomFileTemplate { get; set; } Property Value string ShotFileTemplate Gets or sets the shot file template path. public string ShotFileTemplate { get; set; } Property Value string ShotFileTimeResolution_ms Gets or sets the time resolution for shot files in milliseconds. public double ShotFileTimeResolution_ms { get; set; } Property Value double StepFileTemplate Gets or sets the step file template path. public string StepFileTemplate { get; set; } Property Value string XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class SimpleSessionCommand Namespace Hi.SessionCommands Assembly HiNc.dll Simple session command for executing machining operations. public class SimpleSessionCommand : ISessionCommand, IMakeXmlSource Inheritance object SimpleSessionCommand Implements ISessionCommand 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 SimpleSessionCommand() Ctor. public SimpleSessionCommand() SimpleSessionCommand(XElement, string, string, IProgress, object[]) Ctor. public SimpleSessionCommand(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory for relative paths relFile string Relative file path progress IProgress Optional progress reporter. res object[] Additional resources Properties EnableCollisionDetection Gets or sets whether collision detection is enabled. public bool EnableCollisionDetection { get; set; } Property Value bool EnableGeomDiff Gets or sets whether to enable geometry difference detection. public bool EnableGeomDiff { get; set; } Property Value bool EnableOptimizeToFiles Gets or sets whether to enable optimization to files. public bool EnableOptimizeToFiles { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure. public bool EnablePauseOnFailure { get; set; } Property Value bool EnableReadRuntimeGeom Gets or sets whether to enable reading runtime geometry. public bool EnableReadRuntimeGeom { get; set; } Property Value bool EnableWriteRuntimeGeom Gets or sets whether to write runtime geometry to file. public bool EnableWriteRuntimeGeom { get; set; } Property Value bool EnableWriteShotFiles Gets or sets whether to write shot files. public bool EnableWriteShotFiles { get; set; } Property Value bool EnableWriteStepFiles Gets or sets whether to write step files. public bool EnableWriteStepFiles { get; set; } Property Value bool GeomDiffDetectRadius_mm Gets or sets the geometry difference detection radius in millimeters. public double GeomDiffDetectRadius_mm { get; set; } Property Value double MachiningMotionResolution Gets or sets the machining motion resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution_mm Gets or sets the machining resolution in millimeters. public double MachiningResolution_mm { get; set; } Property Value double NcCommandList Middle command list. Mainly for NC commands. Because of the design idea is for simplicity, only expect the wrapper content to be NcFileCommand or NcCodeCommand or ScriptCommand. public List NcCommandList { get; set; } Property Value List NcOptOption Gets or sets the NC optimization options. public NcOptOption NcOptOption { get; set; } Property Value NcOptOption OptimizationFileTemplate Gets or sets the optimization file template path. public string OptimizationFileTemplate { get; set; } Property Value string RuntimeGeomFile Gets or sets the runtime geometry file path. public string RuntimeGeomFile { get; set; } Property Value string RuntimeGeomFileTemplate Gets or sets the runtime geometry file template. public string RuntimeGeomFileTemplate { get; set; } Property Value string ShotFileTemplate Gets or sets the shot file template path. public string ShotFileTemplate { get; set; } Property Value string ShotFileTimeResolution_ms Gets or sets the time resolution for shot files in milliseconds. public double ShotFileTimeResolution_ms { get; set; } Property Value double StepFileTemplate Gets or sets the step file template path. public string StepFileTemplate { get; set; } Property Value string XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null), and chains Reg(factory) on dependents so the registration graph is observable. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html": { "href": "api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html", "title": "Class WriteRuntimeGeomToStlCommand | HiAPI-C# 2025", - "summary": "Class WriteRuntimeGeomToStlCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call Hi.MillingProcs.MachiningProjectCsScriptApi.WriteRuntimeGeomToStl. public class WriteRuntimeGeomToStlCommand : ISessionCommand, IMakeXmlSource Inheritance object WriteRuntimeGeomToStlCommand Implements ISessionCommand 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 WriteRuntimeGeomToStlCommand() Default constructor. public WriteRuntimeGeomToStlCommand() WriteRuntimeGeomToStlCommand(XElement, string) Ctor. public WriteRuntimeGeomToStlCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFile Relative path for the output STL file. public string RelFile { get; set; } Property Value string Resolution_mm Resolution in millimeters for STL generation. public double Resolution_mm { get; set; } Property Value double XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class WriteRuntimeGeomToStlCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call Hi.MillingProcs.MachiningProjectCsScriptApi.WriteRuntimeGeomToStl. public class WriteRuntimeGeomToStlCommand : ISessionCommand, IMakeXmlSource Inheritance object WriteRuntimeGeomToStlCommand Implements ISessionCommand 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 WriteRuntimeGeomToStlCommand() Default constructor. public WriteRuntimeGeomToStlCommand() WriteRuntimeGeomToStlCommand(XElement, string) Ctor. public WriteRuntimeGeomToStlCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFile Relative path for the output STL file. public string RelFile { get; set; } Property Value string Resolution_mm Resolution in millimeters for STL generation. public double Resolution_mm { get; set; } Property Value double XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.WriteShotFilesCommand.html": { "href": "api/Hi.SessionCommands.WriteShotFilesCommand.html", "title": "Class WriteShotFilesCommand | HiAPI-C# 2025", - "summary": "Class WriteShotFilesCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call WriteShotFiles(string, double). public class WriteShotFilesCommand : ISessionCommand, IMakeXmlSource Inheritance object WriteShotFilesCommand Implements ISessionCommand 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 WriteShotFilesCommand() Default constructor. public WriteShotFilesCommand() WriteShotFilesCommand(XElement, string) Ctor. public WriteShotFilesCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFileTemplate Template for the relative file path where shot files will be written. public string RelFileTemplate { get; set; } Property Value string TimeResolution_ms Time resolution in milliseconds for shot data sampling. public double TimeResolution_ms { get; set; } Property Value double XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class WriteShotFilesCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call WriteShotFiles(string, double). public class WriteShotFilesCommand : ISessionCommand, IMakeXmlSource Inheritance object WriteShotFilesCommand Implements ISessionCommand 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 WriteShotFilesCommand() Default constructor. public WriteShotFilesCommand() WriteShotFilesCommand(XElement, string) Ctor. public WriteShotFilesCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFileTemplate Template for the relative file path where shot files will be written. public string RelFileTemplate { get; set; } Property Value string TimeResolution_ms Time resolution in milliseconds for shot data sampling. public double TimeResolution_ms { get; set; } Property Value double XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.WriteStepFilesCommand.html": { "href": "api/Hi.SessionCommands.WriteStepFilesCommand.html", "title": "Class WriteStepFilesCommand | HiAPI-C# 2025", - "summary": "Class WriteStepFilesCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call WriteStepFiles(string). public class WriteStepFilesCommand : ISessionCommand, IMakeXmlSource Inheritance object WriteStepFilesCommand Implements ISessionCommand 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 WriteStepFilesCommand() Default constructor. public WriteStepFilesCommand() WriteStepFilesCommand(XElement, string) Ctor. public WriteStepFilesCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFileTemplate Template for the relative file path where step files will be written. public string RelFileTemplate { get; set; } Property Value string XName Name for XML IO. 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. Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." + "summary": "Class WriteStepFilesCommand Namespace Hi.SessionCommands Assembly HiNc.dll Command to call WriteStepFiles(string). public class WriteStepFilesCommand : ISessionCommand, IMakeXmlSource Inheritance object WriteStepFilesCommand Implements ISessionCommand 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 WriteStepFilesCommand() Default constructor. public WriteStepFilesCommand() WriteStepFilesCommand(XElement, string) Ctor. public WriteStepFilesCommand(XElement src, string baseDirectory) Parameters src XElement XML baseDirectory string Base directory for resolving relative paths Properties RelFileTemplate Template for the relative file path where step files will be written. public string RelFileTemplate { get; set; } Property Value string XName Name for XML IO. 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. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory Run(SessionShell) Runs the command, delegating execution to the provided session shell. public IEnumerable Run(SessionShell sessionShell) Parameters sessionShell SessionShell Session shell that exposes the machining facade to commands. Returns IEnumerable Sequence of actions to be executed." }, "api/Hi.SessionCommands.html": { "href": "api/Hi.SessionCommands.html", @@ -6267,7 +6267,7 @@ "api/HiMachining.Milling.ClMillingDevice.html": { "href": "api/HiMachining.Milling.ClMillingDevice.html", "title": "Class ClMillingDevice | HiAPI-C# 2025", - "summary": "Class ClMillingDevice Namespace HiMachining.Milling Assembly HiMech.dll A milling device driven by CL(Cutter Location). public class ClMillingDevice : IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IMakeXmlSource, IGetAnchorToSolidDictionary Inheritance object ClMillingDevice Implements IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IMakeXmlSource IGetAnchorToSolidDictionary Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) 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 ClMillingDevice() Ctor. public ClMillingDevice() ClMillingDevice(XElement, string) Initializes a new instance from XML. public ClMillingDevice(XElement src, string baseDirectory) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. Properties Cl Gets or sets the current program cutter location in workpiece coordinates. public DVec3d Cl { get; set; } Property Value DVec3d KeyBranch Gets the branch connecting table buckle and tool buckle. public Branch KeyBranch { get; } Property Value Branch KeyTransformer An ITransformer driven by Cl. public DynamicFreeform KeyTransformer { get; set; } Property Value DynamicFreeform MachiningEquipmentGetter Runtime property. For managing CL. public Func MachiningEquipmentGetter { get; set; } Property Value Func MainAsmb Main MainAsmb of this device. public Asmb MainAsmb { get; } Property Value Asmb McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] TableBuckle Table buckle. public Anchor TableBuckle { get; } Property Value Anchor ToolBuckle Tool buckle. public Anchor ToolBuckle { get; } Property Value Anchor XName Name of XML element. public static string XName { get; } Property Value string Methods 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. GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. 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 ClMillingDevice Namespace HiMachining.Milling Assembly HiMech.dll A milling device driven by CL(Cutter Location). public class ClMillingDevice : IMachiningChain, IGetAsmb, IGetAnchor, IGetTopoIndex, IMakeXmlSource, IGetAnchorToSolidDictionary Inheritance object ClMillingDevice Implements IMachiningChain IGetAsmb IGetAnchor IGetTopoIndex IMakeXmlSource IGetAnchorToSolidDictionary Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods MachiningChainUtil.GetMcCodeTransformerDictionary(IMachiningChain) 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 ClMillingDevice() Ctor. public ClMillingDevice() ClMillingDevice(XElement, string) Initializes a new instance from XML. public ClMillingDevice(XElement src, string baseDirectory) Parameters src XElement The XML source element. baseDirectory string The base directory for resolving relative paths. Properties Cl Gets or sets the current program cutter location in workpiece coordinates. public DVec3d Cl { get; set; } Property Value DVec3d KeyBranch Gets the branch connecting table buckle and tool buckle. public Branch KeyBranch { get; } Property Value Branch KeyTransformer An ITransformer driven by Cl. public DynamicFreeform KeyTransformer { get; set; } Property Value DynamicFreeform MachiningEquipmentGetter Runtime property. For managing CL. public Func MachiningEquipmentGetter { get; set; } Property Value Func MainAsmb Main MainAsmb of this device. public Asmb MainAsmb { get; } Property Value Asmb McCodes Gets the machine coordinate code sequence for decoding the MC array. public string[] McCodes { get; } Property Value string[] McTransformers Gets the machine coordinate transformers. public IDynamicRegular[] McTransformers { get; } Property Value IDynamicRegular[] TableBuckle Table buckle. public Anchor TableBuckle { get; } Property Value Anchor ToolBuckle Tool buckle. public Anchor ToolBuckle { get; } Property Value Anchor XName Name of XML element. public static string XName { get; } Property Value string Methods 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. GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetTableBuckle() Gets the table buckle anchor point. public IGetAnchor GetTableBuckle() Returns IGetAnchor The table buckle anchor point. GetToolBuckle() Gets the tool buckle anchor point. public IGetAnchor GetToolBuckle() Returns IGetAnchor The tool buckle anchor point. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory and chains Reg(factory) on dependents. Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/HiMachining.Milling.html": { "href": "api/HiMachining.Milling.html", @@ -6277,7 +6277,7 @@ "api/HiNc.Grpcs.MachiningProjectGrpcServer.html": { "href": "api/HiNc.Grpcs.MachiningProjectGrpcServer.html", "title": "Class MachiningProjectGrpcServer | HiAPI-C# 2025", - "summary": "Class MachiningProjectGrpcServer Namespace HiNc.Grpcs Assembly HiNc.dll Server for exposing machining project functionality via gRPC. public class MachiningProjectGrpcServer : IDisposable, IMakeXmlSource Inheritance object MachiningProjectGrpcServer Implements IDisposable 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 MachiningProjectGrpcServer(LocalProjectService) Initializes a new instance of the MachiningProjectGrpcServer class. public MachiningProjectGrpcServer(LocalProjectService localProjectService) Parameters localProjectService LocalProjectService MachiningProjectGrpcServer(XElement, LocalProjectService) Initializes a new instance of the MachiningProjectGrpcServer class from XML. public MachiningProjectGrpcServer(XElement src, LocalProjectService localProjectService) Parameters src XElement XML source element localProjectService LocalProjectService The local project service. Properties IsServiceRunning Gets whether the service is currently running. public bool IsServiceRunning { get; } Property Value bool ServicePort Gets or sets the port used by the gRPC service. public int ServicePort { get; set; } Property Value int WebApplication Gets the web application instance for the gRPC server. public WebApplication WebApplication { get; } Property Value WebApplication XName Name for XML IO. public static string XName { get; } Property Value string Methods 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 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. StartAsync() Starts the gRPC server asynchronously. public Task StartAsync() Returns Task A task representing the asynchronous operation StopAsync() Stops the gRPC server asynchronously. public Task StopAsync() Returns Task A task representing the asynchronous operation" + "summary": "Class MachiningProjectGrpcServer Namespace HiNc.Grpcs Assembly HiNc.dll Server for exposing machining project functionality via gRPC. public class MachiningProjectGrpcServer : IDisposable, IMakeXmlSource Inheritance object MachiningProjectGrpcServer Implements IDisposable 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 MachiningProjectGrpcServer(LocalProjectService) Initializes a new instance of the MachiningProjectGrpcServer class. public MachiningProjectGrpcServer(LocalProjectService localProjectService) Parameters localProjectService LocalProjectService MachiningProjectGrpcServer(XElement, LocalProjectService) Initializes a new instance of the MachiningProjectGrpcServer class from XML. public MachiningProjectGrpcServer(XElement src, LocalProjectService localProjectService) Parameters src XElement XML source element localProjectService LocalProjectService The local project service. Properties IsServiceRunning Gets whether the service is currently running. public bool IsServiceRunning { get; } Property Value bool ServicePort Gets or sets the port used by the gRPC service. public int ServicePort { get; set; } Property Value int WebApplication Gets the web application instance for the gRPC server. public WebApplication WebApplication { get; } Property Value WebApplication XName Name for XML IO. public static string XName { get; } Property Value string Methods 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 MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer (and its legacy alias) with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory StartAsync() Starts the gRPC server asynchronously. public Task StartAsync() Returns Task A task representing the asynchronous operation StopAsync() Stops the gRPC server asynchronously. public Task StopAsync() Returns Task A task representing the asynchronous operation" }, "api/HiNc.Grpcs.html": { "href": "api/HiNc.Grpcs.html", @@ -6687,7 +6687,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.Generators.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 XFactory is an instance class with a process-wide Default singleton (XFactory.Default). The instance form exists for test isolation and parallel pipelines that need disjoint generator registries; the static Gen / GenByChild / GenByFile entry points always read from Default. Each instance owns its own Generators dictionary (XML element name → generator delegate). Types add themselves via a Reg(factory) call (see below). Explicit Registration via Reg(XFactory factory = null) Every class implementing IMakeXmlSource exposes a public static Reg method: public static void Reg(XFactory factory = null) { factory ??= XFactory.Default; factory.Generators.TryAdd(XName, (xml, baseDirectory, relFile, progress, res) => new MyClass(xml, baseDirectory, relFile, progress)); } Key properties: Explicit. Callers see registration happen — no hidden side effect from accessing a static member or constructing a type. Idempotent. Uses TryAdd, so the same Reg may be invoked any number of times from any number of boot paths. Composable. Custom factory instances are supported via the optional factory parameter; default usage (MyClass.Reg();) populates XFactory.Default. For example, see BallApt: /// /// Registers this type's deserializer with the given /// (or when is /// null). Idempotent. /// public static void Reg(XFactory factory = null) { factory ??= XFactory.Default; factory.Generators.TryAdd(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml)); } Composite types chain Reg(factory) on dependents When a class deserializes child elements via XFactory.Gen / XFactory.GenByChild, its Reg(factory) must chain Reg(factory) on each concrete child type so the whole dependency graph is reachable from a single root call: public static void Reg(XFactory factory = null) { factory ??= XFactory.Default; DependentA.Reg(factory); DependentB.Reg(factory); factory.Generators.TryAdd(XName, (xml, baseDirectory, relFile, progress, res) => new MyComposite(xml, baseDirectory, relFile, progress)); } For polymorphic deserialization (GenByChild), the composite must chain every concrete implementation that may appear in the XML. The largest composite, SoftNcRunner, chains roughly 130 dependents (every dependency, initializer, segmenter, syntax, and semantic the NC pipeline may deserialize). Multi-name registration (legacy aliases) When the XML payload may carry an old element name for backward compatibility, register the current XName first and group legacy aliases under a //legacy aliases comment: public static void Reg(XFactory factory = null) { factory ??= XFactory.Default; XFactory.XGeneratorDelegate gen = (xml, baseDirectory, relFile, progress, res) => new MachiningProject(xml, baseDirectory, progress); factory.Generators.TryAdd(XName, gen); //legacy aliases factory.Generators.TryAdd(\"MachiningCourse\", gen); factory.Generators.TryAdd(\"MillingCourse\", gen); } 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. Boot path An application's entry point (web service Program.cs, WPF App.xaml.cs, test fixture, etc.) must call the appropriate top-level Reg() once at startup, before any project XML is deserialized. For the simulation pipeline this is: LocalProjectService.Reg(); LocalProjectService.Reg() chains MachiningProject.Reg(), which in turn chains every type the simulation pipeline may deserialize. After this single call returns, XFactory.Default.Generators carries the full deserialization graph. 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: Expose public static void Reg(XFactory factory = null); first line is factory ??= XFactory.Default; then factory.Generators.TryAdd(XName, …). Chain dependents: For every concrete type T that the ctor reads via XFactory.Gen / XFactory.GenByChild, add T.Reg(factory); to the chain. For polymorphic GenByChild, chain every implementation that the XML may carry. Idempotent: Use TryAdd, never Add. The same Reg is called from many boot paths. Progress Threading: Pass the IProgress parameter through all nested XFactory calls. See Message Management for the rationale. Legacy Support: Register the canonical XName first, then group aliases under a //legacy aliases comment. Derived class registration: When a derived class needs its own Reg, mark it public new static void Reg(XFactory factory = null) so the C# compiler does not warn about hiding the base method." }, "fundamentals/general-hinc-workflow/index.html": { "href": "fundamentals/general-hinc-workflow/index.html", @@ -6962,7 +6962,7 @@ "release-note/index.html": { "href": "release-note/index.html", "title": "Release Note | HiAPI-C# 2025", - "summary": "Release Note HiNc Packages Version 3.1.171 Rename RuntimeApi → SessionShell (the runtime entry point exposed to scripting); IShellCommand → ISessionCommand and RuntimeController → SessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApi → sessionShell Tri-state milling-physics contract: MachiningStep physics getters converge on a tri-state result, non-null MillingPhysicsBrief on no-cut steps under EnablePhysics; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces) Rename IMachiningStepHost → IMachiningService (drops the ICsScriptApi seam) Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; ForceAccelShot.ReadRows skips blank lines HiNc Packages Version 3.1.167 Introduce SoftNcRunner as a pluggable NC parser/runner replacing the legacy HardNcRunner; opt in via EnableSoftNcRunner. see HardNc → SoftNc Rewrite — Progress Report for the in-flight rewrite scope and remaining work Extend coolant model to CoolantMode Flood/Mist/Off and refactor CoolantHeatCondition / MillingTemperatureUtil for multi-mode coolant Bind session events to MachiningSession lifetime: SessionStepBuilt, SessionStepSelected, SessionSyntaxPieceRan, SessionSourcedActEntry (legacy aliases kept as [Obsolete]); add RegisterWriteSyntaxPieces / RegisterWriteSyntaxPiecesWithActs for syntax-piece debug tracing Add ProjectApiVersion carrier through XFactory deserialization for project-XML version negotiation; resolve Workpiece through a lazy Func getter in WorkpieceService HiNc Packages Version 3.1.162 Refactor message management into three independent categories: Diagnostic (IProgress), UI Notification (MessageBoardUtil), App Log (ILogger); remove MessageUtil class entirely and remove ExceptionUtil.ShowException / ExceptionUtil.OnShown (see Message Management) Thread IProgress through XFactory deserialization chain and MachiningProject loading; remove GenMode enum entirely (see XML IO) Add ActionProgress.FromLogger to bridge IProgress APIs to ILogger Rename ShowIfCatched → CatchExceptions with explicit Action handler; remove RoutineBlocker0 Extract WorkpieceService from Workpiece for runtime geometry operations Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses IsoCoordinateEntryDisplayee with full machining chain anchor instead of table-buckle-only anchor Rename SessionMessageHost → SessionProgress on both SessionProgress and SessionProgress (SessionShell.SessionMessageHost is kept as [Obsolete]) Remove obsolete HiLog logging utility and DynamicMachiningProjectDisplayee0 HiNc Packages Version 3.1.160 Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix) Fix cubetree construction defect when a triangle edge passes through a wire corner Mech Builder: geometry (STL) file picker for anchored transformation now offers Project directory in addition to Resource directory. Rename XML IO utilities: XmlSourceAndFile → FileRefSource, CombineAsSubDirectory → GetResourceDirectory, MakeXmlSourceWithRebaseFile → MakeXmlSourceToFileRef HiNc Packages Version 3.1.158 Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support) Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments Fix step.csv reading crash on null or malformed values Fix XML IO sub-base directory not applied in some project file operations Improve CSV actual time parsing to support DateTime format in addition to TimeSpan (see Workflow: Basic Machining Simulation) Fix CSV title parsing to trim surrounding quotes HiNc Packages Version 3.1.156 Fix G68 coordinate rotation transformation for non-origin rotation centers Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison Fix RTCP on unmatched tool offset Fix blocking issue when time-mapping file not found Fix FlagsText always null after NC parser refactoring HiNc Packages Version 3.1.150 Add cubetree geometry defect scanning (ScanRuntimeGeomInfDefect) and clearing (ClearDefectDisplayee) for detecting and visualizing geometry anomalies in workpieces (see Workflow: Geometry Validation) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; SessionProgress (formerly SessionMessageHost) now implements IProgress, and all messaging methods renamed from Add* to Report* (e.g., AddProgress → ReportProgress) Fix cubetree initialization crash Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in XyzabcSolver Add asynchronous anchor solid preparation on project load for improved startup performance HiNc Packages Version 3.1.144 Enhance Siemens Sinumerik support: Siemens CYCLE800 coordinate transform and reset Siemens MCALL CYCLE81() drilling cycle parsing Siemens TRAORI/TRAFOOF/SUPA flag parsing Fix Siemens TRAFOOF plain rotation coordinate transform issue Fix Siemens coordinate transform for successive file running Fix relief face collision floating-point precision issue Replace MongoDB with SQLite for local step data storage (significant package size reduction) Add machining and motion resolution dynamic adjustment functions HiNc Packages Version 3.1.106 Rename mapping API for clearer naming: ReadCsvByTimeInterpolation → MapSingleByCsvFile (one-to-one mapping) MapByActualTime → MapSeriesByCsvFile (one-to-many mapping) Rename CSV column prefix Spindle to Holder for sensor data mapping Unify CSV column tags to MappingUtil for consistent data mapping Fix ChartRange manipulation to be time-based instead of step-based for more accurate time chart display Tune thread priority for machining parallel processing to improve UI responsiveness during simulation Various code cleanup and improvements HiNc Packages Version 3.1.102 Separate resource files (Resource, wwwroot, Doc) to HiNc-Resource nuget package for smaller package size Add ScaledFeedPerCycle function for scaled feed-per-cycle machining motion resolution Upgrade target framework to .NET 10.0 Various code cleanup and improvements HiNc Packages Version 3.1.100 Refactor project architecture: split runtime functions from MachiningProject to LocalProjectService for better separation of concerns Improve MillingTraining module with separate lead and result parameter templates for more accurate cutting parameter training Separate C++ library for code protection Add UTF-8 file path support for runtime geometry IO operations Improve CsvRunner with enhanced time mapping pattern Various architecture improvements and bug fixes HiNc Packages Version 3.1.91 Add NcOptimizationEmbeddedLogMode to control embedded log detail level (None/SimpleLog/FullLog) (see Embedded Log Comments). Fix bug of NcOptProc duplicated feedrate assignment HiNc Packages Version 3.1.90 Rename optimization log API EnableIndividualStepAdjustmentLog Fix crash from workpiece displaying with specific mechanical topology setting Improve .flatproc.log output to maintain step order during parallel computation Various stability improvements and bug fixes HiNc Packages Version 3.1.86 Re-build NcOptProc with stricter optimization logics Add optimization logging features (see Optimization Logs): .flatproc.log file output for optimization process analysis Embedded log comments in optimized NC file marking source lines with (src) suffix Fix cutting depth and width accuracy by bounding-box method with workpiece surface Fix collision check error during concurrent changing collidable object Various stability improvements and bug fixes HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in SessionShell by unifying SessionProgress usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTime) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision detection (ReliefFaceCollidingSpeed_mmds, IsReliefFaceCollided) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" + "summary": "Release Note HiNc Packages Version 3.1.172 Replace implicit XFactory registration (private static () constructors + _ = X.XName wake-up touches) with explicit public static void Reg(XFactory factory = null) methods across ~270 classes. XFactory becomes an instance class with a process-wide Default singleton; Generators is renamed from Regs and now an instance property; the delegate type is renamed XGeneratorDelegate from GenByXElementDelegate. Composite types chain X.Reg(factory) on dependents in place of the old wake-up touches; multi-name (legacy alias) registrations keep the current XName first and group aliases under a //legacy aliases comment. Entry points (web service, win-desktop, test fixtures) must call Reg once at startup before any project XML is deserialized — registration no longer happens by accident when the type is first touched. See XML IO. HiNc Packages Version 3.1.171 Rename RuntimeApi → SessionShell (the runtime entry point exposed to scripting); IShellCommand → ISessionCommand and RuntimeController → SessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApi → sessionShell Tri-state milling-physics contract: MachiningStep physics getters converge on a tri-state result, non-null MillingPhysicsBrief on no-cut steps under EnablePhysics; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces) Rename IMachiningStepHost → IMachiningService (drops the ICsScriptApi seam) Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; ForceAccelShot.ReadRows skips blank lines HiNc Packages Version 3.1.167 Introduce SoftNcRunner as a pluggable NC parser/runner replacing the legacy HardNcRunner; opt in via EnableSoftNcRunner. see HardNc → SoftNc Rewrite — Progress Report for the in-flight rewrite scope and remaining work Extend coolant model to CoolantMode Flood/Mist/Off and refactor CoolantHeatCondition / MillingTemperatureUtil for multi-mode coolant Bind session events to MachiningSession lifetime: SessionStepBuilt, SessionStepSelected, SessionSyntaxPieceRan, SessionSourcedActEntry (legacy aliases kept as [Obsolete]); add RegisterWriteSyntaxPieces / RegisterWriteSyntaxPiecesWithActs for syntax-piece debug tracing Add ProjectApiVersion carrier through XFactory deserialization for project-XML version negotiation; resolve Workpiece through a lazy Func getter in WorkpieceService HiNc Packages Version 3.1.162 Refactor message management into three independent categories: Diagnostic (IProgress), UI Notification (MessageBoardUtil), App Log (ILogger); remove MessageUtil class entirely and remove ExceptionUtil.ShowException / ExceptionUtil.OnShown (see Message Management) Thread IProgress through XFactory deserialization chain and MachiningProject loading; remove GenMode enum entirely (see XML IO) Add ActionProgress.FromLogger to bridge IProgress APIs to ILogger Rename ShowIfCatched → CatchExceptions with explicit Action handler; remove RoutineBlocker0 Extract WorkpieceService from Workpiece for runtime geometry operations Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses IsoCoordinateEntryDisplayee with full machining chain anchor instead of table-buckle-only anchor Rename SessionMessageHost → SessionProgress on both SessionProgress and SessionProgress (SessionShell.SessionMessageHost is kept as [Obsolete]) Remove obsolete HiLog logging utility and DynamicMachiningProjectDisplayee0 HiNc Packages Version 3.1.160 Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix) Fix cubetree construction defect when a triangle edge passes through a wire corner Mech Builder: geometry (STL) file picker for anchored transformation now offers Project directory in addition to Resource directory. Rename XML IO utilities: XmlSourceAndFile → FileRefSource, CombineAsSubDirectory → GetResourceDirectory, MakeXmlSourceWithRebaseFile → MakeXmlSourceToFileRef HiNc Packages Version 3.1.158 Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support) Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments Fix step.csv reading crash on null or malformed values Fix XML IO sub-base directory not applied in some project file operations Improve CSV actual time parsing to support DateTime format in addition to TimeSpan (see Workflow: Basic Machining Simulation) Fix CSV title parsing to trim surrounding quotes HiNc Packages Version 3.1.156 Fix G68 coordinate rotation transformation for non-origin rotation centers Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison Fix RTCP on unmatched tool offset Fix blocking issue when time-mapping file not found Fix FlagsText always null after NC parser refactoring HiNc Packages Version 3.1.150 Add cubetree geometry defect scanning (ScanRuntimeGeomInfDefect) and clearing (ClearDefectDisplayee) for detecting and visualizing geometry anomalies in workpieces (see Workflow: Geometry Validation) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; SessionProgress (formerly SessionMessageHost) now implements IProgress, and all messaging methods renamed from Add* to Report* (e.g., AddProgress → ReportProgress) Fix cubetree initialization crash Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in XyzabcSolver Add asynchronous anchor solid preparation on project load for improved startup performance HiNc Packages Version 3.1.144 Enhance Siemens Sinumerik support: Siemens CYCLE800 coordinate transform and reset Siemens MCALL CYCLE81() drilling cycle parsing Siemens TRAORI/TRAFOOF/SUPA flag parsing Fix Siemens TRAFOOF plain rotation coordinate transform issue Fix Siemens coordinate transform for successive file running Fix relief face collision floating-point precision issue Replace MongoDB with SQLite for local step data storage (significant package size reduction) Add machining and motion resolution dynamic adjustment functions HiNc Packages Version 3.1.106 Rename mapping API for clearer naming: ReadCsvByTimeInterpolation → MapSingleByCsvFile (one-to-one mapping) MapByActualTime → MapSeriesByCsvFile (one-to-many mapping) Rename CSV column prefix Spindle to Holder for sensor data mapping Unify CSV column tags to MappingUtil for consistent data mapping Fix ChartRange manipulation to be time-based instead of step-based for more accurate time chart display Tune thread priority for machining parallel processing to improve UI responsiveness during simulation Various code cleanup and improvements HiNc Packages Version 3.1.102 Separate resource files (Resource, wwwroot, Doc) to HiNc-Resource nuget package for smaller package size Add ScaledFeedPerCycle function for scaled feed-per-cycle machining motion resolution Upgrade target framework to .NET 10.0 Various code cleanup and improvements HiNc Packages Version 3.1.100 Refactor project architecture: split runtime functions from MachiningProject to LocalProjectService for better separation of concerns Improve MillingTraining module with separate lead and result parameter templates for more accurate cutting parameter training Separate C++ library for code protection Add UTF-8 file path support for runtime geometry IO operations Improve CsvRunner with enhanced time mapping pattern Various architecture improvements and bug fixes HiNc Packages Version 3.1.91 Add NcOptimizationEmbeddedLogMode to control embedded log detail level (None/SimpleLog/FullLog) (see Embedded Log Comments). Fix bug of NcOptProc duplicated feedrate assignment HiNc Packages Version 3.1.90 Rename optimization log API EnableIndividualStepAdjustmentLog Fix crash from workpiece displaying with specific mechanical topology setting Improve .flatproc.log output to maintain step order during parallel computation Various stability improvements and bug fixes HiNc Packages Version 3.1.86 Re-build NcOptProc with stricter optimization logics Add optimization logging features (see Optimization Logs): .flatproc.log file output for optimization process analysis Embedded log comments in optimized NC file marking source lines with (src) suffix Fix cutting depth and width accuracy by bounding-box method with workpiece surface Fix collision check error during concurrent changing collidable object Various stability improvements and bug fixes HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in SessionShell by unifying SessionProgress usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTime) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision detection (ReliefFaceCollidingSpeed_mmds, IsReliefFaceCollided) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" }, "release-note/softnc-rewrite-report.html": { "href": "release-note/softnc-rewrite-report.html", @@ -7052,7 +7052,7 @@ "sample/Sample.MachineTool.DemoBuildMachineTool.html": { "href": "sample/Sample.MachineTool.DemoBuildMachineTool.html", "title": "Class DemoBuildMachineTool | HiAPI-C# 2025", - "summary": "Class DemoBuildMachineTool Namespace Sample.MachineTool Assembly Hi.Sample.dll Provides access to the PMC-B1 machine tool model. public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool Inheritance object DemoBuildMachineTool Implements IGetCodeXyzabcMachineTool Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Source Code using Hi.Common.XmlUtils; using Hi.Geom; using Hi.Mech; using Hi.Mech.Topo; using Hi.NcMech; using Hi.NcMech.Solids; using Hi.NcMech.Xyzabc; using Hi.Numerical.Xyzabc; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; namespace Sample.MachineTool { /// /// Provides access to the PMC-B1 machine tool model. /// /// /// ### Source Code /// [!code-csharp[SampleCode](~/../Hi.Sample/MachineTool/DemoBuildMachineTool.cs)] /// public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool { static DemoBuildMachineTool() { XFactory.Generators.Add(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); } /// /// Generates an XYZ-ABC machine tool instance from embedded resources. /// /// A configured machine tool model. public static CodeXyzabcMachineTool GenXyzabcMachineTool() { CodeXyzabcChain chain = new CodeXyzabcChain(\"[O][Y][X][C][w];[O][Z][B][S][t]\"); if (chain.ToolBuckleTransformer is StaticTranslation st) st.Trans = new Vec3d(-72.40, 72.40, 176.44); chain.TransformerB.Pivot = new Vec3d(-72.4, -177.4, 225.94); Dictionary solidMap = new Dictionary() { [\"O\"] = new Solid(new Stl(\"MachineTool/base.stl\")), [\"X\"] = new Solid(new Stl(\"MachineTool/X.stl\")), [\"Y\"] = new Solid(new Stl(\"MachineTool/Y.stl\")), [\"Z\"] = new Solid(new Stl(\"MachineTool/Z.stl\")), [\"B\"] = new Solid(new Stl(\"MachineTool/B.stl\")), [\"C\"] = new Solid(new Stl(\"MachineTool/C.stl\")), [\"S\"] = new Solid(new Stl(\"MachineTool/spindle.stl\")), }; chain.AnchorToSolid.BuildAnchorToSolid( chain.Asmb.GetDescendantAnchors(), solidMap); CodeXyzabcMachineTool dst = new CodeXyzabcMachineTool(chain); dst.GenerateCollisionIndexPairs(); return dst; } /// /// The cached machine tool instance. /// CodeXyzabcMachineTool MachineTool { get; } /// /// Default constructor that initializes the machine tool model. /// public DemoBuildMachineTool() { MachineTool = GenXyzabcMachineTool(); } #region XML IO //public PmcB1MachineToolSource(XElement src, object res) : this() { } /// /// XML element name for serialization. /// public static string XName = nameof(DemoBuildMachineTool); /// public XElement ToXElement() => new XElement(XName); #endregion /// public CodeXyzabcMachineTool GetXyzabcMachineTool() => MachineTool; /// public IMachiningChain GetMachiningChain() => MachineTool; } } Constructors DemoBuildMachineTool() Default constructor that initializes the machine tool model. public DemoBuildMachineTool() Fields XName XML element name for serialization. public static string XName Field Value string Methods GenXyzabcMachineTool() Generates an XYZ-ABC machine tool instance from embedded resources. public static CodeXyzabcMachineTool GenXyzabcMachineTool() Returns CodeXyzabcMachineTool A configured machine tool model. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetXyzabcMachineTool() Get CodeXyzabcMachineTool. public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool Machine tool. ToXElement() public XElement ToXElement() Returns XElement" + "summary": "Class DemoBuildMachineTool Namespace Sample.MachineTool Assembly Hi.Sample.dll Provides access to the PMC-B1 machine tool model. public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool Inheritance object DemoBuildMachineTool Implements IGetCodeXyzabcMachineTool Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Source Code using Hi.Common.XmlUtils; using Hi.Geom; using Hi.Mech; using Hi.Mech.Topo; using Hi.NcMech; using Hi.NcMech.Solids; using Hi.NcMech.Xyzabc; using Hi.Numerical.Xyzabc; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; namespace Sample.MachineTool { /// /// Provides access to the PMC-B1 machine tool model. /// /// /// ### Source Code /// [!code-csharp[SampleCode](~/../Hi.Sample/MachineTool/DemoBuildMachineTool.cs)] /// public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool { /// /// Registers this type's deserializer with the given /// (or when is /// null). Idempotent. /// public static void Reg(XFactory factory = null) { factory ??= XFactory.Default; factory.Generators.TryAdd(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); } /// /// Generates an XYZ-ABC machine tool instance from embedded resources. /// /// A configured machine tool model. public static CodeXyzabcMachineTool GenXyzabcMachineTool() { CodeXyzabcChain chain = new CodeXyzabcChain(\"[O][Y][X][C][w];[O][Z][B][S][t]\"); if (chain.ToolBuckleTransformer is StaticTranslation st) st.Trans = new Vec3d(-72.40, 72.40, 176.44); chain.TransformerB.Pivot = new Vec3d(-72.4, -177.4, 225.94); Dictionary solidMap = new Dictionary() { [\"O\"] = new Solid(new Stl(\"MachineTool/base.stl\")), [\"X\"] = new Solid(new Stl(\"MachineTool/X.stl\")), [\"Y\"] = new Solid(new Stl(\"MachineTool/Y.stl\")), [\"Z\"] = new Solid(new Stl(\"MachineTool/Z.stl\")), [\"B\"] = new Solid(new Stl(\"MachineTool/B.stl\")), [\"C\"] = new Solid(new Stl(\"MachineTool/C.stl\")), [\"S\"] = new Solid(new Stl(\"MachineTool/spindle.stl\")), }; chain.AnchorToSolid.BuildAnchorToSolid( chain.Asmb.GetDescendantAnchors(), solidMap); CodeXyzabcMachineTool dst = new CodeXyzabcMachineTool(chain); dst.GenerateCollisionIndexPairs(); return dst; } /// /// The cached machine tool instance. /// CodeXyzabcMachineTool MachineTool { get; } /// /// Default constructor that initializes the machine tool model. /// public DemoBuildMachineTool() { MachineTool = GenXyzabcMachineTool(); } #region XML IO //public PmcB1MachineToolSource(XElement src, object res) : this() { } /// /// XML element name for serialization. /// public static string XName = nameof(DemoBuildMachineTool); /// public XElement ToXElement() => new XElement(XName); #endregion /// public CodeXyzabcMachineTool GetXyzabcMachineTool() => MachineTool; /// public IMachiningChain GetMachiningChain() => MachineTool; } } Constructors DemoBuildMachineTool() Default constructor that initializes the machine tool model. public DemoBuildMachineTool() Fields XName XML element name for serialization. public static string XName Field Value string Methods GenXyzabcMachineTool() Generates an XYZ-ABC machine tool instance from embedded resources. public static CodeXyzabcMachineTool GenXyzabcMachineTool() Returns CodeXyzabcMachineTool A configured machine tool model. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetXyzabcMachineTool() Get CodeXyzabcMachineTool. public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool Machine tool. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory ToXElement() public XElement ToXElement() Returns XElement" }, "sample/Sample.MachineTool.DemoBuildMachineToolWithoutGeometrys.html": { "href": "sample/Sample.MachineTool.DemoBuildMachineToolWithoutGeometrys.html", diff --git a/App/wwwroot/HiAPI-docsite/manifest.json b/App/wwwroot/HiAPI-docsite/manifest.json index 823d7736..a5aad312 100644 --- a/App/wwwroot/HiAPI-docsite/manifest.json +++ b/App/wwwroot/HiAPI-docsite/manifest.json @@ -2836,7 +2836,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.Common.XmlUtils.XFactory.XGeneratorDelegate", - "Summary": "

    Delegate for generating objects from XML elements with relative file path.

    \n" + "Summary": "

    Delegate for generating an object from an XML element with relative\nfile path context.

    \n" }, { "type": "ManagedReference", @@ -2864,7 +2864,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.Common.XmlUtils.XFactory", - "Summary": "

    Factory class for generating objects from XML elements using registered generator functions.

    \n" + "Summary": "

    Factory for generating objects from XML elements using registered generator\nfunctions.

    \n" }, { "type": "ManagedReference", @@ -9962,7 +9962,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup", - "Summary": "

    Fanuc-side adapter that exposes a wrapped \n(resolved at call time from the dependency list) as an\n following Fanuc Memory C tool\noffset addressing: #2001+N → effective height of offset N\n(geometry − wear).

    \n

    \nThe underlying stays brand-neutral —\nHeidenhain / Siemens can use the same storage with different addressing\nby registering their own adapter alongside the table. Stateless: holds\nno reference of its own and resolves the table from the per-call\ndependencies list, so XML round-trip is trivial (an empty element).\n

    \n

    \nRegistered on a brand preset's\nVariableEvaluatorSyntax.RuntimeVariableLookups, not on\n — the wrapper owns no\nlong-lived data, only the Fanuc-style id addressing scheme. The\nunderlying still lives in\nNcDependencyList as the data dependency.\n

    \n" + "Summary": "

    Fanuc-side adapter that exposes a wrapped \n(resolved at call time from the dependency list) as an\n following Fanuc Memory C tool\noffset addressing: #2001+N → effective height of offset N\n(geometry − wear).

    \n

    \nThe underlying stays brand-neutral —\nHeidenhain / Siemens can use the same storage with different addressing\nby registering their own adapter alongside the table. Stateless: holds\nno reference of its own and resolves the table from the per-call\ndependencies list, so XML round-trip is trivial (an empty element).\n

    \n

    \nRegistered on a brand preset's\n, not on\n — the wrapper owns no\nlong-lived data, only the Fanuc-style id addressing scheme. The\nunderlying still lives in\nNcDependencyList as the data dependency.\n

    \n" }, { "type": "ManagedReference", @@ -10760,7 +10760,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax", - "Summary": "

    Resolves Fanuc Custom Macro B GOTO control flow.\nTriggered by Parsing.FanucGoto (written by\n); decides whether\nto fire, and on fire calls\n on layers[0] with\nthe re-segmented file content starting at the matching N{target}\nlabel. The host block stays materialised (so cache dumps still see the\nGOTO call site); execution naturally continues from the new source\nonce the pipeline pulls the next block.

    \n

    \nBoth unconditional GOTO <n> and conditional\nIF [<expr>] GOTO <n> are implemented. The conditional\nform leans on 's pass-2 tree walk\nto substitute Parsing.FanucGoto.Condition with a numeric\n when the expression\nevaluates successfully — then reads the\nnode polymorphically. Truthy non-zero fires the redirect; zero falls\nthrough silently; a still-string (unresolved) Condition emits\nFanucGoto--ConditionNotEvaluated and falls through.\n

    \n

    \nPipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation\nbundle. Must run after so any\n#<var> in the target N (e.g. GOTO #1) has been\nsubstituted to a literal in Parsing.FanucGoto.N. Reader syntaxes\n( etc.) are independent —\nthey touch Parsing.Assignments, not Parsing.FanucGoto.\n

    \n

    \nLabel scanning uses two hosted helper syntaxes —\nCommentSyntax and IndexSyntax — applied to\neach candidate block in turn so the predicate\nIndexNote.Number == target matches the same way the Parsing\nbundle would. Both are XML-IO-able so API customers can swap them\n(e.g. for a controller variant using ;-style comments or a\ndifferent head symbol). Defaults match Fanuc: \nand with the \"N\" symbol.\n

    \n" + "Summary": "

    Resolves Fanuc Custom Macro B GOTO control flow.\nTriggered by Parsing.FanucGoto (written by\n); decides whether\nto fire, and on fire calls\n on layers[0] with\nthe re-segmented file content starting at the matching N{target}\nlabel. The host block stays materialised (so cache dumps still see the\nGOTO call site); execution naturally continues from the new source\nonce the pipeline pulls the next block.

    \n

    \nBoth unconditional GOTO <n> and conditional\nIF [<expr>] GOTO <n> are implemented. The conditional\nform leans on 's pass-2 tree walk\nto substitute Parsing.FanucGoto.Condition with a numeric\n when the expression\nevaluates successfully — then reads the\nnode polymorphically. Truthy non-zero fires the redirect; zero falls\nthrough silently; a still-string (unresolved) Condition emits\nFanucGoto--ConditionNotEvaluated and falls through.\n

    \n

    \nPipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation\nbundle. Must run after so any\n#<var> in the target N (e.g. GOTO #1) has been\nsubstituted to a literal in Parsing.FanucGoto.N. Reader syntaxes\n( etc.) are independent —\nthey touch Parsing.Assignments, not Parsing.FanucGoto.\n

    \n

    \nLabel scanning uses two hosted helper syntaxes —\nCommentSyntax and IndexSyntax — applied to\neach candidate block in turn so the predicate\nIndexNote.Number == target matches the same way the Parsing\nbundle would. Both are XML-IO-able so API customers can swap them\n(e.g. for a controller variant using ;-style comments or a\ndifferent head symbol). Defaults match Fanuc: \nand with the \"N\" symbol.\n

    \n" }, { "type": "ManagedReference", @@ -10816,7 +10816,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax", - "Summary": "

    Inlines a Fanuc Custom Macro B one-shot call (G65 P_ L_ [letter\nvalue …]) into the source layer and binds the call-line argument\nletters to Vars.Local #1-#26 per the Type-I map (see\n). Every inlined block carries the\nbinding dict, a clone of the diagnostic\nrecord, and a id stamp — so\nLocalVariableLookup resolves arg references in a\nsingle-block lookup, a cache dump landing on any block immediately\nshows which call it belongs to, and downstream\n carries body-internal\n#1-#33 writes forward only within the same frame. The host\nblock itself records but stays in the\ncaller's frame (no stamp) and emits no\nmotion act; after the macro body's last inlined block the pipeline\ncontinues naturally into the caller's next block (the inlined pieces\nsit ahead of the host block's successor in layers[0]).

    \n

    \nFrame isolation works on two layers. Statically, caller blocks\nhave no stamp (frame id 0 by\n), so the inlined frame ids (allocated\nfresh per L-repetition) never collide with main. Dynamically,\nLocalVariableLookup and\n compare frame ids\nbefore carrying any Vars.Local entry across a block boundary\n— a macro body's body-internal writes therefore stay inside the\nmacro and never leak back into the caller's frame.\n

    \n

    \nFilename lookup mirrors :\nO{P:D4}.NC, O{P}.NC, O{P:D4}, O{P},\n{P:D4}.NC, {P}.NC — first match wins. The lookup root\nis (G65 has no\n\"external storage\" variant; M198's external root is M98/M198-only).\n

    \n

    \nL > 1 inlines the same macro L times in series. Each\nrepetition is a fresh segmentation pass (so each block gets its own\n JSON object — the downstream pipeline\nmutates JSON in place and would clobber sibling repetitions if\ninstances were shared) and gets a fresh FileIndex (so\n(FileIndex, LineIndex) pairs stay unique across the\nL-copies of the same source lines).\n

    \n

    \nPipeline placement: ahead of inside\nthe Fanuc Evaluation \nso a hypothetical G65 P_ + M98 P_ on the same block\nexpands the G65 macro first (would be an unusual but legal\ncomposition). Detection is on the Parsing.G65 sub-object\nwritten by \n(a ) — the\nkeyword \"G65\" never reaches Parsing.Flags because the\nparameterized match has already consumed the text by the time\n runs.\n

    \n" + "Summary": "

    Inlines a Fanuc Custom Macro B one-shot call (G65 P_ L_ [letter\nvalue …]) into the source layer and binds the call-line argument\nletters to Vars.Local #1-#26 per the Type-I map (see\n). Every inlined block carries the\nbinding dict, a clone of the diagnostic\nrecord, and a id stamp — so\n resolves arg references in a\nsingle-block lookup, a cache dump landing on any block immediately\nshows which call it belongs to, and downstream\n carries body-internal\n#1-#33 writes forward only within the same frame. The host\nblock itself records but stays in the\ncaller's frame (no stamp) and emits no\nmotion act; after the macro body's last inlined block the pipeline\ncontinues naturally into the caller's next block (the inlined pieces\nsit ahead of the host block's successor in layers[0]).

    \n

    \nFrame isolation works on two layers. Statically, caller blocks\nhave no stamp (frame id 0 by\n), so the inlined frame ids (allocated\nfresh per L-repetition) never collide with main. Dynamically,\n and\n compare frame ids\nbefore carrying any Vars.Local entry across a block boundary\n— a macro body's body-internal writes therefore stay inside the\nmacro and never leak back into the caller's frame.\n

    \n

    \nFilename lookup mirrors :\nO{P:D4}.NC, O{P}.NC, O{P:D4}, O{P},\n{P:D4}.NC, {P}.NC — first match wins. The lookup root\nis (G65 has no\n\"external storage\" variant; M198's external root is M98/M198-only).\n

    \n

    \nL > 1 inlines the same macro L times in series. Each\nrepetition is a fresh segmentation pass (so each block gets its own\n JSON object — the downstream pipeline\nmutates JSON in place and would clobber sibling repetitions if\ninstances were shared) and gets a fresh FileIndex (so\n(FileIndex, LineIndex) pairs stay unique across the\nL-copies of the same source lines).\n

    \n

    \nPipeline placement: ahead of inside\nthe Fanuc Evaluation \nso a hypothetical G65 P_ + M98 P_ on the same block\nexpands the G65 macro first (would be an unusual but legal\ncomposition). Detection is on the Parsing.G65 sub-object\nwritten by \n(a ) — the\nkeyword \"G65\" never reaches Parsing.Flags because the\nparameterized match has already consumed the text by the time\n runs.\n

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

    Shared “re-segment a file and skip pieces until a label matches”\nscan, used by both\n (unconditional GOTO redirect)\nand (M99 P{seq} jump\ninto the caller file). Reads the file via\n, segments through the\nprovided , runs the\nprobeSyntaxes on each candidate block to\nextract IndexNote.Number, and returns the slice from the\nfirst matching block to EOF.

    \n

    \nReturns null when no block matches — the caller's\nresponsibility to surface the appropriate diagnostic. The probes\nare idempotent because the downstream Parsing bundle re-runs the\nsame syntaxes on the yielded pieces with no-op effect (the regex\npatterns no longer match once the N-prefix is consumed and the\nparenthesised comment stripped).\n

    \n" + "Summary": "

    Shared “re-segment a file and skip pieces until a label matches”\nscan, used by both\n (unconditional GOTO redirect)\nand (M99 P{seq} jump\ninto the caller file). Reads the file via\n, segments through the\nprovided , runs the\ncaller-supplied probe syntaxes on each candidate block to\nextract IndexNote.Number, and returns the slice from the\nfirst matching block to EOF.

    \n

    \nReturns null when no block matches — the caller's\nresponsibility to surface the appropriate diagnostic. The probes\nare idempotent because the downstream Parsing bundle re-runs the\nsame syntaxes on the yielded pieces with no-op effect (the regex\npatterns no longer match once the N-prefix is consumed and the\nparenthesised comment stripped).\n

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

    Fanuc Custom Macro B GOTO record. Stamped on the host block by\n after the control-flow\ndecision has been made; produced earlier by\n as a parsing-stage\nsub-section (Parsing.FanucGoto) carrying the raw captured fields.

    \n

    \nTwo source forms map to the same shape:\n

    • GOTO <n> — unconditional jump. is null.
    • IF [<bool-expr>] GOTO <n> — conditional jump.\n holds the expression text from inside the\n brackets.
    \n\n

    \nAt parsing time is a raw token from the source — it may\nbe a literal (\"100\"), a variable reference (\"#1\"), or a\nbracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax\nsubstitutes a resolved literal back into the same field in the\nEvaluation bundle; then\nint.TryParses the final string to produce an int target.\n

    \n" + "Summary": "

    Fanuc Custom Macro B GOTO record. Stamped on the host block by\n after the control-flow\ndecision has been made; produced earlier by\n as a parsing-stage\nsub-section (Parsing.FanucGoto) carrying the raw captured fields.

    \n

    \nTwo source forms map to the same shape:\n

    • GOTO <n> — unconditional jump. is null.
    • IF [<bool-expr>] GOTO <n> — conditional jump.\n holds the expression text from inside the\n brackets.
    \n\n

    \nAt parsing time is a raw token from the source — it may\nbe a literal (\"100\"), a variable reference (\"#1\"), or a\nbracketed expression (\"#[#2+5]\"). \nsubstitutes a resolved literal back into the same field in the\nEvaluation bundle; then\nint.TryParses the final string to produce an int target.\n

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

    Fanuc Custom Macro B IF [<cond>] THEN <body>\nsingle-block conditional record. Stamped on the host block by\n after the gate\ndecision; produced earlier by\n as a parsing-stage\nsub-section (Parsing.FanucIfThen) carrying the raw captured fields\nplus an internal PendingAssignments sub-object harvested from the\nbody text.

    \n

    \nSpec: IF [bool-expr] THEN <stmt> executes <stmt>\nonly when the condition is truthy. Unlike 's\nconditional form there is no jump — the body affects the current block\nonly, no source splice, no label scan, no iteration watchdog. The most\ncommon body shape is a single Custom Macro B assignment\n(#nnn = <expr>); multiple assignments in one body are also\naccepted and lifted together.\n

    \n

    \n is held as a string at parsing time so\nVariableEvaluatorSyntax's pass-2 tree walk can substitute\nit to a numeric in place;\nthe FanucIfThenSyntax tail then reads the resolved node polymorphically\nvia the same ReadCondition shape used by\n.\n

    \n" + "Summary": "

    Fanuc Custom Macro B IF [<cond>] THEN <body>\nsingle-block conditional record. Stamped on the host block by\n after the gate\ndecision; produced earlier by\n as a parsing-stage\nsub-section (Parsing.FanucIfThen) carrying the raw captured fields\nplus an internal PendingAssignments sub-object harvested from the\nbody text.

    \n

    \nSpec: IF [bool-expr] THEN <stmt> executes <stmt>\nonly when the condition is truthy. Unlike 's\nconditional form there is no jump — the body affects the current block\nonly, no source splice, no label scan, no iteration watchdog. The most\ncommon body shape is a single Custom Macro B assignment\n(#nnn = <expr>); multiple assignments in one body are also\naccepted and lifted together.\n

    \n

    \n is held as a string at parsing time so\n's pass-2 tree walk can substitute\nit to a numeric in place;\nthe FanucIfThenSyntax tail then reads the resolved node polymorphically\nvia the same ReadCondition shape used by\n.\n

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

    One-shot custom-macro-call record written by\n. Lives on both the\nG65 host block (the caller) and every inlined block of the\nmacro body — so a cache-dump reader can land on any block inside the\nmacro and immediately see “this block belongs to a G65 call of\nFile with these argument bindings” without back-walking\nto find the host.

    \n

    \nEach inlined block additionally carries the resolved\nVars.Local #1-#26 bindings derived from \n(see ), so\n\nresolves macro args in a single-block lookup. Frame isolation is\nstructural: caller blocks never have Vars.Local written, so\nafter the macro body ends, the next caller block reads null\nfor any #1-#26 without any explicit frame marker.\n

    \n" + "Summary": "

    One-shot custom-macro-call record written by\n. Lives on both the\nG65 host block (the caller) and every inlined block of the\nmacro body — so a cache-dump reader can land on any block inside the\nmacro and immediately see “this block belongs to a G65 call of\n with these argument bindings” without back-walking\nto find the host.

    \n

    \nEach inlined block additionally carries the resolved\nVars.Local #1-#26 bindings derived from \n(see ), so\n\nresolves macro args in a single-block lookup. Frame isolation is\nstructural: caller blocks never have Vars.Local written, so\nafter the macro body ends, the next caller block reads null\nfor any #1-#26 without any explicit frame marker.\n

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

    Top-level integer marker stamped onto a SyntaxPiece's JSON\nto identify which call frame the block belongs to. Brand-agnostic by\ndesign — written by \ntoday, reusable by any future call-inlining syntax (Fanuc G66\nmodal expansion, Heidenhain LBL CALL, …) that needs\nlocal-variable isolation across call boundaries.

    \n

    \nSemantics: the value is an opaque id; only equality matters. Two\nblocks with the same id share a call frame\n(locals visible across them via single-step carry); two blocks with\ndifferent ids do not. The id 0 is reserved for the main\nprogram frame and is returned by when the field is\nabsent — so a plain caller block needs no stamp and yet compares\ndistinct from any inlined frame.\n

    \n

    \nStored as a top-level JSON int (not an object section) so it stays\nlightweight on every inlined block. Decoupled from\n: that section is a diagnostic record of\nthe call (what file, what args), while MacroFrame is the\npurely functional marker the local-variable I/O syntaxes consult.\n

    \n" + "Summary": "

    Top-level integer marker stamped onto a 's JSON\nto identify which call frame the block belongs to. Brand-agnostic by\ndesign — written by \ntoday, reusable by any future call-inlining syntax (Fanuc G66\nmodal expansion, Heidenhain LBL CALL, …) that needs\nlocal-variable isolation across call boundaries.

    \n

    \nSemantics: the value is an opaque id; only equality matters. Two\nblocks with the same id share a call frame\n(locals visible across them via single-step carry); two blocks with\ndifferent ids do not. The id 0 is reserved for the main\nprogram frame and is returned by when the field is\nabsent — so a plain caller block needs no stamp and yet compares\ndistinct from any inlined frame.\n

    \n

    \nStored as a top-level JSON int (not an object section) so it stays\nlightweight on every inlined block. Decoupled from\n: that section is a diagnostic record of\nthe call (what file, what args), while MacroFrame is the\npurely functional marker the local-variable I/O syntaxes consult.\n

    \n" }, { "type": "ManagedReference", @@ -12776,7 +12776,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax", - "Summary": null + "Summary": "

    G28 reference point return syntax. Behaviour is documented in detail\non the example attached to ; this class\nis the implementation that the\n property configures.

    \n" }, { "type": "ManagedReference", diff --git a/App/wwwroot/HiAPI-docsite/release-note/index.html b/App/wwwroot/HiAPI-docsite/release-note/index.html index b20c3128..b501b0b9 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/index.html +++ b/App/wwwroot/HiAPI-docsite/release-note/index.html @@ -87,6 +87,10 @@

    Release Note

    +

    HiNc Packages Version 3.1.172

    +
      +
    • Replace implicit XFactory registration (private static <ClassName>() constructors + _ = X.XName wake-up touches) with explicit public static void Reg(XFactory factory = null) methods across ~270 classes. XFactory becomes an instance class with a process-wide Default singleton; Generators is renamed from Regs and now an instance property; the delegate type is renamed XGeneratorDelegate from GenByXElementDelegate. Composite types chain X.Reg(factory) on dependents in place of the old wake-up touches; multi-name (legacy alias) registrations keep the current XName first and group aliases under a //legacy aliases comment. Entry points (web service, win-desktop, test fixtures) must call Reg once at startup before any project XML is deserialized — registration no longer happens by accident when the type is first touched. See XML IO.
    • +

    HiNc Packages Version 3.1.171

    • Rename RuntimeApiSessionShell (the runtime entry point exposed to scripting); IShellCommandISessionCommand and RuntimeControllerSessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApisessionShell
    • diff --git a/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html b/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html index d56fb06d..0fdef668 100644 --- a/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html +++ b/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html @@ -180,9 +180,15 @@ namespace Sample.MachineTool /// </remarks> public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool { - static DemoBuildMachineTool() + /// <summary> + /// Registers this type's deserializer with the given <see cref="XFactory"/> + /// (or <see cref="XFactory.Default"/> when <paramref name="factory"/> is + /// <c>null</c>). Idempotent. + /// </summary> + public static void Reg(XFactory factory = null) { - XFactory.Generators.Add(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); + factory ??= XFactory.Default; + factory.Generators.TryAdd(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); } /// <summary> /// Generates an XYZ-ABC machine tool instance from embedded resources. @@ -409,6 +415,40 @@ namespace Sample.MachineTool + + +

      + Reg(XFactory) + +

      + +

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

      +
      +
      + +
      +
      public static void Reg(XFactory factory = null)
      +
      + +

      Parameters

      +
      +
      factory XFactory
      +
      +
      + + + + + + + + + + + +

      diff --git a/App/wwwroot/HiAPI-docsite/xrefmap.yml b/App/wwwroot/HiAPI-docsite/xrefmap.yml index 1e0000a6..20a62e70 100644 --- a/App/wwwroot/HiAPI-docsite/xrefmap.yml +++ b/App/wwwroot/HiAPI-docsite/xrefmap.yml @@ -1269,6 +1269,19 @@ references: isSpec: "True" fullName: Hi.Cbtr.CubeTreeFile.MakeXmlSource nameWithType: CubeTreeFile.MakeXmlSource +- uid: Hi.Cbtr.CubeTreeFile.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Cbtr.CubeTreeFile.html#Hi_Cbtr_CubeTreeFile_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Cbtr.CubeTreeFile.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Cbtr.CubeTreeFile.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CubeTreeFile.Reg(XFactory) +- uid: Hi.Cbtr.CubeTreeFile.Reg* + name: Reg + href: api/Hi.Cbtr.CubeTreeFile.html#Hi_Cbtr_CubeTreeFile_Reg_ + commentId: Overload:Hi.Cbtr.CubeTreeFile.Reg + isSpec: "True" + fullName: Hi.Cbtr.CubeTreeFile.Reg + nameWithType: CubeTreeFile.Reg - uid: Hi.Cbtr.CubeTreeFile.SourceFile name: SourceFile href: api/Hi.Cbtr.CubeTreeFile.html#Hi_Cbtr_CubeTreeFile_SourceFile @@ -2625,6 +2638,19 @@ references: isSpec: "True" fullName: Hi.Collision.AnchoredCollidablePair.Name nameWithType: AnchoredCollidablePair.Name +- uid: Hi.Collision.AnchoredCollidablePair.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Collision.AnchoredCollidablePair.html#Hi_Collision_AnchoredCollidablePair_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Collision.AnchoredCollidablePair.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Collision.AnchoredCollidablePair.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: AnchoredCollidablePair.Reg(XFactory) +- uid: Hi.Collision.AnchoredCollidablePair.Reg* + name: Reg + href: api/Hi.Collision.AnchoredCollidablePair.html#Hi_Collision_AnchoredCollidablePair_Reg_ + commentId: Overload:Hi.Collision.AnchoredCollidablePair.Reg + isSpec: "True" + fullName: Hi.Collision.AnchoredCollidablePair.Reg + nameWithType: AnchoredCollidablePair.Reg - uid: Hi.Collision.AnchoredCollidablePair.SafeDistance name: SafeDistance href: api/Hi.Collision.AnchoredCollidablePair.html#Hi_Collision_AnchoredCollidablePair_SafeDistance @@ -2910,6 +2936,19 @@ references: isSpec: "True" fullName: Hi.Collision.CollisionIndexPair.MatAB nameWithType: CollisionIndexPair.MatAB +- uid: Hi.Collision.CollisionIndexPair.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Collision.CollisionIndexPair.html#Hi_Collision_CollisionIndexPair_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Collision.CollisionIndexPair.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Collision.CollisionIndexPair.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CollisionIndexPair.Reg(XFactory) +- uid: Hi.Collision.CollisionIndexPair.Reg* + name: Reg + href: api/Hi.Collision.CollisionIndexPair.html#Hi_Collision_CollisionIndexPair_Reg_ + commentId: Overload:Hi.Collision.CollisionIndexPair.Reg + isSpec: "True" + fullName: Hi.Collision.CollisionIndexPair.Reg + nameWithType: CollisionIndexPair.Reg - uid: Hi.Collision.CollisionIndexPair.SafeDistance name: SafeDistance href: api/Hi.Collision.CollisionIndexPair.html#Hi_Collision_CollisionIndexPair_SafeDistance @@ -4164,6 +4203,19 @@ references: isSpec: "True" fullName: Hi.Coloring.DictionaryColorGuide.RefreshSelectedColorGuide nameWithType: DictionaryColorGuide.RefreshSelectedColorGuide +- uid: Hi.Coloring.DictionaryColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.DictionaryColorGuide.html#Hi_Coloring_DictionaryColorGuide_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.DictionaryColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.DictionaryColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DictionaryColorGuide.Reg(XFactory) +- uid: Hi.Coloring.DictionaryColorGuide.Reg* + name: Reg + href: api/Hi.Coloring.DictionaryColorGuide.html#Hi_Coloring_DictionaryColorGuide_Reg_ + commentId: Overload:Hi.Coloring.DictionaryColorGuide.Reg + isSpec: "True" + fullName: Hi.Coloring.DictionaryColorGuide.Reg + nameWithType: DictionaryColorGuide.Reg - uid: Hi.Coloring.DictionaryColorGuide.SelectedColorGuide name: SelectedColorGuide href: api/Hi.Coloring.DictionaryColorGuide.html#Hi_Coloring_DictionaryColorGuide_SelectedColorGuide @@ -4320,6 +4372,19 @@ references: isSpec: "True" fullName: Hi.Coloring.DiscreteQuantityColorGuide.QuantityKey nameWithType: DiscreteQuantityColorGuide.QuantityKey +- uid: Hi.Coloring.DiscreteQuantityColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.DiscreteQuantityColorGuide.html#Hi_Coloring_DiscreteQuantityColorGuide_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.DiscreteQuantityColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.DiscreteQuantityColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DiscreteQuantityColorGuide.Reg(XFactory) +- uid: Hi.Coloring.DiscreteQuantityColorGuide.Reg* + name: Reg + href: api/Hi.Coloring.DiscreteQuantityColorGuide.html#Hi_Coloring_DiscreteQuantityColorGuide_Reg_ + commentId: Overload:Hi.Coloring.DiscreteQuantityColorGuide.Reg + isSpec: "True" + fullName: Hi.Coloring.DiscreteQuantityColorGuide.Reg + nameWithType: DiscreteQuantityColorGuide.Reg - uid: Hi.Coloring.DiscreteQuantityColorGuide.XName name: XName href: api/Hi.Coloring.DiscreteQuantityColorGuide.html#Hi_Coloring_DiscreteQuantityColorGuide_XName @@ -4454,6 +4519,19 @@ references: isSpec: "True" fullName: Hi.Coloring.FilteredColorGuide.MakeXmlSource nameWithType: FilteredColorGuide.MakeXmlSource +- uid: Hi.Coloring.FilteredColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.FilteredColorGuide.html#Hi_Coloring_FilteredColorGuide_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.FilteredColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.FilteredColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FilteredColorGuide.Reg(XFactory) +- uid: Hi.Coloring.FilteredColorGuide.Reg* + name: Reg + href: api/Hi.Coloring.FilteredColorGuide.html#Hi_Coloring_FilteredColorGuide_Reg_ + commentId: Overload:Hi.Coloring.FilteredColorGuide.Reg + isSpec: "True" + fullName: Hi.Coloring.FilteredColorGuide.Reg + nameWithType: FilteredColorGuide.Reg - uid: Hi.Coloring.FilteredColorGuide.XName name: XName href: api/Hi.Coloring.FilteredColorGuide.html#Hi_Coloring_FilteredColorGuide_XName @@ -4601,6 +4679,19 @@ references: isSpec: "True" fullName: Hi.Coloring.FuncRangeColorGuide.RangeColorRule nameWithType: FuncRangeColorGuide.RangeColorRule +- uid: Hi.Coloring.FuncRangeColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.FuncRangeColorGuide.html#Hi_Coloring_FuncRangeColorGuide_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.FuncRangeColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.FuncRangeColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FuncRangeColorGuide.Reg(XFactory) +- uid: Hi.Coloring.FuncRangeColorGuide.Reg* + name: Reg + href: api/Hi.Coloring.FuncRangeColorGuide.html#Hi_Coloring_FuncRangeColorGuide_Reg_ + commentId: Overload:Hi.Coloring.FuncRangeColorGuide.Reg + isSpec: "True" + fullName: Hi.Coloring.FuncRangeColorGuide.Reg + nameWithType: FuncRangeColorGuide.Reg - uid: Hi.Coloring.FuncRangeColorGuide.XName name: XName href: api/Hi.Coloring.FuncRangeColorGuide.html#Hi_Coloring_FuncRangeColorGuide_XName @@ -4845,6 +4936,19 @@ references: isSpec: "True" fullName: Hi.Coloring.PlainColorGuide.MakeXmlSource nameWithType: PlainColorGuide.MakeXmlSource +- uid: Hi.Coloring.PlainColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.PlainColorGuide.html#Hi_Coloring_PlainColorGuide_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.PlainColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.PlainColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PlainColorGuide.Reg(XFactory) +- uid: Hi.Coloring.PlainColorGuide.Reg* + name: Reg + href: api/Hi.Coloring.PlainColorGuide.html#Hi_Coloring_PlainColorGuide_Reg_ + commentId: Overload:Hi.Coloring.PlainColorGuide.Reg + isSpec: "True" + fullName: Hi.Coloring.PlainColorGuide.Reg + nameWithType: PlainColorGuide.Reg - uid: Hi.Coloring.PlainColorGuide.Rgb name: Rgb href: api/Hi.Coloring.PlainColorGuide.html#Hi_Coloring_PlainColorGuide_Rgb @@ -5014,6 +5118,19 @@ references: isSpec: "True" fullName: Hi.Coloring.QuantityColorGuide.RangeColorRule nameWithType: QuantityColorGuide.RangeColorRule +- uid: Hi.Coloring.QuantityColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.QuantityColorGuide.html#Hi_Coloring_QuantityColorGuide_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.QuantityColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.QuantityColorGuide.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: QuantityColorGuide.Reg(XFactory) +- uid: Hi.Coloring.QuantityColorGuide.Reg* + name: Reg + href: api/Hi.Coloring.QuantityColorGuide.html#Hi_Coloring_QuantityColorGuide_Reg_ + commentId: Overload:Hi.Coloring.QuantityColorGuide.Reg + isSpec: "True" + fullName: Hi.Coloring.QuantityColorGuide.Reg + nameWithType: QuantityColorGuide.Reg - uid: Hi.Coloring.QuantityColorGuide.XName name: XName href: api/Hi.Coloring.QuantityColorGuide.html#Hi_Coloring_QuantityColorGuide_XName @@ -5147,6 +5264,19 @@ references: commentId: F:Hi.Coloring.RangeColorRule.RatioRgbFuncEnum fullName: Hi.Coloring.RangeColorRule.RatioRgbFuncEnum nameWithType: RangeColorRule.RatioRgbFuncEnum +- uid: Hi.Coloring.RangeColorRule.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.RangeColorRule.html#Hi_Coloring_RangeColorRule_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.RangeColorRule.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.RangeColorRule.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RangeColorRule.Reg(XFactory) +- uid: Hi.Coloring.RangeColorRule.Reg* + name: Reg + href: api/Hi.Coloring.RangeColorRule.html#Hi_Coloring_RangeColorRule_Reg_ + commentId: Overload:Hi.Coloring.RangeColorRule.Reg + isSpec: "True" + fullName: Hi.Coloring.RangeColorRule.Reg + nameWithType: RangeColorRule.Reg - uid: Hi.Coloring.RangeColorRule.XName name: XName href: api/Hi.Coloring.RangeColorRule.html#Hi_Coloring_RangeColorRule_XName @@ -5256,6 +5386,19 @@ references: isSpec: "True" fullName: Hi.Coloring.RgbSeed.MakeXmlSource nameWithType: RgbSeed.MakeXmlSource +- uid: Hi.Coloring.RgbSeed.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Coloring.RgbSeed.html#Hi_Coloring_RgbSeed_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Coloring.RgbSeed.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Coloring.RgbSeed.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RgbSeed.Reg(XFactory) +- uid: Hi.Coloring.RgbSeed.Reg* + name: Reg + href: api/Hi.Coloring.RgbSeed.html#Hi_Coloring_RgbSeed_Reg_ + commentId: Overload:Hi.Coloring.RgbSeed.Reg + isSpec: "True" + fullName: Hi.Coloring.RgbSeed.Reg + nameWithType: RgbSeed.Reg - uid: Hi.Coloring.RgbSeed.Rgb name: Rgb href: api/Hi.Coloring.RgbSeed.html#Hi_Coloring_RgbSeed_Rgb @@ -5538,6 +5681,19 @@ references: isSpec: "True" fullName: Hi.Common.BlockingTimer.Period nameWithType: BlockingTimer.Period +- uid: Hi.Common.BlockingTimer.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Common.BlockingTimer.html#Hi_Common_BlockingTimer_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Common.BlockingTimer.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Common.BlockingTimer.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BlockingTimer.Reg(XFactory) +- uid: Hi.Common.BlockingTimer.Reg* + name: Reg + href: api/Hi.Common.BlockingTimer.html#Hi_Common_BlockingTimer_Reg_ + commentId: Overload:Hi.Common.BlockingTimer.Reg + isSpec: "True" + fullName: Hi.Common.BlockingTimer.Reg + nameWithType: BlockingTimer.Reg - uid: Hi.Common.BlockingTimer.Start name: Start() href: api/Hi.Common.BlockingTimer.html#Hi_Common_BlockingTimer_Start @@ -11245,6 +11401,19 @@ references: isSpec: "True" fullName: Hi.Common.IndexSegment.MakeXmlSource nameWithType: IndexSegment.MakeXmlSource +- uid: Hi.Common.IndexSegment.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Common.IndexSegment.html#Hi_Common_IndexSegment_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Common.IndexSegment.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Common.IndexSegment.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IndexSegment.Reg(XFactory) +- uid: Hi.Common.IndexSegment.Reg* + name: Reg + href: api/Hi.Common.IndexSegment.html#Hi_Common_IndexSegment_Reg_ + commentId: Overload:Hi.Common.IndexSegment.Reg + isSpec: "True" + fullName: Hi.Common.IndexSegment.Reg + nameWithType: IndexSegment.Reg - uid: Hi.Common.IndexSegment.ToString name: ToString() href: api/Hi.Common.IndexSegment.html#Hi_Common_IndexSegment_ToString @@ -11384,6 +11553,19 @@ references: isSpec: "True" fullName: Hi.Common.IntegerKeyDictionaryConverter.RawKeyToIndex nameWithType: IntegerKeyDictionaryConverter.RawKeyToIndex +- uid: Hi.Common.IntegerKeyDictionaryConverter.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Common.IntegerKeyDictionaryConverter.html#Hi_Common_IntegerKeyDictionaryConverter_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Common.IntegerKeyDictionaryConverter.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Common.IntegerKeyDictionaryConverter.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IntegerKeyDictionaryConverter.Reg(XFactory) +- uid: Hi.Common.IntegerKeyDictionaryConverter.Reg* + name: Reg + href: api/Hi.Common.IntegerKeyDictionaryConverter.html#Hi_Common_IntegerKeyDictionaryConverter_Reg_ + commentId: Overload:Hi.Common.IntegerKeyDictionaryConverter.Reg + isSpec: "True" + fullName: Hi.Common.IntegerKeyDictionaryConverter.Reg + nameWithType: IntegerKeyDictionaryConverter.Reg - uid: Hi.Common.IntegerKeyDictionaryConverter.XName name: XName href: api/Hi.Common.IntegerKeyDictionaryConverter.html#Hi_Common_IntegerKeyDictionaryConverter_XName @@ -11522,6 +11704,23 @@ references: fullName.vb: Hi.Common.IntegerKeyDictionaryConverter(Of TValue).RawKeyToIndex nameWithType: IntegerKeyDictionaryConverter.RawKeyToIndex nameWithType.vb: IntegerKeyDictionaryConverter(Of TValue).RawKeyToIndex +- uid: Hi.Common.IntegerKeyDictionaryConverter`1.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Common.IntegerKeyDictionaryConverter-1.html#Hi_Common_IntegerKeyDictionaryConverter_1_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Common.IntegerKeyDictionaryConverter`1.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Common.IntegerKeyDictionaryConverter.Reg(Hi.Common.XmlUtils.XFactory) + fullName.vb: Hi.Common.IntegerKeyDictionaryConverter(Of TValue).Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IntegerKeyDictionaryConverter.Reg(XFactory) + nameWithType.vb: IntegerKeyDictionaryConverter(Of TValue).Reg(XFactory) +- uid: Hi.Common.IntegerKeyDictionaryConverter`1.Reg* + name: Reg + href: api/Hi.Common.IntegerKeyDictionaryConverter-1.html#Hi_Common_IntegerKeyDictionaryConverter_1_Reg_ + commentId: Overload:Hi.Common.IntegerKeyDictionaryConverter`1.Reg + isSpec: "True" + fullName: Hi.Common.IntegerKeyDictionaryConverter.Reg + fullName.vb: Hi.Common.IntegerKeyDictionaryConverter(Of TValue).Reg + nameWithType: IntegerKeyDictionaryConverter.Reg + nameWithType.vb: IntegerKeyDictionaryConverter(Of TValue).Reg - uid: Hi.Common.IntegerKeyDictionaryConverter`1.XName name: XName href: api/Hi.Common.IntegerKeyDictionaryConverter-1.html#Hi_Common_IntegerKeyDictionaryConverter_1_XName @@ -14953,6 +15152,19 @@ references: isSpec: "True" fullName: Hi.Common.RoutineBlocker.Period nameWithType: RoutineBlocker.Period +- uid: Hi.Common.RoutineBlocker.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Common.RoutineBlocker.html#Hi_Common_RoutineBlocker_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Common.RoutineBlocker.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Common.RoutineBlocker.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RoutineBlocker.Reg(XFactory) +- uid: Hi.Common.RoutineBlocker.Reg* + name: Reg + href: api/Hi.Common.RoutineBlocker.html#Hi_Common_RoutineBlocker_Reg_ + commentId: Overload:Hi.Common.RoutineBlocker.Reg + isSpec: "True" + fullName: Hi.Common.RoutineBlocker.Reg + nameWithType: RoutineBlocker.Reg - uid: Hi.Common.RoutineBlocker.SetDisable name: SetDisable() href: api/Hi.Common.RoutineBlocker.html#Hi_Common_RoutineBlocker_SetDisable @@ -15928,6 +16140,19 @@ references: commentId: T:Hi.Common.XmlUtils.XFactory fullName: Hi.Common.XmlUtils.XFactory nameWithType: XFactory +- uid: Hi.Common.XmlUtils.XFactory.Default + name: Default + href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default + commentId: P:Hi.Common.XmlUtils.XFactory.Default + fullName: Hi.Common.XmlUtils.XFactory.Default + nameWithType: XFactory.Default +- uid: Hi.Common.XmlUtils.XFactory.Default* + name: Default + href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default_ + commentId: Overload:Hi.Common.XmlUtils.XFactory.Default + isSpec: "True" + fullName: Hi.Common.XmlUtils.XFactory.Default + nameWithType: XFactory.Default - uid: Hi.Common.XmlUtils.XFactory.Gen* name: Gen href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Gen_ @@ -19928,6 +20153,19 @@ references: isSpec: "True" fullName: Hi.Disp.Flag.CoordinateDrawing.MakeXmlSource nameWithType: CoordinateDrawing.MakeXmlSource +- uid: Hi.Disp.Flag.CoordinateDrawing.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Disp.Flag.CoordinateDrawing.html#Hi_Disp_Flag_CoordinateDrawing_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Disp.Flag.CoordinateDrawing.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Disp.Flag.CoordinateDrawing.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CoordinateDrawing.Reg(XFactory) +- uid: Hi.Disp.Flag.CoordinateDrawing.Reg* + name: Reg + href: api/Hi.Disp.Flag.CoordinateDrawing.html#Hi_Disp_Flag_CoordinateDrawing_Reg_ + commentId: Overload:Hi.Disp.Flag.CoordinateDrawing.Reg + isSpec: "True" + fullName: Hi.Disp.Flag.CoordinateDrawing.Reg + nameWithType: CoordinateDrawing.Reg - uid: Hi.Disp.Flag.CoordinateDrawing.TextAtOrigin name: TextAtOrigin href: api/Hi.Disp.Flag.CoordinateDrawing.html#Hi_Disp_Flag_CoordinateDrawing_TextAtOrigin @@ -61726,6 +61964,19 @@ references: isSpec: "True" fullName: Hi.Geom.Box2d.ReadBin nameWithType: Box2d.ReadBin +- uid: Hi.Geom.Box2d.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.Box2d.html#Hi_Geom_Box2d_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.Box2d.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.Box2d.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: Box2d.Reg(XFactory) +- uid: Hi.Geom.Box2d.Reg* + name: Reg + href: api/Hi.Geom.Box2d.html#Hi_Geom_Box2d_Reg_ + commentId: Overload:Hi.Geom.Box2d.Reg + isSpec: "True" + fullName: Hi.Geom.Box2d.Reg + nameWithType: Box2d.Reg - uid: Hi.Geom.Box2d.ReversedPoleBox name: ReversedPoleBox href: api/Hi.Geom.Box2d.html#Hi_Geom_Box2d_ReversedPoleBox @@ -62457,6 +62708,19 @@ references: isSpec: "True" fullName: Hi.Geom.Box3d.RearView nameWithType: Box3d.RearView +- uid: Hi.Geom.Box3d.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.Box3d.html#Hi_Geom_Box3d_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.Box3d.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.Box3d.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: Box3d.Reg(XFactory) +- uid: Hi.Geom.Box3d.Reg* + name: Reg + href: api/Hi.Geom.Box3d.html#Hi_Geom_Box3d_Reg_ + commentId: Overload:Hi.Geom.Box3d.Reg + isSpec: "True" + fullName: Hi.Geom.Box3d.Reg + nameWithType: Box3d.Reg - uid: Hi.Geom.Box3d.ReversedPoleBox name: ReversedPoleBox href: api/Hi.Geom.Box3d.html#Hi_Geom_Box3d_ReversedPoleBox @@ -62873,6 +63137,19 @@ references: isSpec: "True" fullName: Hi.Geom.Cylindroid.PairZrs nameWithType: Cylindroid.PairZrs +- uid: Hi.Geom.Cylindroid.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.Cylindroid.html#Hi_Geom_Cylindroid_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.Cylindroid.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.Cylindroid.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: Cylindroid.Reg(XFactory) +- uid: Hi.Geom.Cylindroid.Reg* + name: Reg + href: api/Hi.Geom.Cylindroid.html#Hi_Geom_Cylindroid_Reg_ + commentId: Overload:Hi.Geom.Cylindroid.Reg + isSpec: "True" + fullName: Hi.Geom.Cylindroid.Reg + nameWithType: Cylindroid.Reg - uid: Hi.Geom.Cylindroid.ToPresentDto name: ToPresentDto() href: api/Hi.Geom.Cylindroid.html#Hi_Geom_Cylindroid_ToPresentDto @@ -63677,6 +63954,19 @@ references: isSpec: "True" fullName: Hi.Geom.ExtendedCylinder.MakeXmlSource nameWithType: ExtendedCylinder.MakeXmlSource +- uid: Hi.Geom.ExtendedCylinder.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.ExtendedCylinder.html#Hi_Geom_ExtendedCylinder_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.ExtendedCylinder.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.ExtendedCylinder.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ExtendedCylinder.Reg(XFactory) +- uid: Hi.Geom.ExtendedCylinder.Reg* + name: Reg + href: api/Hi.Geom.ExtendedCylinder.html#Hi_Geom_ExtendedCylinder_Reg_ + commentId: Overload:Hi.Geom.ExtendedCylinder.Reg + isSpec: "True" + fullName: Hi.Geom.ExtendedCylinder.Reg + nameWithType: ExtendedCylinder.Reg - uid: Hi.Geom.ExtendedCylinder.ToXElement name: ToXElement() href: api/Hi.Geom.ExtendedCylinder.html#Hi_Geom_ExtendedCylinder_ToXElement @@ -65115,6 +65405,19 @@ references: isSpec: "True" fullName: Hi.Geom.GeomCombination.MakeXmlSource nameWithType: GeomCombination.MakeXmlSource +- uid: Hi.Geom.GeomCombination.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.GeomCombination.html#Hi_Geom_GeomCombination_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.GeomCombination.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.GeomCombination.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GeomCombination.Reg(XFactory) +- uid: Hi.Geom.GeomCombination.Reg* + name: Reg + href: api/Hi.Geom.GeomCombination.html#Hi_Geom_GeomCombination_Reg_ + commentId: Overload:Hi.Geom.GeomCombination.Reg + isSpec: "True" + fullName: Hi.Geom.GeomCombination.Reg + nameWithType: GeomCombination.Reg - uid: Hi.Geom.GeomCombination.StlSources name: StlSources href: api/Hi.Geom.GeomCombination.html#Hi_Geom_GeomCombination_StlSources @@ -69032,6 +69335,19 @@ references: isSpec: "True" fullName: Hi.Geom.PairZr.R nameWithType: PairZr.R +- uid: Hi.Geom.PairZr.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.PairZr.html#Hi_Geom_PairZr_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.PairZr.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.PairZr.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PairZr.Reg(XFactory) +- uid: Hi.Geom.PairZr.Reg* + name: Reg + href: api/Hi.Geom.PairZr.html#Hi_Geom_PairZr_Reg_ + commentId: Overload:Hi.Geom.PairZr.Reg + isSpec: "True" + fullName: Hi.Geom.PairZr.Reg + nameWithType: PairZr.Reg - uid: Hi.Geom.PairZr.ToString name: ToString() href: api/Hi.Geom.PairZr.html#Hi_Geom_PairZr_ToString @@ -70181,6 +70497,19 @@ references: isSpec: "True" fullName: Hi.Geom.Resolution.PolarResolution2d.MakeXmlSource nameWithType: PolarResolution2d.MakeXmlSource +- uid: Hi.Geom.Resolution.PolarResolution2d.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.Resolution.PolarResolution2d.html#Hi_Geom_Resolution_PolarResolution2d_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.Resolution.PolarResolution2d.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.Resolution.PolarResolution2d.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PolarResolution2d.Reg(XFactory) +- uid: Hi.Geom.Resolution.PolarResolution2d.Reg* + name: Reg + href: api/Hi.Geom.Resolution.PolarResolution2d.html#Hi_Geom_Resolution_PolarResolution2d_Reg_ + commentId: Overload:Hi.Geom.Resolution.PolarResolution2d.Reg + isSpec: "True" + fullName: Hi.Geom.Resolution.PolarResolution2d.Reg + nameWithType: PolarResolution2d.Reg - uid: Hi.Geom.Resolution.PolarResolution2d.ToXElement name: ToXElement() href: api/Hi.Geom.Resolution.PolarResolution2d.html#Hi_Geom_Resolution_PolarResolution2d_ToXElement @@ -71763,6 +72092,19 @@ references: isSpec: "True" fullName: Hi.Geom.StlFile.MakeXmlSource nameWithType: StlFile.MakeXmlSource +- uid: Hi.Geom.StlFile.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.StlFile.html#Hi_Geom_StlFile_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.StlFile.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.StlFile.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StlFile.Reg(XFactory) +- uid: Hi.Geom.StlFile.Reg* + name: Reg + href: api/Hi.Geom.StlFile.html#Hi_Geom_StlFile_Reg_ + commentId: Overload:Hi.Geom.StlFile.Reg + isSpec: "True" + fullName: Hi.Geom.StlFile.Reg + nameWithType: StlFile.Reg - uid: Hi.Geom.StlFile.SaveStlToFile(System.String) name: SaveStlToFile(string) href: api/Hi.Geom.StlFile.html#Hi_Geom_StlFile_SaveStlToFile_System_String_ @@ -73415,6 +73757,19 @@ references: isSpec: "True" fullName: Hi.Geom.TransformationGeom.MakeXmlSource nameWithType: TransformationGeom.MakeXmlSource +- uid: Hi.Geom.TransformationGeom.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Geom.TransformationGeom.html#Hi_Geom_TransformationGeom_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Geom.TransformationGeom.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Geom.TransformationGeom.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TransformationGeom.Reg(XFactory) +- uid: Hi.Geom.TransformationGeom.Reg* + name: Reg + href: api/Hi.Geom.TransformationGeom.html#Hi_Geom_TransformationGeom_Reg_ + commentId: Overload:Hi.Geom.TransformationGeom.Reg + isSpec: "True" + fullName: Hi.Geom.TransformationGeom.Reg + nameWithType: TransformationGeom.Reg - uid: Hi.Geom.TransformationGeom.ToString name: ToString() href: api/Hi.Geom.TransformationGeom.html#Hi_Geom_TransformationGeom_ToString @@ -78805,6 +79160,19 @@ references: isSpec: "True" fullName: Hi.HiNcKits.HiNcHost.ProjectRelativeDirectory nameWithType: HiNcHost.ProjectRelativeDirectory +- uid: Hi.HiNcKits.HiNcHost.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.HiNcKits.HiNcHost.html#Hi_HiNcKits_HiNcHost_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.HiNcKits.HiNcHost.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.HiNcKits.HiNcHost.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HiNcHost.Reg(XFactory) +- uid: Hi.HiNcKits.HiNcHost.Reg* + name: Reg + href: api/Hi.HiNcKits.HiNcHost.html#Hi_HiNcKits_HiNcHost_Reg_ + commentId: Overload:Hi.HiNcKits.HiNcHost.Reg + isSpec: "True" + fullName: Hi.HiNcKits.HiNcHost.Reg + nameWithType: HiNcHost.Reg - uid: Hi.HiNcKits.HiNcHost.RelativeProjectPath name: RelativeProjectPath href: api/Hi.HiNcKits.HiNcHost.html#Hi_HiNcKits_HiNcHost_RelativeProjectPath @@ -79247,6 +79615,19 @@ references: isSpec: "True" fullName: Hi.HiNcKits.PlayerDivConfig.MessageTable nameWithType: PlayerDivConfig.MessageTable +- uid: Hi.HiNcKits.PlayerDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.HiNcKits.PlayerDivConfig.html#Hi_HiNcKits_PlayerDivConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.HiNcKits.PlayerDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.HiNcKits.PlayerDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PlayerDivConfig.Reg(XFactory) +- uid: Hi.HiNcKits.PlayerDivConfig.Reg* + name: Reg + href: api/Hi.HiNcKits.PlayerDivConfig.html#Hi_HiNcKits_PlayerDivConfig_Reg_ + commentId: Overload:Hi.HiNcKits.PlayerDivConfig.Reg + isSpec: "True" + fullName: Hi.HiNcKits.PlayerDivConfig.Reg + nameWithType: PlayerDivConfig.Reg - uid: Hi.HiNcKits.PlayerDivConfig.SensorSpindleMomentCycleLineDiv name: SensorSpindleMomentCycleLineDiv href: api/Hi.HiNcKits.PlayerDivConfig.html#Hi_HiNcKits_PlayerDivConfig_SensorSpindleMomentCycleLineDiv @@ -79349,6 +79730,19 @@ references: isSpec: "True" fullName: Hi.HiNcKits.ProxyConfig.MakeXmlSource nameWithType: ProxyConfig.MakeXmlSource +- uid: Hi.HiNcKits.ProxyConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.HiNcKits.ProxyConfig.html#Hi_HiNcKits_ProxyConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.HiNcKits.ProxyConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.HiNcKits.ProxyConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProxyConfig.Reg(XFactory) +- uid: Hi.HiNcKits.ProxyConfig.Reg* + name: Reg + href: api/Hi.HiNcKits.ProxyConfig.html#Hi_HiNcKits_ProxyConfig_Reg_ + commentId: Overload:Hi.HiNcKits.ProxyConfig.Reg + isSpec: "True" + fullName: Hi.HiNcKits.ProxyConfig.Reg + nameWithType: ProxyConfig.Reg - uid: Hi.HiNcKits.ProxyConfig.XName name: XName href: api/Hi.HiNcKits.ProxyConfig.html#Hi_HiNcKits_ProxyConfig_XName @@ -79529,6 +79923,19 @@ references: isSpec: "True" fullName: Hi.HiNcKits.UserConfig.PlayerDivConfig nameWithType: UserConfig.PlayerDivConfig +- uid: Hi.HiNcKits.UserConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.HiNcKits.UserConfig.html#Hi_HiNcKits_UserConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.HiNcKits.UserConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.HiNcKits.UserConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: UserConfig.Reg(XFactory) +- uid: Hi.HiNcKits.UserConfig.Reg* + name: Reg + href: api/Hi.HiNcKits.UserConfig.html#Hi_HiNcKits_UserConfig_Reg_ + commentId: Overload:Hi.HiNcKits.UserConfig.Reg + isSpec: "True" + fullName: Hi.HiNcKits.UserConfig.Reg + nameWithType: UserConfig.Reg - uid: Hi.HiNcKits.UserConfig.ShowPhysicsOptions name: ShowPhysicsOptions href: api/Hi.HiNcKits.UserConfig.html#Hi_HiNcKits_UserConfig_ShowPhysicsOptions @@ -80481,6 +80888,19 @@ references: isSpec: "True" fullName: Hi.Machining.FreeformRemover.Note nameWithType: FreeformRemover.Note +- uid: Hi.Machining.FreeformRemover.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Machining.FreeformRemover.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Machining.FreeformRemover.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FreeformRemover.Reg(XFactory) +- uid: Hi.Machining.FreeformRemover.Reg* + name: Reg + href: api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_Reg_ + commentId: Overload:Hi.Machining.FreeformRemover.Reg + isSpec: "True" + fullName: Hi.Machining.FreeformRemover.Reg + nameWithType: FreeformRemover.Reg - uid: Hi.Machining.FreeformRemover.ShaperGeom name: ShaperGeom href: api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_ShaperGeom @@ -81219,6 +81639,19 @@ references: isSpec: "True" fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.PrepareCollidableItems nameWithType: MachiningEquipment.PrepareCollidableItems +- uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningEquipment.Reg(XFactory) +- uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.Reg* + name: Reg + href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_Reg_ + commentId: Overload:Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.Reg + isSpec: "True" + fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.Reg + nameWithType: MachiningEquipment.Reg - uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.ResetCollisionFlags name: ResetCollisionFlags() href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_ResetCollisionFlags @@ -81466,6 +81899,19 @@ references: isSpec: "True" fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.MakeXmlSource nameWithType: MachiningEquipmentCollisionIndex.MakeXmlSource +- uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentCollisionIndex_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningEquipmentCollisionIndex.Reg(XFactory) +- uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.Reg* + name: Reg + href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentCollisionIndex_Reg_ + commentId: Overload:Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.Reg + isSpec: "True" + fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.Reg + nameWithType: MachiningEquipmentCollisionIndex.Reg - uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.ToXElement name: ToXElement() href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentCollisionIndex_ToXElement @@ -81570,6 +82016,19 @@ references: isSpec: "True" fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.MakeXmlSource nameWithType: MachiningEquipmentCollisionIndexPairsSource.MakeXmlSource +- uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentCollisionIndexPairsSource_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningEquipmentCollisionIndexPairsSource.Reg(XFactory) +- uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.Reg* + name: Reg + href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentCollisionIndexPairsSource_Reg_ + commentId: Overload:Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.Reg + isSpec: "True" + fullName: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.Reg + nameWithType: MachiningEquipmentCollisionIndexPairsSource.Reg - uid: Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.XName name: XName href: api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentCollisionIndexPairsSource_XName @@ -81684,6 +82143,19 @@ references: isSpec: "True" fullName: Hi.Machining.MachiningToolHouse.MakeXmlSource nameWithType: MachiningToolHouse.MakeXmlSource +- uid: Hi.Machining.MachiningToolHouse.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Machining.MachiningToolHouse.html#Hi_Machining_MachiningToolHouse_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Machining.MachiningToolHouse.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Machining.MachiningToolHouse.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningToolHouse.Reg(XFactory) +- uid: Hi.Machining.MachiningToolHouse.Reg* + name: Reg + href: api/Hi.Machining.MachiningToolHouse.html#Hi_Machining_MachiningToolHouse_Reg_ + commentId: Overload:Hi.Machining.MachiningToolHouse.Reg + isSpec: "True" + fullName: Hi.Machining.MachiningToolHouse.Reg + nameWithType: MachiningToolHouse.Reg - uid: Hi.Machining.MachiningToolHouse.SetToolId(System.Object,Hi.Machining.IMachiningTool) name: SetToolId(object, IMachiningTool) href: api/Hi.Machining.MachiningToolHouse.html#Hi_Machining_MachiningToolHouse_SetToolId_System_Object_Hi_Machining_IMachiningTool_ @@ -83121,6 +83593,19 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.LocalProjectService.RefreshDrawing nameWithType: LocalProjectService.RefreshDrawing +- uid: Hi.MachiningProcs.LocalProjectService.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MachiningProcs.LocalProjectService.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MachiningProcs.LocalProjectService.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: LocalProjectService.Reg(XFactory) +- uid: Hi.MachiningProcs.LocalProjectService.Reg* + name: Reg + href: api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Reg_ + commentId: Overload:Hi.MachiningProcs.LocalProjectService.Reg + isSpec: "True" + fullName: Hi.MachiningProcs.LocalProjectService.Reg + nameWithType: LocalProjectService.Reg - uid: Hi.MachiningProcs.LocalProjectService.ReloadProject name: ReloadProject() href: api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ReloadProject @@ -83948,6 +84433,19 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.MachiningActRunnerConfig.MakeXmlSource nameWithType: MachiningActRunnerConfig.MakeXmlSource +- uid: Hi.MachiningProcs.MachiningActRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MachiningProcs.MachiningActRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MachiningProcs.MachiningActRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningActRunnerConfig.Reg(XFactory) +- uid: Hi.MachiningProcs.MachiningActRunnerConfig.Reg* + name: Reg + href: api/Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_Reg_ + commentId: Overload:Hi.MachiningProcs.MachiningActRunnerConfig.Reg + isSpec: "True" + fullName: Hi.MachiningProcs.MachiningActRunnerConfig.Reg + nameWithType: MachiningActRunnerConfig.Reg - uid: Hi.MachiningProcs.MachiningActRunnerConfig.XName name: XName href: api/Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_XName @@ -84380,6 +84878,19 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.MachiningProject.PlayerCommand nameWithType: MachiningProject.PlayerCommand +- uid: Hi.MachiningProcs.MachiningProject.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MachiningProcs.MachiningProject.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MachiningProcs.MachiningProject.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningProject.Reg(XFactory) +- uid: Hi.MachiningProcs.MachiningProject.Reg* + name: Reg + href: api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_Reg_ + commentId: Overload:Hi.MachiningProcs.MachiningProject.Reg + isSpec: "True" + fullName: Hi.MachiningProcs.MachiningProject.Reg + nameWithType: MachiningProject.Reg - uid: Hi.MachiningProcs.MachiningProject.SoftNcRunner name: SoftNcRunner href: api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_SoftNcRunner @@ -92671,6 +93182,19 @@ references: isSpec: "True" fullName: Hi.Mapping.TimeMapping.MapSeriesByActualTime nameWithType: TimeMapping.MapSeriesByActualTime +- uid: Hi.Mapping.TimeMapping.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mapping.TimeMapping.html#Hi_Mapping_TimeMapping_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mapping.TimeMapping.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mapping.TimeMapping.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TimeMapping.Reg(XFactory) +- uid: Hi.Mapping.TimeMapping.Reg* + name: Reg + href: api/Hi.Mapping.TimeMapping.html#Hi_Mapping_TimeMapping_Reg_ + commentId: Overload:Hi.Mapping.TimeMapping.Reg + isSpec: "True" + fullName: Hi.Mapping.TimeMapping.Reg + nameWithType: TimeMapping.Reg - uid: Hi.Mapping.TimeMapping.RelFileToTimeShotListDictionary name: RelFileToTimeShotListDictionary href: api/Hi.Mapping.TimeMapping.html#Hi_Mapping_TimeMapping_RelFileToTimeShotListDictionary @@ -92888,6 +93412,19 @@ references: isSpec: "True" fullName: Hi.Mappings.FileTimeSection.PrimaryTimeOption nameWithType: FileTimeSection.PrimaryTimeOption +- uid: Hi.Mappings.FileTimeSection.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mappings.FileTimeSection.html#Hi_Mappings_FileTimeSection_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mappings.FileTimeSection.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mappings.FileTimeSection.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FileTimeSection.Reg(XFactory) +- uid: Hi.Mappings.FileTimeSection.Reg* + name: Reg + href: api/Hi.Mappings.FileTimeSection.html#Hi_Mappings_FileTimeSection_Reg_ + commentId: Overload:Hi.Mappings.FileTimeSection.Reg + isSpec: "True" + fullName: Hi.Mappings.FileTimeSection.Reg + nameWithType: FileTimeSection.Reg - uid: Hi.Mappings.FileTimeSection.TimeOption name: FileTimeSection.TimeOption href: api/Hi.Mappings.FileTimeSection.TimeOption.html @@ -93105,6 +93642,19 @@ references: isSpec: "True" fullName: Hi.Mech.GeneralMechanism.MakeXmlSource nameWithType: GeneralMechanism.MakeXmlSource +- uid: Hi.Mech.GeneralMechanism.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.GeneralMechanism.html#Hi_Mech_GeneralMechanism_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.GeneralMechanism.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.GeneralMechanism.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GeneralMechanism.Reg(XFactory) +- uid: Hi.Mech.GeneralMechanism.Reg* + name: Reg + href: api/Hi.Mech.GeneralMechanism.html#Hi_Mech_GeneralMechanism_Reg_ + commentId: Overload:Hi.Mech.GeneralMechanism.Reg + isSpec: "True" + fullName: Hi.Mech.GeneralMechanism.Reg + nameWithType: GeneralMechanism.Reg - uid: Hi.Mech.GeneralMechanism.Root name: Root href: api/Hi.Mech.GeneralMechanism.html#Hi_Mech_GeneralMechanism_Root @@ -94844,6 +95394,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.DynamicFreeform.MakeXmlSource nameWithType: DynamicFreeform.MakeXmlSource +- uid: Hi.Mech.Topo.DynamicFreeform.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.DynamicFreeform.html#Hi_Mech_Topo_DynamicFreeform_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.DynamicFreeform.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.DynamicFreeform.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DynamicFreeform.Reg(XFactory) +- uid: Hi.Mech.Topo.DynamicFreeform.Reg* + name: Reg + href: api/Hi.Mech.Topo.DynamicFreeform.html#Hi_Mech_Topo_DynamicFreeform_Reg_ + commentId: Overload:Hi.Mech.Topo.DynamicFreeform.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.DynamicFreeform.Reg + nameWithType: DynamicFreeform.Reg - uid: Hi.Mech.Topo.DynamicFreeform.SetMat(Hi.Geom.Mat4d) name: SetMat(Mat4d) href: api/Hi.Mech.Topo.DynamicFreeform.html#Hi_Mech_Topo_DynamicFreeform_SetMat_Hi_Geom_Mat4d_ @@ -95052,6 +95615,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.DynamicRotation.Pivot nameWithType: DynamicRotation.Pivot +- uid: Hi.Mech.Topo.DynamicRotation.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.DynamicRotation.html#Hi_Mech_Topo_DynamicRotation_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.DynamicRotation.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.DynamicRotation.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DynamicRotation.Reg(XFactory) +- uid: Hi.Mech.Topo.DynamicRotation.Reg* + name: Reg + href: api/Hi.Mech.Topo.DynamicRotation.html#Hi_Mech_Topo_DynamicRotation_Reg_ + commentId: Overload:Hi.Mech.Topo.DynamicRotation.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.DynamicRotation.Reg + nameWithType: DynamicRotation.Reg - uid: Hi.Mech.Topo.DynamicRotation.Set(Hi.Mech.Topo.DynamicRotation) name: Set(DynamicRotation) href: api/Hi.Mech.Topo.DynamicRotation.html#Hi_Mech_Topo_DynamicRotation_Set_Hi_Mech_Topo_DynamicRotation_ @@ -95241,6 +95817,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.DynamicTranslation.MakeXmlSource nameWithType: DynamicTranslation.MakeXmlSource +- uid: Hi.Mech.Topo.DynamicTranslation.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.DynamicTranslation.html#Hi_Mech_Topo_DynamicTranslation_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.DynamicTranslation.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.DynamicTranslation.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DynamicTranslation.Reg(XFactory) +- uid: Hi.Mech.Topo.DynamicTranslation.Reg* + name: Reg + href: api/Hi.Mech.Topo.DynamicTranslation.html#Hi_Mech_Topo_DynamicTranslation_Reg_ + commentId: Overload:Hi.Mech.Topo.DynamicTranslation.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.DynamicTranslation.Reg + nameWithType: DynamicTranslation.Reg - uid: Hi.Mech.Topo.DynamicTranslation.Set(Hi.Mech.Topo.DynamicTranslation) name: Set(DynamicTranslation) href: api/Hi.Mech.Topo.DynamicTranslation.html#Hi_Mech_Topo_DynamicTranslation_Set_Hi_Mech_Topo_DynamicTranslation_ @@ -95413,6 +96002,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.GeneralTransform.MakeXmlSource nameWithType: GeneralTransform.MakeXmlSource +- uid: Hi.Mech.Topo.GeneralTransform.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.GeneralTransform.html#Hi_Mech_Topo_GeneralTransform_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.GeneralTransform.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.GeneralTransform.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GeneralTransform.Reg(XFactory) +- uid: Hi.Mech.Topo.GeneralTransform.Reg* + name: Reg + href: api/Hi.Mech.Topo.GeneralTransform.html#Hi_Mech_Topo_GeneralTransform_Reg_ + commentId: Overload:Hi.Mech.Topo.GeneralTransform.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.GeneralTransform.Reg + nameWithType: GeneralTransform.Reg - uid: Hi.Mech.Topo.GeneralTransform.Rotation name: Rotation href: api/Hi.Mech.Topo.GeneralTransform.html#Hi_Mech_Topo_GeneralTransform_Rotation @@ -95852,6 +96454,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.NoTransform.MakeXmlSource nameWithType: NoTransform.MakeXmlSource +- uid: Hi.Mech.Topo.NoTransform.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.NoTransform.html#Hi_Mech_Topo_NoTransform_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.NoTransform.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.NoTransform.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NoTransform.Reg(XFactory) +- uid: Hi.Mech.Topo.NoTransform.Reg* + name: Reg + href: api/Hi.Mech.Topo.NoTransform.html#Hi_Mech_Topo_NoTransform_Reg_ + commentId: Overload:Hi.Mech.Topo.NoTransform.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.NoTransform.Reg + nameWithType: NoTransform.Reg - uid: Hi.Mech.Topo.NoTransform.ToPresentDto name: ToPresentDto() href: api/Hi.Mech.Topo.NoTransform.html#Hi_Mech_Topo_NoTransform_ToPresentDto @@ -96076,6 +96691,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.StackTransformer.Push nameWithType: StackTransformer.Push +- uid: Hi.Mech.Topo.StackTransformer.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.StackTransformer.html#Hi_Mech_Topo_StackTransformer_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.StackTransformer.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.StackTransformer.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StackTransformer.Reg(XFactory) +- uid: Hi.Mech.Topo.StackTransformer.Reg* + name: Reg + href: api/Hi.Mech.Topo.StackTransformer.html#Hi_Mech_Topo_StackTransformer_Reg_ + commentId: Overload:Hi.Mech.Topo.StackTransformer.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.StackTransformer.Reg + nameWithType: StackTransformer.Reg - uid: Hi.Mech.Topo.StackTransformer.ToPresentDto name: ToPresentDto() href: api/Hi.Mech.Topo.StackTransformer.html#Hi_Mech_Topo_StackTransformer_ToPresentDto @@ -96222,6 +96850,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.StaticFreeform.MakeXmlSource nameWithType: StaticFreeform.MakeXmlSource +- uid: Hi.Mech.Topo.StaticFreeform.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.StaticFreeform.html#Hi_Mech_Topo_StaticFreeform_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.StaticFreeform.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.StaticFreeform.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StaticFreeform.Reg(XFactory) +- uid: Hi.Mech.Topo.StaticFreeform.Reg* + name: Reg + href: api/Hi.Mech.Topo.StaticFreeform.html#Hi_Mech_Topo_StaticFreeform_Reg_ + commentId: Overload:Hi.Mech.Topo.StaticFreeform.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.StaticFreeform.Reg + nameWithType: StaticFreeform.Reg - uid: Hi.Mech.Topo.StaticFreeform.SetMat(Hi.Geom.Mat4d) name: SetMat(Mat4d) href: api/Hi.Mech.Topo.StaticFreeform.html#Hi_Mech_Topo_StaticFreeform_SetMat_Hi_Geom_Mat4d_ @@ -96439,6 +97080,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.StaticRotation.Pivot nameWithType: StaticRotation.Pivot +- uid: Hi.Mech.Topo.StaticRotation.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.StaticRotation.html#Hi_Mech_Topo_StaticRotation_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.StaticRotation.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.StaticRotation.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StaticRotation.Reg(XFactory) +- uid: Hi.Mech.Topo.StaticRotation.Reg* + name: Reg + href: api/Hi.Mech.Topo.StaticRotation.html#Hi_Mech_Topo_StaticRotation_Reg_ + commentId: Overload:Hi.Mech.Topo.StaticRotation.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.StaticRotation.Reg + nameWithType: StaticRotation.Reg - uid: Hi.Mech.Topo.StaticRotation.ToPresentDto name: ToPresentDto() href: api/Hi.Mech.Topo.StaticRotation.html#Hi_Mech_Topo_StaticRotation_ToPresentDto @@ -96585,6 +97239,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.StaticTranslation.MakeXmlSource nameWithType: StaticTranslation.MakeXmlSource +- uid: Hi.Mech.Topo.StaticTranslation.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.StaticTranslation.html#Hi_Mech_Topo_StaticTranslation_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.StaticTranslation.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.StaticTranslation.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StaticTranslation.Reg(XFactory) +- uid: Hi.Mech.Topo.StaticTranslation.Reg* + name: Reg + href: api/Hi.Mech.Topo.StaticTranslation.html#Hi_Mech_Topo_StaticTranslation_Reg_ + commentId: Overload:Hi.Mech.Topo.StaticTranslation.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.StaticTranslation.Reg + nameWithType: StaticTranslation.Reg - uid: Hi.Mech.Topo.StaticTranslation.Set(Hi.Mech.Topo.StaticTranslation) name: Set(StaticTranslation) href: api/Hi.Mech.Topo.StaticTranslation.html#Hi_Mech_Topo_StaticTranslation_Set_Hi_Mech_Topo_StaticTranslation_ @@ -96945,19 +97612,6 @@ references: commentId: T:Hi.Mech.Topo.TransformerUtil fullName: Hi.Mech.Topo.TransformerUtil nameWithType: TransformerUtil -- uid: Hi.Mech.Topo.TransformerUtil.Dummy - name: Dummy() - href: api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_Dummy - commentId: M:Hi.Mech.Topo.TransformerUtil.Dummy - fullName: Hi.Mech.Topo.TransformerUtil.Dummy() - nameWithType: TransformerUtil.Dummy() -- uid: Hi.Mech.Topo.TransformerUtil.Dummy* - name: Dummy - href: api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_Dummy_ - commentId: Overload:Hi.Mech.Topo.TransformerUtil.Dummy - isSpec: "True" - fullName: Hi.Mech.Topo.TransformerUtil.Dummy - nameWithType: TransformerUtil.Dummy - uid: Hi.Mech.Topo.TransformerUtil.GetSteps(Hi.Mech.Topo.IDynamicRegular[]) name: GetSteps(IDynamicRegular[]) href: api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_GetSteps_Hi_Mech_Topo_IDynamicRegular___ @@ -96974,6 +97628,19 @@ references: isSpec: "True" fullName: Hi.Mech.Topo.TransformerUtil.GetSteps nameWithType: TransformerUtil.GetSteps +- uid: Hi.Mech.Topo.TransformerUtil.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Mech.Topo.TransformerUtil.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Mech.Topo.TransformerUtil.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TransformerUtil.Reg(XFactory) +- uid: Hi.Mech.Topo.TransformerUtil.Reg* + name: Reg + href: api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_Reg_ + commentId: Overload:Hi.Mech.Topo.TransformerUtil.Reg + isSpec: "True" + fullName: Hi.Mech.Topo.TransformerUtil.Reg + nameWithType: TransformerUtil.Reg - uid: Hi.Mech.Topo.TransformerUtil.SetSteps(Hi.Mech.Topo.IDynamicRegular[],System.Double[]) name: SetSteps(IDynamicRegular[], double[]) href: api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_SetSteps_Hi_Mech_Topo_IDynamicRegular___System_Double___ @@ -97388,6 +98055,19 @@ references: isSpec: "True" fullName: Hi.Milling.Apts.BallApt.MakeXmlSource nameWithType: BallApt.MakeXmlSource +- uid: Hi.Milling.Apts.BallApt.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Apts.BallApt.html#Hi_Milling_Apts_BallApt_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Apts.BallApt.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Apts.BallApt.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BallApt.Reg(XFactory) +- uid: Hi.Milling.Apts.BallApt.Reg* + name: Reg + href: api/Hi.Milling.Apts.BallApt.html#Hi_Milling_Apts_BallApt_Reg_ + commentId: Overload:Hi.Milling.Apts.BallApt.Reg + isSpec: "True" + fullName: Hi.Milling.Apts.BallApt.Reg + nameWithType: BallApt.Reg - uid: Hi.Milling.Apts.BallApt.ToXElement name: ToXElement() href: api/Hi.Milling.Apts.BallApt.html#Hi_Milling_Apts_BallApt_ToXElement @@ -97558,6 +98238,19 @@ references: isSpec: "True" fullName: Hi.Milling.Apts.BullNoseApt.Rc_mm nameWithType: BullNoseApt.Rc_mm +- uid: Hi.Milling.Apts.BullNoseApt.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Apts.BullNoseApt.html#Hi_Milling_Apts_BullNoseApt_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Apts.BullNoseApt.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Apts.BullNoseApt.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BullNoseApt.Reg(XFactory) +- uid: Hi.Milling.Apts.BullNoseApt.Reg* + name: Reg + href: api/Hi.Milling.Apts.BullNoseApt.html#Hi_Milling_Apts_BullNoseApt_Reg_ + commentId: Overload:Hi.Milling.Apts.BullNoseApt.Reg + isSpec: "True" + fullName: Hi.Milling.Apts.BullNoseApt.Reg + nameWithType: BullNoseApt.Reg - uid: Hi.Milling.Apts.BullNoseApt.ToXElement name: ToXElement() href: api/Hi.Milling.Apts.BullNoseApt.html#Hi_Milling_Apts_BullNoseApt_ToXElement @@ -97728,6 +98421,19 @@ references: isSpec: "True" fullName: Hi.Milling.Apts.ColumnApt.Rc_mm nameWithType: ColumnApt.Rc_mm +- uid: Hi.Milling.Apts.ColumnApt.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Apts.ColumnApt.html#Hi_Milling_Apts_ColumnApt_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Apts.ColumnApt.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Apts.ColumnApt.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ColumnApt.Reg(XFactory) +- uid: Hi.Milling.Apts.ColumnApt.Reg* + name: Reg + href: api/Hi.Milling.Apts.ColumnApt.html#Hi_Milling_Apts_ColumnApt_Reg_ + commentId: Overload:Hi.Milling.Apts.ColumnApt.Reg + isSpec: "True" + fullName: Hi.Milling.Apts.ColumnApt.Reg + nameWithType: ColumnApt.Reg - uid: Hi.Milling.Apts.ColumnApt.ToXElement name: ToXElement() href: api/Hi.Milling.Apts.ColumnApt.html#Hi_Milling_Apts_ColumnApt_ToXElement @@ -97911,6 +98617,19 @@ references: isSpec: "True" fullName: Hi.Milling.Apts.ConeApt.MakeXmlSource nameWithType: ConeApt.MakeXmlSource +- uid: Hi.Milling.Apts.ConeApt.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Apts.ConeApt.html#Hi_Milling_Apts_ConeApt_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Apts.ConeApt.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Apts.ConeApt.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ConeApt.Reg(XFactory) +- uid: Hi.Milling.Apts.ConeApt.Reg* + name: Reg + href: api/Hi.Milling.Apts.ConeApt.html#Hi_Milling_Apts_ConeApt_Reg_ + commentId: Overload:Hi.Milling.Apts.ConeApt.Reg + isSpec: "True" + fullName: Hi.Milling.Apts.ConeApt.Reg + nameWithType: ConeApt.Reg - uid: Hi.Milling.Apts.ConeApt.ToXElement name: ToXElement() href: api/Hi.Milling.Apts.ConeApt.html#Hi_Milling_Apts_ConeApt_ToXElement @@ -98068,6 +98787,19 @@ references: isSpec: "True" fullName: Hi.Milling.Apts.ExactColumnApt.MakeXmlSource nameWithType: ExactColumnApt.MakeXmlSource +- uid: Hi.Milling.Apts.ExactColumnApt.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Apts.ExactColumnApt.html#Hi_Milling_Apts_ExactColumnApt_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Apts.ExactColumnApt.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Apts.ExactColumnApt.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ExactColumnApt.Reg(XFactory) +- uid: Hi.Milling.Apts.ExactColumnApt.Reg* + name: Reg + href: api/Hi.Milling.Apts.ExactColumnApt.html#Hi_Milling_Apts_ExactColumnApt_Reg_ + commentId: Overload:Hi.Milling.Apts.ExactColumnApt.Reg + isSpec: "True" + fullName: Hi.Milling.Apts.ExactColumnApt.Reg + nameWithType: ExactColumnApt.Reg - uid: Hi.Milling.Apts.ExactColumnApt.ToXElement name: ToXElement() href: api/Hi.Milling.Apts.ExactColumnApt.html#Hi_Milling_Apts_ExactColumnApt_ToXElement @@ -98398,6 +99130,19 @@ references: isSpec: "True" fullName: Hi.Milling.Apts.GeneralApt.Rc_mm nameWithType: GeneralApt.Rc_mm +- uid: Hi.Milling.Apts.GeneralApt.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Apts.GeneralApt.html#Hi_Milling_Apts_GeneralApt_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Apts.GeneralApt.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Apts.GeneralApt.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GeneralApt.Reg(XFactory) +- uid: Hi.Milling.Apts.GeneralApt.Reg* + name: Reg + href: api/Hi.Milling.Apts.GeneralApt.html#Hi_Milling_Apts_GeneralApt_Reg_ + commentId: Overload:Hi.Milling.Apts.GeneralApt.Reg + isSpec: "True" + fullName: Hi.Milling.Apts.GeneralApt.Reg + nameWithType: GeneralApt.Reg - uid: Hi.Milling.Apts.GeneralApt.Rr_mm name: Rr_mm href: api/Hi.Milling.Apts.GeneralApt.html#Hi_Milling_Apts_GeneralApt_Rr_mm @@ -98837,6 +99582,19 @@ references: isSpec: "True" fullName: Hi.Milling.Apts.TaperApt.MakeXmlSource nameWithType: TaperApt.MakeXmlSource +- uid: Hi.Milling.Apts.TaperApt.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Apts.TaperApt.html#Hi_Milling_Apts_TaperApt_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Apts.TaperApt.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Apts.TaperApt.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TaperApt.Reg(XFactory) +- uid: Hi.Milling.Apts.TaperApt.Reg* + name: Reg + href: api/Hi.Milling.Apts.TaperApt.html#Hi_Milling_Apts_TaperApt_Reg_ + commentId: Overload:Hi.Milling.Apts.TaperApt.Reg + isSpec: "True" + fullName: Hi.Milling.Apts.TaperApt.Reg + nameWithType: TaperApt.Reg - uid: Hi.Milling.Apts.TaperApt.Rz_mm name: Rz_mm href: api/Hi.Milling.Apts.TaperApt.html#Hi_Milling_Apts_TaperApt_Rz_mm @@ -99198,6 +99956,19 @@ references: isSpec: "True" fullName: Hi.Milling.Cutters.AptProfile.PolarResolution2dSource nameWithType: AptProfile.PolarResolution2dSource +- uid: Hi.Milling.Cutters.AptProfile.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Cutters.AptProfile.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Cutters.AptProfile.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: AptProfile.Reg(XFactory) +- uid: Hi.Milling.Cutters.AptProfile.Reg* + name: Reg + href: api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Reg_ + commentId: Overload:Hi.Milling.Cutters.AptProfile.Reg + isSpec: "True" + fullName: Hi.Milling.Cutters.AptProfile.Reg + nameWithType: AptProfile.Reg - uid: Hi.Milling.Cutters.AptProfile.UpdateByContent name: UpdateByContent() href: api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_UpdateByContent @@ -99377,6 +100148,19 @@ references: isSpec: "True" fullName: Hi.Milling.Cutters.ConstRatioProfile.RadiusRatio nameWithType: ConstRatioProfile.RadiusRatio +- uid: Hi.Milling.Cutters.ConstRatioProfile.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Cutters.ConstRatioProfile.html#Hi_Milling_Cutters_ConstRatioProfile_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Cutters.ConstRatioProfile.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Cutters.ConstRatioProfile.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ConstRatioProfile.Reg(XFactory) +- uid: Hi.Milling.Cutters.ConstRatioProfile.Reg* + name: Reg + href: api/Hi.Milling.Cutters.ConstRatioProfile.html#Hi_Milling_Cutters_ConstRatioProfile_Reg_ + commentId: Overload:Hi.Milling.Cutters.ConstRatioProfile.Reg + isSpec: "True" + fullName: Hi.Milling.Cutters.ConstRatioProfile.Reg + nameWithType: ConstRatioProfile.Reg - uid: Hi.Milling.Cutters.ConstRatioProfile.XName name: XName href: api/Hi.Milling.Cutters.ConstRatioProfile.html#Hi_Milling_Cutters_ConstRatioProfile_XName @@ -99560,6 +100344,19 @@ references: isSpec: "True" fullName: Hi.Milling.Cutters.CustomSpinningProfile.PolarResolution2dSource nameWithType: CustomSpinningProfile.PolarResolution2dSource +- uid: Hi.Milling.Cutters.CustomSpinningProfile.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Cutters.CustomSpinningProfile.html#Hi_Milling_Cutters_CustomSpinningProfile_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Cutters.CustomSpinningProfile.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Cutters.CustomSpinningProfile.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CustomSpinningProfile.Reg(XFactory) +- uid: Hi.Milling.Cutters.CustomSpinningProfile.Reg* + name: Reg + href: api/Hi.Milling.Cutters.CustomSpinningProfile.html#Hi_Milling_Cutters_CustomSpinningProfile_Reg_ + commentId: Overload:Hi.Milling.Cutters.CustomSpinningProfile.Reg + isSpec: "True" + fullName: Hi.Milling.Cutters.CustomSpinningProfile.Reg + nameWithType: CustomSpinningProfile.Reg - uid: Hi.Milling.Cutters.CustomSpinningProfile.XName name: XName href: api/Hi.Milling.Cutters.CustomSpinningProfile.html#Hi_Milling_Cutters_CustomSpinningProfile_XName @@ -99861,6 +100658,19 @@ references: isSpec: "True" fullName: Hi.Milling.Cutters.FluteDependentRatioProfile.RadiusRatio nameWithType: FluteDependentRatioProfile.RadiusRatio +- uid: Hi.Milling.Cutters.FluteDependentRatioProfile.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Cutters.FluteDependentRatioProfile.html#Hi_Milling_Cutters_FluteDependentRatioProfile_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Cutters.FluteDependentRatioProfile.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Cutters.FluteDependentRatioProfile.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FluteDependentRatioProfile.Reg(XFactory) +- uid: Hi.Milling.Cutters.FluteDependentRatioProfile.Reg* + name: Reg + href: api/Hi.Milling.Cutters.FluteDependentRatioProfile.html#Hi_Milling_Cutters_FluteDependentRatioProfile_Reg_ + commentId: Overload:Hi.Milling.Cutters.FluteDependentRatioProfile.Reg + isSpec: "True" + fullName: Hi.Milling.Cutters.FluteDependentRatioProfile.Reg + nameWithType: FluteDependentRatioProfile.Reg - uid: Hi.Milling.Cutters.FluteDependentRatioProfile.XName name: XName href: api/Hi.Milling.Cutters.FluteDependentRatioProfile.html#Hi_Milling_Cutters_FluteDependentRatioProfile_XName @@ -100686,6 +101496,19 @@ references: isSpec: "True" fullName: Hi.Milling.Cutters.MillingCutter.Note nameWithType: MillingCutter.Note +- uid: Hi.Milling.Cutters.MillingCutter.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.Cutters.MillingCutter.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.Cutters.MillingCutter.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MillingCutter.Reg(XFactory) +- uid: Hi.Milling.Cutters.MillingCutter.Reg* + name: Reg + href: api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_Reg_ + commentId: Overload:Hi.Milling.Cutters.MillingCutter.Reg + isSpec: "True" + fullName: Hi.Milling.Cutters.MillingCutter.Reg + nameWithType: MillingCutter.Reg - uid: Hi.Milling.Cutters.MillingCutter.ReliefAngle_deg name: ReliefAngle_deg href: api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_ReliefAngle_deg @@ -101791,6 +102614,19 @@ references: isSpec: "True" fullName: Hi.Milling.FluteContours.ConstHelixSideContour.RadialReliefAngle_rad nameWithType: ConstHelixSideContour.RadialReliefAngle_rad +- uid: Hi.Milling.FluteContours.ConstHelixSideContour.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.FluteContours.ConstHelixSideContour.html#Hi_Milling_FluteContours_ConstHelixSideContour_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.FluteContours.ConstHelixSideContour.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.FluteContours.ConstHelixSideContour.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ConstHelixSideContour.Reg(XFactory) +- uid: Hi.Milling.FluteContours.ConstHelixSideContour.Reg* + name: Reg + href: api/Hi.Milling.FluteContours.ConstHelixSideContour.html#Hi_Milling_FluteContours_ConstHelixSideContour_Reg_ + commentId: Overload:Hi.Milling.FluteContours.ConstHelixSideContour.Reg + isSpec: "True" + fullName: Hi.Milling.FluteContours.ConstHelixSideContour.Reg + nameWithType: ConstHelixSideContour.Reg - uid: Hi.Milling.FluteContours.ConstHelixSideContour.UpdateByContent name: UpdateByContent() href: api/Hi.Milling.FluteContours.ConstHelixSideContour.html#Hi_Milling_FluteContours_ConstHelixSideContour_UpdateByContent @@ -101976,6 +102812,19 @@ references: isSpec: "True" fullName: Hi.Milling.FluteContours.FluteContour.MakeXmlSource nameWithType: FluteContour.MakeXmlSource +- uid: Hi.Milling.FluteContours.FluteContour.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.FluteContours.FluteContour.html#Hi_Milling_FluteContours_FluteContour_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.FluteContours.FluteContour.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.FluteContours.FluteContour.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FluteContour.Reg(XFactory) +- uid: Hi.Milling.FluteContours.FluteContour.Reg* + name: Reg + href: api/Hi.Milling.FluteContours.FluteContour.html#Hi_Milling_FluteContours_FluteContour_Reg_ + commentId: Overload:Hi.Milling.FluteContours.FluteContour.Reg + isSpec: "True" + fullName: Hi.Milling.FluteContours.FluteContour.Reg + nameWithType: FluteContour.Reg - uid: Hi.Milling.FluteContours.FluteContour.SetupAngle_deg name: SetupAngle_deg href: api/Hi.Milling.FluteContours.FluteContour.html#Hi_Milling_FluteContours_FluteContour_SetupAngle_deg @@ -102204,6 +103053,19 @@ references: isSpec: "True" fullName: Hi.Milling.FluteContours.FreeContourTray.MakeXmlSource nameWithType: FreeContourTray.MakeXmlSource +- uid: Hi.Milling.FluteContours.FreeContourTray.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.FluteContours.FreeContourTray.html#Hi_Milling_FluteContours_FreeContourTray_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.FluteContours.FreeContourTray.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.FluteContours.FreeContourTray.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FreeContourTray.Reg(XFactory) +- uid: Hi.Milling.FluteContours.FreeContourTray.Reg* + name: Reg + href: api/Hi.Milling.FluteContours.FreeContourTray.html#Hi_Milling_FluteContours_FreeContourTray_Reg_ + commentId: Overload:Hi.Milling.FluteContours.FreeContourTray.Reg + isSpec: "True" + fullName: Hi.Milling.FluteContours.FreeContourTray.Reg + nameWithType: FreeContourTray.Reg - uid: Hi.Milling.FluteContours.FreeContourTray.UpdateByContent name: UpdateByContent() href: api/Hi.Milling.FluteContours.FreeContourTray.html#Hi_Milling_FluteContours_FreeContourTray_UpdateByContent @@ -102393,6 +103255,19 @@ references: isSpec: "True" fullName: Hi.Milling.FluteContours.FreeformSideContour.MakeXmlSource nameWithType: FreeformSideContour.MakeXmlSource +- uid: Hi.Milling.FluteContours.FreeformSideContour.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.FluteContours.FreeformSideContour.html#Hi_Milling_FluteContours_FreeformSideContour_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.FluteContours.FreeformSideContour.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.FluteContours.FreeformSideContour.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FreeformSideContour.Reg(XFactory) +- uid: Hi.Milling.FluteContours.FreeformSideContour.Reg* + name: Reg + href: api/Hi.Milling.FluteContours.FreeformSideContour.html#Hi_Milling_FluteContours_FreeformSideContour_Reg_ + commentId: Overload:Hi.Milling.FluteContours.FreeformSideContour.Reg + isSpec: "True" + fullName: Hi.Milling.FluteContours.FreeformSideContour.Reg + nameWithType: FreeformSideContour.Reg - uid: Hi.Milling.FluteContours.FreeformSideContour.SpanContourPosList name: SpanContourPosList href: api/Hi.Milling.FluteContours.FreeformSideContour.html#Hi_Milling_FluteContours_FreeformSideContour_SpanContourPosList @@ -102731,6 +103606,19 @@ references: isSpec: "True" fullName: Hi.Milling.FluteContours.ShiftedWorkingContour.MakeXmlSource nameWithType: ShiftedWorkingContour.MakeXmlSource +- uid: Hi.Milling.FluteContours.ShiftedWorkingContour.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.FluteContours.ShiftedWorkingContour.html#Hi_Milling_FluteContours_ShiftedWorkingContour_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.FluteContours.ShiftedWorkingContour.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.FluteContours.ShiftedWorkingContour.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ShiftedWorkingContour.Reg(XFactory) +- uid: Hi.Milling.FluteContours.ShiftedWorkingContour.Reg* + name: Reg + href: api/Hi.Milling.FluteContours.ShiftedWorkingContour.html#Hi_Milling_FluteContours_ShiftedWorkingContour_Reg_ + commentId: Overload:Hi.Milling.FluteContours.ShiftedWorkingContour.Reg + isSpec: "True" + fullName: Hi.Milling.FluteContours.ShiftedWorkingContour.Reg + nameWithType: ShiftedWorkingContour.Reg - uid: Hi.Milling.FluteContours.ShiftedWorkingContour.ShiftAngle_deg name: ShiftAngle_deg href: api/Hi.Milling.FluteContours.ShiftedWorkingContour.html#Hi_Milling_FluteContours_ShiftedWorkingContour_ShiftAngle_deg @@ -103155,6 +104043,19 @@ references: isSpec: "True" fullName: Hi.Milling.FluteContours.SlideBottomContour.OuterRadius_mm nameWithType: SlideBottomContour.OuterRadius_mm +- uid: Hi.Milling.FluteContours.SlideBottomContour.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.FluteContours.SlideBottomContour.html#Hi_Milling_FluteContours_SlideBottomContour_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.FluteContours.SlideBottomContour.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.FluteContours.SlideBottomContour.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SlideBottomContour.Reg(XFactory) +- uid: Hi.Milling.FluteContours.SlideBottomContour.Reg* + name: Reg + href: api/Hi.Milling.FluteContours.SlideBottomContour.html#Hi_Milling_FluteContours_SlideBottomContour_Reg_ + commentId: Overload:Hi.Milling.FluteContours.SlideBottomContour.Reg + isSpec: "True" + fullName: Hi.Milling.FluteContours.SlideBottomContour.Reg + nameWithType: SlideBottomContour.Reg - uid: Hi.Milling.FluteContours.SlideBottomContour.XName name: XName href: api/Hi.Milling.FluteContours.SlideBottomContour.html#Hi_Milling_FluteContours_SlideBottomContour_XName @@ -103506,6 +104407,19 @@ references: isSpec: "True" fullName: Hi.Milling.FluteContours.UniformContourTray.MakeXmlSource nameWithType: UniformContourTray.MakeXmlSource +- uid: Hi.Milling.FluteContours.UniformContourTray.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.FluteContours.UniformContourTray.html#Hi_Milling_FluteContours_UniformContourTray_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.FluteContours.UniformContourTray.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.FluteContours.UniformContourTray.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: UniformContourTray.Reg(XFactory) +- uid: Hi.Milling.FluteContours.UniformContourTray.Reg* + name: Reg + href: api/Hi.Milling.FluteContours.UniformContourTray.html#Hi_Milling_FluteContours_UniformContourTray_Reg_ + commentId: Overload:Hi.Milling.FluteContours.UniformContourTray.Reg + isSpec: "True" + fullName: Hi.Milling.FluteContours.UniformContourTray.Reg + nameWithType: UniformContourTray.Reg - uid: Hi.Milling.FluteContours.UniformContourTray.TrackNum name: TrackNum href: api/Hi.Milling.FluteContours.UniformContourTray.html#Hi_Milling_FluteContours_UniformContourTray_TrackNum @@ -104255,6 +105169,19 @@ references: isSpec: "True" fullName: Hi.Milling.MillingTools.MillingTool.PreservedDistanceBetweenFluteAndSpindleNose_mm nameWithType: MillingTool.PreservedDistanceBetweenFluteAndSpindleNose_mm +- uid: Hi.Milling.MillingTools.MillingTool.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.MillingTools.MillingTool.html#Hi_Milling_MillingTools_MillingTool_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.MillingTools.MillingTool.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.MillingTools.MillingTool.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MillingTool.Reg(XFactory) +- uid: Hi.Milling.MillingTools.MillingTool.Reg* + name: Reg + href: api/Hi.Milling.MillingTools.MillingTool.html#Hi_Milling_MillingTools_MillingTool_Reg_ + commentId: Overload:Hi.Milling.MillingTools.MillingTool.Reg + isSpec: "True" + fullName: Hi.Milling.MillingTools.MillingTool.Reg + nameWithType: MillingTool.Reg - uid: Hi.Milling.MillingTools.MillingTool.RelativeHeightFromObservationAnchor_mm name: RelativeHeightFromObservationAnchor_mm href: api/Hi.Milling.MillingTools.MillingTool.html#Hi_Milling_MillingTools_MillingTool_RelativeHeightFromObservationAnchor_mm @@ -104714,6 +105641,19 @@ references: isSpec: "True" fullName: Hi.Milling.SpindleCapability.Note nameWithType: SpindleCapability.Note +- uid: Hi.Milling.SpindleCapability.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Milling.SpindleCapability.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Milling.SpindleCapability.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SpindleCapability.Reg(XFactory) +- uid: Hi.Milling.SpindleCapability.Reg* + name: Reg + href: api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_Reg_ + commentId: Overload:Hi.Milling.SpindleCapability.Reg + isSpec: "True" + fullName: Hi.Milling.SpindleCapability.Reg + nameWithType: SpindleCapability.Reg - uid: Hi.Milling.SpindleCapability.WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW name: WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW href: api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW @@ -108159,6 +109099,19 @@ references: isSpec: "True" fullName: Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.NaN nameWithType: LocalProfileMillingPara.NaN +- uid: Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html#Hi_MillingForces_ProfileMillingParas_LocalProfileMillingPara_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: LocalProfileMillingPara.Reg(XFactory) +- uid: Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.Reg* + name: Reg + href: api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html#Hi_MillingForces_ProfileMillingParas_LocalProfileMillingPara_Reg_ + commentId: Overload:Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.Reg + isSpec: "True" + fullName: Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.Reg + nameWithType: LocalProfileMillingPara.Reg - uid: Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.S45C_ColumnEnd name: S45C_ColumnEnd href: api/Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html#Hi_MillingForces_ProfileMillingParas_LocalProfileMillingPara_S45C_ColumnEnd @@ -108570,6 +109523,19 @@ references: isSpec: "True" fullName: Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.PloughPara nameWithType: ProfileMillingParaMap.PloughPara +- uid: Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html#Hi_MillingForces_ProfileMillingParas_ProfileMillingParaMap_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProfileMillingParaMap.Reg(XFactory) +- uid: Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.Reg* + name: Reg + href: api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html#Hi_MillingForces_ProfileMillingParas_ProfileMillingParaMap_Reg_ + commentId: Overload:Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.Reg + isSpec: "True" + fullName: Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.Reg + nameWithType: ProfileMillingParaMap.Reg - uid: Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.SetElementByIndex(System.Int32,System.Double) name: SetElementByIndex(int, double) href: api/Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html#Hi_MillingForces_ProfileMillingParas_ProfileMillingParaMap_SetElementByIndex_System_Int32_System_Double_ @@ -109017,6 +109983,19 @@ references: isSpec: "True" fullName: Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.Note nameWithType: MultiFormRakeFaceCuttingPara.Note +- uid: Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html#Hi_MillingForces_RakeFaceCuttingParas_MultiFormRakeFaceCuttingPara_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MultiFormRakeFaceCuttingPara.Reg(XFactory) +- uid: Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.Reg* + name: Reg + href: api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html#Hi_MillingForces_RakeFaceCuttingParas_MultiFormRakeFaceCuttingPara_Reg_ + commentId: Overload:Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.Reg + isSpec: "True" + fullName: Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.Reg + nameWithType: MultiFormRakeFaceCuttingPara.Reg - uid: Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.SetElementByIndex(System.Int32,System.Double) name: SetElementByIndex(int, double) href: api/Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html#Hi_MillingForces_RakeFaceCuttingParas_MultiFormRakeFaceCuttingPara_SetElementByIndex_System_Int32_System_Double_ @@ -109371,6 +110350,19 @@ references: isSpec: "True" fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.Note nameWithType: RakeFaceCuttingPara2d.Note +- uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingPara2d_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RakeFaceCuttingPara2d.Reg(XFactory) +- uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.Reg* + name: Reg + href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingPara2d_Reg_ + commentId: Overload:Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.Reg + isSpec: "True" + fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.Reg + nameWithType: RakeFaceCuttingPara2d.Reg - uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.SetElementByIndex(System.Int32,System.Double) name: SetElementByIndex(int, double) href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingPara2d_SetElementByIndex_System_Int32_System_Double_ @@ -109840,6 +110832,19 @@ references: isSpec: "True" fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.Note nameWithType: RakeFaceCuttingPara3d.Note +- uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingPara3d_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RakeFaceCuttingPara3d.Reg(XFactory) +- uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.Reg* + name: Reg + href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingPara3d_Reg_ + commentId: Overload:Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.Reg + isSpec: "True" + fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.Reg + nameWithType: RakeFaceCuttingPara3d.Reg - uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.SetElementByIndex(System.Int32,System.Double) name: SetElementByIndex(int, double) href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingPara3d_SetElementByIndex_System_Int32_System_Double_ @@ -110181,6 +111186,19 @@ references: isSpec: "True" fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.PloughParas nameWithType: RakeFaceCuttingParaMap.PloughParas +- uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingParaMap_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RakeFaceCuttingParaMap.Reg(XFactory) +- uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.Reg* + name: Reg + href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingParaMap_Reg_ + commentId: Overload:Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.Reg + isSpec: "True" + fullName: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.Reg + nameWithType: RakeFaceCuttingParaMap.Reg - uid: Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.SetElementByIndex(System.Int32,System.Double) name: SetElementByIndex(int, double) href: api/Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html#Hi_MillingForces_RakeFaceCuttingParas_RakeFaceCuttingParaMap_SetElementByIndex_System_Int32_System_Double_ @@ -110536,6 +111554,19 @@ references: isSpec: "True" fullName: Hi.MillingProcs.MillingGuide.MakeXmlSource nameWithType: MillingGuide.MakeXmlSource +- uid: Hi.MillingProcs.MillingGuide.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingProcs.MillingGuide.html#Hi_MillingProcs_MillingGuide_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingProcs.MillingGuide.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingProcs.MillingGuide.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MillingGuide.Reg(XFactory) +- uid: Hi.MillingProcs.MillingGuide.Reg* + name: Reg + href: api/Hi.MillingProcs.MillingGuide.html#Hi_MillingProcs_MillingGuide_Reg_ + commentId: Overload:Hi.MillingProcs.MillingGuide.Reg + isSpec: "True" + fullName: Hi.MillingProcs.MillingGuide.Reg + nameWithType: MillingGuide.Reg - uid: Hi.MillingProcs.MillingGuide.SensorSpindleMomentCycleLineDivConfig name: SensorSpindleMomentCycleLineDivConfig href: api/Hi.MillingProcs.MillingGuide.html#Hi_MillingProcs_MillingGuide_SensorSpindleMomentCycleLineDivConfig @@ -110644,6 +111675,19 @@ references: isSpec: "True" fullName: Hi.MillingStepUtils.ClStripChartConfig.MakeXmlSource nameWithType: ClStripChartConfig.MakeXmlSource +- uid: Hi.MillingStepUtils.ClStripChartConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingStepUtils.ClStripChartConfig.html#Hi_MillingStepUtils_ClStripChartConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingStepUtils.ClStripChartConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingStepUtils.ClStripChartConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ClStripChartConfig.Reg(XFactory) +- uid: Hi.MillingStepUtils.ClStripChartConfig.Reg* + name: Reg + href: api/Hi.MillingStepUtils.ClStripChartConfig.html#Hi_MillingStepUtils_ClStripChartConfig_Reg_ + commentId: Overload:Hi.MillingStepUtils.ClStripChartConfig.Reg + isSpec: "True" + fullName: Hi.MillingStepUtils.ClStripChartConfig.Reg + nameWithType: ClStripChartConfig.Reg - uid: Hi.MillingStepUtils.ClStripChartConfig.XName name: XName href: api/Hi.MillingStepUtils.ClStripChartConfig.html#Hi_MillingStepUtils_ClStripChartConfig_XName @@ -110707,6 +111751,19 @@ references: isSpec: "True" fullName: Hi.MillingStepUtils.ClStripChartItemConfig.MakeXmlSource nameWithType: ClStripChartItemConfig.MakeXmlSource +- uid: Hi.MillingStepUtils.ClStripChartItemConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingStepUtils.ClStripChartItemConfig.html#Hi_MillingStepUtils_ClStripChartItemConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingStepUtils.ClStripChartItemConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingStepUtils.ClStripChartItemConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ClStripChartItemConfig.Reg(XFactory) +- uid: Hi.MillingStepUtils.ClStripChartItemConfig.Reg* + name: Reg + href: api/Hi.MillingStepUtils.ClStripChartItemConfig.html#Hi_MillingStepUtils_ClStripChartItemConfig_Reg_ + commentId: Overload:Hi.MillingStepUtils.ClStripChartItemConfig.Reg + isSpec: "True" + fullName: Hi.MillingStepUtils.ClStripChartItemConfig.Reg + nameWithType: ClStripChartItemConfig.Reg - uid: Hi.MillingStepUtils.ClStripChartItemConfig.TimeChartYConfig name: TimeChartYConfig href: api/Hi.MillingStepUtils.ClStripChartItemConfig.html#Hi_MillingStepUtils_ClStripChartItemConfig_TimeChartYConfig @@ -110827,6 +111884,19 @@ references: isSpec: "True" fullName: Hi.MillingStepUtils.ForceCycleLineDivConfig.MakeXmlSource nameWithType: ForceCycleLineDivConfig.MakeXmlSource +- uid: Hi.MillingStepUtils.ForceCycleLineDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html#Hi_MillingStepUtils_ForceCycleLineDivConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingStepUtils.ForceCycleLineDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingStepUtils.ForceCycleLineDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ForceCycleLineDivConfig.Reg(XFactory) +- uid: Hi.MillingStepUtils.ForceCycleLineDivConfig.Reg* + name: Reg + href: api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html#Hi_MillingStepUtils_ForceCycleLineDivConfig_Reg_ + commentId: Overload:Hi.MillingStepUtils.ForceCycleLineDivConfig.Reg + isSpec: "True" + fullName: Hi.MillingStepUtils.ForceCycleLineDivConfig.Reg + nameWithType: ForceCycleLineDivConfig.Reg - uid: Hi.MillingStepUtils.ForceCycleLineDivConfig.XName name: XName href: api/Hi.MillingStepUtils.ForceCycleLineDivConfig.html#Hi_MillingStepUtils_ForceCycleLineDivConfig_XName @@ -110908,6 +111978,19 @@ references: isSpec: "True" fullName: Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.MakeXmlSource nameWithType: SpindleMomentCycleLineDivConfig.MakeXmlSource +- uid: Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html#Hi_MillingStepUtils_SpindleMomentCycleLineDivConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SpindleMomentCycleLineDivConfig.Reg(XFactory) +- uid: Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.Reg* + name: Reg + href: api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html#Hi_MillingStepUtils_SpindleMomentCycleLineDivConfig_Reg_ + commentId: Overload:Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.Reg + isSpec: "True" + fullName: Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.Reg + nameWithType: SpindleMomentCycleLineDivConfig.Reg - uid: Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.TimeChartYConfig name: TimeChartYConfig href: api/Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html#Hi_MillingStepUtils_SpindleMomentCycleLineDivConfig_TimeChartYConfig @@ -110984,6 +112067,19 @@ references: isSpec: "True" fullName: Hi.MillingStepUtils.TimeChartYConfig.MakeXmlSource nameWithType: TimeChartYConfig.MakeXmlSource +- uid: Hi.MillingStepUtils.TimeChartYConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.MillingStepUtils.TimeChartYConfig.html#Hi_MillingStepUtils_TimeChartYConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.MillingStepUtils.TimeChartYConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.MillingStepUtils.TimeChartYConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TimeChartYConfig.Reg(XFactory) +- uid: Hi.MillingStepUtils.TimeChartYConfig.Reg* + name: Reg + href: api/Hi.MillingStepUtils.TimeChartYConfig.html#Hi_MillingStepUtils_TimeChartYConfig_Reg_ + commentId: Overload:Hi.MillingStepUtils.TimeChartYConfig.Reg + isSpec: "True" + fullName: Hi.MillingStepUtils.TimeChartYConfig.Reg + nameWithType: TimeChartYConfig.Reg - uid: Hi.MillingStepUtils.TimeChartYConfig.ToString name: ToString() href: api/Hi.MillingStepUtils.TimeChartYConfig.html#Hi_MillingStepUtils_TimeChartYConfig_ToString @@ -113373,6 +114469,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Fixtures.Fixture.MakeXmlSource nameWithType: Fixture.MakeXmlSource +- uid: Hi.NcMech.Fixtures.Fixture.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Fixtures.Fixture.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Fixtures.Fixture.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: Fixture.Reg(XFactory) +- uid: Hi.NcMech.Fixtures.Fixture.Reg* + name: Reg + href: api/Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_Reg_ + commentId: Overload:Hi.NcMech.Fixtures.Fixture.Reg + isSpec: "True" + fullName: Hi.NcMech.Fixtures.Fixture.Reg + nameWithType: Fixture.Reg - uid: Hi.NcMech.Fixtures.Fixture.SetWorkpieceTransformationToGeomTopCenter name: SetWorkpieceTransformationToGeomTopCenter() href: api/Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_SetWorkpieceTransformationToGeomTopCenter @@ -113643,6 +114752,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.MakeXmlSource nameWithType: FixtureEditorDisplayeeConfig.MakeXmlSource +- uid: Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html#Hi_NcMech_Fixtures_FixtureEditorDisplayeeConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FixtureEditorDisplayeeConfig.Reg(XFactory) +- uid: Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.Reg* + name: Reg + href: api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html#Hi_NcMech_Fixtures_FixtureEditorDisplayeeConfig_Reg_ + commentId: Overload:Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.Reg + isSpec: "True" + fullName: Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.Reg + nameWithType: FixtureEditorDisplayeeConfig.Reg - uid: Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.RenderingMode name: RenderingMode href: api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html#Hi_NcMech_Fixtures_FixtureEditorDisplayeeConfig_RenderingMode @@ -114110,6 +115232,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Holders.CylindroidHolder.PolarResolution2d nameWithType: CylindroidHolder.PolarResolution2d +- uid: Hi.NcMech.Holders.CylindroidHolder.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Holders.CylindroidHolder.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Holders.CylindroidHolder.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CylindroidHolder.Reg(XFactory) +- uid: Hi.NcMech.Holders.CylindroidHolder.Reg* + name: Reg + href: api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_Reg_ + commentId: Overload:Hi.NcMech.Holders.CylindroidHolder.Reg + isSpec: "True" + fullName: Hi.NcMech.Holders.CylindroidHolder.Reg + nameWithType: CylindroidHolder.Reg - uid: Hi.NcMech.Holders.CylindroidHolder.SpindleBuckle name: SpindleBuckle href: api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_SpindleBuckle @@ -114577,6 +115712,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Holders.FreeformHolder.PolarResolution2d nameWithType: FreeformHolder.PolarResolution2d +- uid: Hi.NcMech.Holders.FreeformHolder.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Holders.FreeformHolder.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Holders.FreeformHolder.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FreeformHolder.Reg(XFactory) +- uid: Hi.NcMech.Holders.FreeformHolder.Reg* + name: Reg + href: api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_Reg_ + commentId: Overload:Hi.NcMech.Holders.FreeformHolder.Reg + isSpec: "True" + fullName: Hi.NcMech.Holders.FreeformHolder.Reg + nameWithType: FreeformHolder.Reg - uid: Hi.NcMech.Holders.FreeformHolder.SpindleBuckle name: SpindleBuckle href: api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_SpindleBuckle @@ -115157,6 +116305,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Solids.Solid.Prepared nameWithType: Solid.Prepared +- uid: Hi.NcMech.Solids.Solid.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Solids.Solid.html#Hi_NcMech_Solids_Solid_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Solids.Solid.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Solids.Solid.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: Solid.Reg(XFactory) +- uid: Hi.NcMech.Solids.Solid.Reg* + name: Reg + href: api/Hi.NcMech.Solids.Solid.html#Hi_NcMech_Solids_Solid_Reg_ + commentId: Overload:Hi.NcMech.Solids.Solid.Reg + isSpec: "True" + fullName: Hi.NcMech.Solids.Solid.Reg + nameWithType: Solid.Reg - uid: Hi.NcMech.Solids.Solid.RenderingModeEnum name: Solid.RenderingModeEnum href: api/Hi.NcMech.Solids.Solid.RenderingModeEnum.html @@ -115512,6 +116673,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Topo.NcRotation.MakeXmlSource nameWithType: NcRotation.MakeXmlSource +- uid: Hi.NcMech.Topo.NcRotation.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Topo.NcRotation.html#Hi_NcMech_Topo_NcRotation_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Topo.NcRotation.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Topo.NcRotation.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcRotation.Reg(XFactory) +- uid: Hi.NcMech.Topo.NcRotation.Reg* + name: Reg + href: api/Hi.NcMech.Topo.NcRotation.html#Hi_NcMech_Topo_NcRotation_Reg_ + commentId: Overload:Hi.NcMech.Topo.NcRotation.Reg + isSpec: "True" + fullName: Hi.NcMech.Topo.NcRotation.Reg + nameWithType: NcRotation.Reg - uid: Hi.NcMech.Topo.NcRotation.SpeedLimit_radds name: SpeedLimit_radds href: api/Hi.NcMech.Topo.NcRotation.html#Hi_NcMech_Topo_NcRotation_SpeedLimit_radds @@ -115740,6 +116914,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Topo.NcTranslation.MakeXmlSource nameWithType: NcTranslation.MakeXmlSource +- uid: Hi.NcMech.Topo.NcTranslation.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Topo.NcTranslation.html#Hi_NcMech_Topo_NcTranslation_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Topo.NcTranslation.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Topo.NcTranslation.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcTranslation.Reg(XFactory) +- uid: Hi.NcMech.Topo.NcTranslation.Reg* + name: Reg + href: api/Hi.NcMech.Topo.NcTranslation.html#Hi_NcMech_Topo_NcTranslation_Reg_ + commentId: Overload:Hi.NcMech.Topo.NcTranslation.Reg + isSpec: "True" + fullName: Hi.NcMech.Topo.NcTranslation.Reg + nameWithType: NcTranslation.Reg - uid: Hi.NcMech.Topo.NcTranslation.SpeedLimit_mmdmin name: SpeedLimit_mmdmin href: api/Hi.NcMech.Topo.NcTranslation.html#Hi_NcMech_Topo_NcTranslation_SpeedLimit_mmdmin @@ -116489,6 +117676,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Workpieces.Workpiece.ProgramZeroAnchor nameWithType: Workpiece.ProgramZeroAnchor +- uid: Hi.NcMech.Workpieces.Workpiece.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Workpieces.Workpiece.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Workpieces.Workpiece.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: Workpiece.Reg(XFactory) +- uid: Hi.NcMech.Workpieces.Workpiece.Reg* + name: Reg + href: api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_Reg_ + commentId: Overload:Hi.NcMech.Workpieces.Workpiece.Reg + isSpec: "True" + fullName: Hi.NcMech.Workpieces.Workpiece.Reg + nameWithType: Workpiece.Reg - uid: Hi.NcMech.Workpieces.Workpiece.WorkpieceGeomToFixtureBuckleBranch name: WorkpieceGeomToFixtureBuckleBranch href: api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_WorkpieceGeomToFixtureBuckleBranch @@ -116850,6 +118050,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.RawGeomRenderingMode nameWithType: WorkpieceEditorDisplayeeConfig.RawGeomRenderingMode +- uid: Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html#Hi_NcMech_Workpieces_WorkpieceEditorDisplayeeConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: WorkpieceEditorDisplayeeConfig.Reg(XFactory) +- uid: Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.Reg* + name: Reg + href: api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html#Hi_NcMech_Workpieces_WorkpieceEditorDisplayeeConfig_Reg_ + commentId: Overload:Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.Reg + isSpec: "True" + fullName: Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.Reg + nameWithType: WorkpieceEditorDisplayeeConfig.Reg - uid: Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.ShowFixtureBuckle name: ShowFixtureBuckle href: api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html#Hi_NcMech_Workpieces_WorkpieceEditorDisplayeeConfig_ShowFixtureBuckle @@ -117796,6 +119009,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.Note nameWithType: CodeXyzabcMachineTool.Note +- uid: Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html#Hi_NcMech_Xyzabc_CodeXyzabcMachineTool_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CodeXyzabcMachineTool.Reg(XFactory) +- uid: Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.Reg* + name: Reg + href: api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html#Hi_NcMech_Xyzabc_CodeXyzabcMachineTool_Reg_ + commentId: Overload:Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.Reg + isSpec: "True" + fullName: Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.Reg + nameWithType: CodeXyzabcMachineTool.Reg - uid: Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.TableAnchor name: TableAnchor href: api/Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html#Hi_NcMech_Xyzabc_CodeXyzabcMachineTool_TableAnchor @@ -117966,6 +119192,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.MakeXmlSource nameWithType: CodeXyzabcMachineToolUri.MakeXmlSource +- uid: Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html#Hi_NcMech_Xyzabc_CodeXyzabcMachineToolUri_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CodeXyzabcMachineToolUri.Reg(XFactory) +- uid: Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.Reg* + name: Reg + href: api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html#Hi_NcMech_Xyzabc_CodeXyzabcMachineToolUri_Reg_ + commentId: Overload:Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.Reg + isSpec: "True" + fullName: Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.Reg + nameWithType: CodeXyzabcMachineToolUri.Reg - uid: Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.SaveToUri(System.String) name: SaveToUri(string) href: api/Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html#Hi_NcMech_Xyzabc_CodeXyzabcMachineToolUri_SaveToUri_System_String_ @@ -118383,6 +119622,19 @@ references: isSpec: "True" fullName: Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.Note nameWithType: GeneralXyzabcMachineTool.Note +- uid: Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html#Hi_NcMech_Xyzabc_GeneralXyzabcMachineTool_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GeneralXyzabcMachineTool.Reg(XFactory) +- uid: Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.Reg* + name: Reg + href: api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html#Hi_NcMech_Xyzabc_GeneralXyzabcMachineTool_Reg_ + commentId: Overload:Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.Reg + isSpec: "True" + fullName: Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.Reg + nameWithType: GeneralXyzabcMachineTool.Reg - uid: Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.TableAnchor name: TableAnchor href: api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html#Hi_NcMech_Xyzabc_GeneralXyzabcMachineTool_TableAnchor @@ -118616,6 +119868,19 @@ references: isSpec: "True" fullName: Hi.NcOpt.CuttingVelocityOptLimit.MinCuttingVelocity_mmds nameWithType: CuttingVelocityOptLimit.MinCuttingVelocity_mmds +- uid: Hi.NcOpt.CuttingVelocityOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcOpt.CuttingVelocityOptLimit.html#Hi_NcOpt_CuttingVelocityOptLimit_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcOpt.CuttingVelocityOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcOpt.CuttingVelocityOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CuttingVelocityOptLimit.Reg(XFactory) +- uid: Hi.NcOpt.CuttingVelocityOptLimit.Reg* + name: Reg + href: api/Hi.NcOpt.CuttingVelocityOptLimit.html#Hi_NcOpt_CuttingVelocityOptLimit_Reg_ + commentId: Overload:Hi.NcOpt.CuttingVelocityOptLimit.Reg + isSpec: "True" + fullName: Hi.NcOpt.CuttingVelocityOptLimit.Reg + nameWithType: CuttingVelocityOptLimit.Reg - uid: Hi.NcOpt.CuttingVelocityOptLimit.ToXElement name: ToXElement() href: api/Hi.NcOpt.CuttingVelocityOptLimit.html#Hi_NcOpt_CuttingVelocityOptLimit_ToXElement @@ -118786,6 +120051,19 @@ references: isSpec: "True" fullName: Hi.NcOpt.FixedFeedPerCycleOptLimit.MinFeedPerCycle_mm nameWithType: FixedFeedPerCycleOptLimit.MinFeedPerCycle_mm +- uid: Hi.NcOpt.FixedFeedPerCycleOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html#Hi_NcOpt_FixedFeedPerCycleOptLimit_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcOpt.FixedFeedPerCycleOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcOpt.FixedFeedPerCycleOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FixedFeedPerCycleOptLimit.Reg(XFactory) +- uid: Hi.NcOpt.FixedFeedPerCycleOptLimit.Reg* + name: Reg + href: api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html#Hi_NcOpt_FixedFeedPerCycleOptLimit_Reg_ + commentId: Overload:Hi.NcOpt.FixedFeedPerCycleOptLimit.Reg + isSpec: "True" + fullName: Hi.NcOpt.FixedFeedPerCycleOptLimit.Reg + nameWithType: FixedFeedPerCycleOptLimit.Reg - uid: Hi.NcOpt.FixedFeedPerCycleOptLimit.ToXElement name: ToXElement() href: api/Hi.NcOpt.FixedFeedPerCycleOptLimit.html#Hi_NcOpt_FixedFeedPerCycleOptLimit_ToXElement @@ -118930,6 +120208,19 @@ references: isSpec: "True" fullName: Hi.NcOpt.FixedFeedPerToothOptLimit.MinFeedPerTooth_mm nameWithType: FixedFeedPerToothOptLimit.MinFeedPerTooth_mm +- uid: Hi.NcOpt.FixedFeedPerToothOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcOpt.FixedFeedPerToothOptLimit.html#Hi_NcOpt_FixedFeedPerToothOptLimit_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcOpt.FixedFeedPerToothOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcOpt.FixedFeedPerToothOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FixedFeedPerToothOptLimit.Reg(XFactory) +- uid: Hi.NcOpt.FixedFeedPerToothOptLimit.Reg* + name: Reg + href: api/Hi.NcOpt.FixedFeedPerToothOptLimit.html#Hi_NcOpt_FixedFeedPerToothOptLimit_Reg_ + commentId: Overload:Hi.NcOpt.FixedFeedPerToothOptLimit.Reg + isSpec: "True" + fullName: Hi.NcOpt.FixedFeedPerToothOptLimit.Reg + nameWithType: FixedFeedPerToothOptLimit.Reg - uid: Hi.NcOpt.FixedFeedPerToothOptLimit.ToString name: ToString() href: api/Hi.NcOpt.FixedFeedPerToothOptLimit.html#Hi_NcOpt_FixedFeedPerToothOptLimit_ToString @@ -119241,6 +120532,19 @@ references: isSpec: "True" fullName: Hi.NcOpt.MillingCutterOptOption.MinFeedPerTooth_mm nameWithType: MillingCutterOptOption.MinFeedPerTooth_mm +- uid: Hi.NcOpt.MillingCutterOptOption.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcOpt.MillingCutterOptOption.html#Hi_NcOpt_MillingCutterOptOption_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcOpt.MillingCutterOptOption.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcOpt.MillingCutterOptOption.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MillingCutterOptOption.Reg(XFactory) +- uid: Hi.NcOpt.MillingCutterOptOption.Reg* + name: Reg + href: api/Hi.NcOpt.MillingCutterOptOption.html#Hi_NcOpt_MillingCutterOptOption_Reg_ + commentId: Overload:Hi.NcOpt.MillingCutterOptOption.Reg + isSpec: "True" + fullName: Hi.NcOpt.MillingCutterOptOption.Reg + nameWithType: MillingCutterOptOption.Reg - uid: Hi.NcOpt.MillingCutterOptOption.ToXElement name: ToXElement() href: api/Hi.NcOpt.MillingCutterOptOption.html#Hi_NcOpt_MillingCutterOptOption_ToXElement @@ -119764,6 +121068,19 @@ references: isSpec: "True" fullName: Hi.NcOpt.NcOptOption.RapidFeed_mmds nameWithType: NcOptOption.RapidFeed_mmds +- uid: Hi.NcOpt.NcOptOption.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcOpt.NcOptOption.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcOpt.NcOptOption.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcOptOption.Reg(XFactory) +- uid: Hi.NcOpt.NcOptOption.Reg* + name: Reg + href: api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_Reg_ + commentId: Overload:Hi.NcOpt.NcOptOption.Reg + isSpec: "True" + fullName: Hi.NcOpt.NcOptOption.Reg + nameWithType: NcOptOption.Reg - uid: Hi.NcOpt.NcOptOption.ThermalYieldSafetyFactor name: ThermalYieldSafetyFactor href: api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_ThermalYieldSafetyFactor @@ -119963,6 +121280,19 @@ references: isSpec: "True" fullName: Hi.NcOpt.NcOptProc.OptimizeToFiles nameWithType: NcOptProc.OptimizeToFiles +- uid: Hi.NcOpt.NcOptProc.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcOpt.NcOptProc.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcOpt.NcOptProc.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcOptProc.Reg(XFactory) +- uid: Hi.NcOpt.NcOptProc.Reg* + name: Reg + href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_Reg_ + commentId: Overload:Hi.NcOpt.NcOptProc.Reg + isSpec: "True" + fullName: Hi.NcOpt.NcOptProc.Reg + nameWithType: NcOptProc.Reg - uid: Hi.NcOpt.NcOptProc.XName name: XName href: api/Hi.NcOpt.NcOptProc.html#Hi_NcOpt_NcOptProc_XName @@ -120205,6 +121535,19 @@ references: isSpec: "True" fullName: Hi.NcOpt.ShapeBasedCutterOptLimit.Radius_mm nameWithType: ShapeBasedCutterOptLimit.Radius_mm +- uid: Hi.NcOpt.ShapeBasedCutterOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcOpt.ShapeBasedCutterOptLimit.html#Hi_NcOpt_ShapeBasedCutterOptLimit_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcOpt.ShapeBasedCutterOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcOpt.ShapeBasedCutterOptLimit.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ShapeBasedCutterOptLimit.Reg(XFactory) +- uid: Hi.NcOpt.ShapeBasedCutterOptLimit.Reg* + name: Reg + href: api/Hi.NcOpt.ShapeBasedCutterOptLimit.html#Hi_NcOpt_ShapeBasedCutterOptLimit_Reg_ + commentId: Overload:Hi.NcOpt.ShapeBasedCutterOptLimit.Reg + isSpec: "True" + fullName: Hi.NcOpt.ShapeBasedCutterOptLimit.Reg + nameWithType: ShapeBasedCutterOptLimit.Reg - uid: Hi.NcOpt.ShapeBasedCutterOptLimit.SafetyFactor name: SafetyFactor href: api/Hi.NcOpt.ShapeBasedCutterOptLimit.html#Hi_NcOpt_ShapeBasedCutterOptLimit_SafetyFactor @@ -120348,6 +121691,19 @@ references: commentId: F:Hi.NcParsers.Dependencys.CncBrandDependency.Mazak fullName: Hi.NcParsers.Dependencys.CncBrandDependency.Mazak nameWithType: CncBrandDependency.Mazak +- uid: Hi.NcParsers.Dependencys.CncBrandDependency.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.CncBrandDependency.html#Hi_NcParsers_Dependencys_CncBrandDependency_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.CncBrandDependency.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.CncBrandDependency.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CncBrandDependency.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.CncBrandDependency.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.CncBrandDependency.html#Hi_NcParsers_Dependencys_CncBrandDependency_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.CncBrandDependency.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.CncBrandDependency.Reg + nameWithType: CncBrandDependency.Reg - uid: Hi.NcParsers.Dependencys.CncBrandDependency.Siemens name: Siemens href: api/Hi.NcParsers.Dependencys.CncBrandDependency.html#Hi_NcParsers_Dependencys_CncBrandDependency_Siemens @@ -120922,6 +122278,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MaxIterationsPerTarget nameWithType: FanucGotoIterationDependency.MaxIterationsPerTarget +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucGotoIterationDependency.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg + nameWithType: FanucGotoIterationDependency.Reg - uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset name: Reset() href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset @@ -121328,6 +122697,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.ReferencePositionParamId nameWithType: FanucParameterTable.ReferencePositionParamId +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html#Hi_NcParsers_Dependencys_Fanuc_FanucParameterTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucParameterTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html#Hi_NcParsers_Dependencys_Fanuc_FanucParameterTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.Reg + nameWithType: FanucParameterTable.Reg - uid: Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.SetCoordinateOffset(System.String,Hi.Geom.Vec3d) name: SetCoordinateOffset(string, Vec3d) href: api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html#Hi_NcParsers_Dependencys_Fanuc_FanucParameterTable_SetCoordinateOffset_System_String_Hi_Geom_Vec3d_ @@ -121467,6 +122849,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource nameWithType: FanucPositionVariableLookup.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucPositionVariableLookup.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.Reg + nameWithType: FanucPositionVariableLookup.Reg - uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.XName name: XName href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_XName @@ -121546,6 +122941,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.MakeXmlSource nameWithType: FanucToolOffsetVariableLookup.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucToolOffsetVariableLookup.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Reg + nameWithType: FanucToolOffsetVariableLookup.Reg - uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.ToolHeightMax name: ToolHeightMax href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_ToolHeightMax @@ -121653,6 +123061,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.MakeXmlSource nameWithType: RetainedCommonVariableTable.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html#Hi_NcParsers_Dependencys_Fanuc_RetainedCommonVariableTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RetainedCommonVariableTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html#Hi_NcParsers_Dependencys_Fanuc_RetainedCommonVariableTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.Reg + nameWithType: RetainedCommonVariableTable.Reg - uid: Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.RetainedCommonMax name: RetainedCommonMax href: api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html#Hi_NcParsers_Dependencys_Fanuc_RetainedCommonVariableTable_RetainedCommonMax @@ -121776,6 +123197,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Generic.FallbackConfig.PeckRetractionDistance_mm nameWithType: FallbackConfig.PeckRetractionDistance_mm +- uid: Hi.NcParsers.Dependencys.Generic.FallbackConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html#Hi_NcParsers_Dependencys_Generic_FallbackConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Generic.FallbackConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Generic.FallbackConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FallbackConfig.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Generic.FallbackConfig.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html#Hi_NcParsers_Dependencys_Generic_FallbackConfig_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Generic.FallbackConfig.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Generic.FallbackConfig.Reg + nameWithType: FallbackConfig.Reg - uid: Hi.NcParsers.Dependencys.Generic.FallbackConfig.XName name: XName href: api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html#Hi_NcParsers_Dependencys_Generic_FallbackConfig_XName @@ -121868,6 +123302,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.MakeXmlSource nameWithType: GenericBlockSkipConfig.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html#Hi_NcParsers_Dependencys_Generic_GenericBlockSkipConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GenericBlockSkipConfig.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html#Hi_NcParsers_Dependencys_Generic_GenericBlockSkipConfig_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.Reg + nameWithType: GenericBlockSkipConfig.Reg - uid: Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.SetLayerEnabled(System.Int32,System.Boolean) name: SetLayerEnabled(int, bool) href: api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html#Hi_NcParsers_Dependencys_Generic_GenericBlockSkipConfig_SetLayerEnabled_System_Int32_System_Boolean_ @@ -121992,6 +123439,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.MakeXmlSource nameWithType: IsoCoordinateTable.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html#Hi_NcParsers_Dependencys_Generic_IsoCoordinateTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IsoCoordinateTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html#Hi_NcParsers_Dependencys_Generic_IsoCoordinateTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.Reg + nameWithType: IsoCoordinateTable.Reg - uid: Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.SetCoordinateOffset(System.String,Hi.Geom.Vec3d) name: SetCoordinateOffset(string, Vec3d) href: api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html#Hi_NcParsers_Dependencys_Generic_IsoCoordinateTable_SetCoordinateOffset_System_String_Hi_Geom_Vec3d_ @@ -122090,6 +123550,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.MakeXmlSource nameWithType: SubProgramFolderConfig.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html#Hi_NcParsers_Dependencys_Generic_SubProgramFolderConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SubProgramFolderConfig.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html#Hi_NcParsers_Dependencys_Generic_SubProgramFolderConfig_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.Reg + nameWithType: SubProgramFolderConfig.Reg - uid: Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.XName name: XName href: api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html#Hi_NcParsers_Dependencys_Generic_SubProgramFolderConfig_XName @@ -122310,6 +123783,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.Offsets nameWithType: ToolOffsetTable.Offsets +- uid: Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html#Hi_NcParsers_Dependencys_Generic_ToolOffsetTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ToolOffsetTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html#Hi_NcParsers_Dependencys_Generic_ToolOffsetTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.Reg + nameWithType: ToolOffsetTable.Reg - uid: Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.SetToolOffset(System.Int32,System.Double,System.Double,System.Double,System.Double) name: SetToolOffset(int, double, double, double, double) href: api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html#Hi_NcParsers_Dependencys_Generic_ToolOffsetTable_SetToolOffset_System_Int32_System_Double_System_Double_System_Double_System_Double_ @@ -122431,6 +123917,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.MakeXmlSource nameWithType: ToolingMcConfig.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html#Hi_NcParsers_Dependencys_Generic_ToolingMcConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ToolingMcConfig.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html#Hi_NcParsers_Dependencys_Generic_ToolingMcConfig_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.Reg + nameWithType: ToolingMcConfig.Reg - uid: Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.SetToolingPosition(System.String,System.Double) name: SetToolingPosition(string, double) href: api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html#Hi_NcParsers_Dependencys_Generic_ToolingMcConfig_SetToolingPosition_System_String_System_Double_ @@ -122714,6 +124213,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.ReferencePositionParamId nameWithType: HeidenhainParameterTable.ReferencePositionParamId +- uid: Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html#Hi_NcParsers_Dependencys_Heidenhain_HeidenhainParameterTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainParameterTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html#Hi_NcParsers_Dependencys_Heidenhain_HeidenhainParameterTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.Reg + nameWithType: HeidenhainParameterTable.Reg - uid: Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.StrokeLimitNegParamId name: StrokeLimitNegParamId href: api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html#Hi_NcParsers_Dependencys_Heidenhain_HeidenhainParameterTable_StrokeLimitNegParamId @@ -122903,6 +124415,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.HeidenhainDatumTable.MakeXmlSource nameWithType: HeidenhainDatumTable.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.HeidenhainDatumTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html#Hi_NcParsers_Dependencys_HeidenhainDatumTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.HeidenhainDatumTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.HeidenhainDatumTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainDatumTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.HeidenhainDatumTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html#Hi_NcParsers_Dependencys_HeidenhainDatumTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.HeidenhainDatumTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.HeidenhainDatumTable.Reg + nameWithType: HeidenhainDatumTable.Reg - uid: Hi.NcParsers.Dependencys.HeidenhainDatumTable.SetCoordinateOffset(System.String,Hi.Geom.Vec3d) name: SetCoordinateOffset(string, Vec3d) href: api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html#Hi_NcParsers_Dependencys_HeidenhainDatumTable_SetCoordinateOffset_System_String_Hi_Geom_Vec3d_ @@ -123799,6 +125324,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.MakeXmlSource nameWithType: SiemensFrameTable.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SiemensFrameTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.Reg + nameWithType: SiemensFrameTable.Reg - uid: Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.SetCoordinateOffset(System.String,Hi.Geom.Vec3d) name: SetCoordinateOffset(string, Vec3d) href: api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_SetCoordinateOffset_System_String_Hi_Geom_Vec3d_ @@ -124044,6 +125582,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.ReferencePositionParamId nameWithType: SiemensMachineDataTable.ReferencePositionParamId +- uid: Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensMachineDataTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SiemensMachineDataTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensMachineDataTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.Reg + nameWithType: SiemensMachineDataTable.Reg - uid: Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.StrokeLimitNegParamId name: StrokeLimitNegParamId href: api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensMachineDataTable_StrokeLimitNegParamId @@ -124429,6 +125980,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.ReferencePositionParamId nameWithType: SyntecParameterTable.ReferencePositionParamId +- uid: Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html#Hi_NcParsers_Dependencys_Syntec_SyntecParameterTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SyntecParameterTable.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html#Hi_NcParsers_Dependencys_Syntec_SyntecParameterTable_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.Reg + nameWithType: SyntecParameterTable.Reg - uid: Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.SetCoordinateOffset(System.String,Hi.Geom.Vec3d) name: SetCoordinateOffset(string, Vec3d) href: api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html#Hi_NcParsers_Dependencys_Syntec_SyntecParameterTable_SetCoordinateOffset_System_String_Hi_Geom_Vec3d_ @@ -124544,6 +126108,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.MakeXmlSource nameWithType: FileIndexCounterDependency.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FileIndexCounterDependency.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg + nameWithType: FileIndexCounterDependency.Reg - uid: Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reset name: Reset() href: api/Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset @@ -124713,6 +126290,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.PnToMc nameWithType: NcKinematicsDependency.PnToMc +- uid: Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html#Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcKinematicsDependency.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html#Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.Reg + nameWithType: NcKinematicsDependency.Reg - uid: Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.XName name: XName href: api/Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html#Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_XName @@ -124802,6 +126392,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.MakeXmlSource nameWithType: ProjectFolderDependency.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProjectFolderDependency.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg + nameWithType: ProjectFolderDependency.Reg - uid: Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.XName name: XName href: api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_XName @@ -124865,6 +126468,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.MakeXmlSource nameWithType: SegmenterDependency.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html#Hi_NcParsers_Dependencys_SystemWired_SegmenterDependency_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SegmenterDependency.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html#Hi_NcParsers_Dependencys_SystemWired_SegmenterDependency_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.Reg + nameWithType: SegmenterDependency.Reg - uid: Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.Segmenter name: Segmenter href: api/Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html#Hi_NcParsers_Dependencys_SystemWired_SegmenterDependency_Segmenter @@ -124954,6 +126570,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.MakeXmlSource nameWithType: SyntaxPieceLayerDependency.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html#Hi_NcParsers_Dependencys_SystemWired_SyntaxPieceLayerDependency_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SyntaxPieceLayerDependency.Reg(XFactory) +- uid: Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.Reg* + name: Reg + href: api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html#Hi_NcParsers_Dependencys_SystemWired_SyntaxPieceLayerDependency_Reg_ + commentId: Overload:Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.Reg + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.Reg + nameWithType: SyntaxPieceLayerDependency.Reg - uid: Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.XName name: XName href: api/Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html#Hi_NcParsers_Dependencys_SystemWired_SyntaxPieceLayerDependency_XName @@ -125258,6 +126887,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource nameWithType: LocalVariableLookup.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: LocalVariableLookup.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.Reg + nameWithType: LocalVariableLookup.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_XName @@ -125809,6 +127451,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource nameWithType: VolatileVariableLookup.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: VolatileVariableLookup.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Reg + nameWithType: VolatileVariableLookup.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_XName @@ -125920,6 +127575,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Name nameWithType: FanucGotoSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucGotoSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Reg + nameWithType: FanucGotoSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_XName @@ -126012,6 +127680,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Name nameWithType: FanucIfThenSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucIfThenSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Reg + nameWithType: FanucIfThenSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_XName @@ -126116,6 +127797,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Name nameWithType: FanucLocalVariableReadingSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucLocalVariableReadingSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Reg + nameWithType: FanucLocalVariableReadingSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_XName @@ -126220,6 +127914,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Name nameWithType: FanucMacroCallSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucMacroCallSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Reg + nameWithType: FanucMacroCallSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_XName @@ -126338,6 +128045,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Phase nameWithType: FanucModalMacroSyntax.Phase +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucModalMacroSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Reg + nameWithType: FanucModalMacroSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Setup name: Setup href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Setup @@ -126461,6 +128181,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Name nameWithType: FanucSystemControlVariableSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucSystemControlVariableSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Reg + nameWithType: FanucSystemControlVariableSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.SystemControlMax name: SystemControlMax href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_SystemControlMax @@ -126752,6 +128485,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.Name nameWithType: RetainedCommonVariableReadingSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_RetainedCommonVariableReadingSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RetainedCommonVariableReadingSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_RetainedCommonVariableReadingSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.Reg + nameWithType: RetainedCommonVariableReadingSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_RetainedCommonVariableReadingSyntax_XName @@ -126844,6 +128590,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.Name nameWithType: SubProgramCallSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramCallSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SubProgramCallSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramCallSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.Reg + nameWithType: SubProgramCallSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramCallSyntax_XName @@ -126949,6 +128708,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Name nameWithType: SubProgramReturnSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SubProgramReturnSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Reg + nameWithType: SubProgramReturnSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.XName name: XName href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax_XName @@ -127041,6 +128813,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.Name nameWithType: VariableEvaluatorSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html#Hi_NcParsers_EvaluationSyntaxs_VariableEvaluatorSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: VariableEvaluatorSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html#Hi_NcParsers_EvaluationSyntaxs_VariableEvaluatorSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.Reg + nameWithType: VariableEvaluatorSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.RuntimeVariableLookups name: RuntimeVariableLookups href: api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html#Hi_NcParsers_EvaluationSyntaxs_VariableEvaluatorSyntax_RuntimeVariableLookups @@ -127146,6 +128931,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.Name nameWithType: VolatileVariableReadingSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_VolatileVariableReadingSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: VolatileVariableReadingSyntax.Reg(XFactory) +- uid: Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_VolatileVariableReadingSyntax_Reg_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.Reg + nameWithType: VolatileVariableReadingSyntax.Reg - uid: Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.VolatileMax name: VolatileMax href: api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_VolatileVariableReadingSyntax_VolatileMax @@ -127364,6 +129162,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Initializers.HomeMcInitializer.Name nameWithType: HomeMcInitializer.Name +- uid: Hi.NcParsers.Initializers.HomeMcInitializer.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Initializers.HomeMcInitializer.html#Hi_NcParsers_Initializers_HomeMcInitializer_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Initializers.HomeMcInitializer.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Initializers.HomeMcInitializer.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HomeMcInitializer.Reg(XFactory) +- uid: Hi.NcParsers.Initializers.HomeMcInitializer.Reg* + name: Reg + href: api/Hi.NcParsers.Initializers.HomeMcInitializer.html#Hi_NcParsers_Initializers_HomeMcInitializer_Reg_ + commentId: Overload:Hi.NcParsers.Initializers.HomeMcInitializer.Reg + isSpec: "True" + fullName: Hi.NcParsers.Initializers.HomeMcInitializer.Reg + nameWithType: HomeMcInitializer.Reg - uid: Hi.NcParsers.Initializers.HomeMcInitializer.XName name: XName href: api/Hi.NcParsers.Initializers.HomeMcInitializer.html#Hi_NcParsers_Initializers_HomeMcInitializer_XName @@ -127543,6 +129354,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Initializers.StaticInitializer.Name nameWithType: StaticInitializer.Name +- uid: Hi.NcParsers.Initializers.StaticInitializer.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Initializers.StaticInitializer.html#Hi_NcParsers_Initializers_StaticInitializer_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Initializers.StaticInitializer.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Initializers.StaticInitializer.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StaticInitializer.Reg(XFactory) +- uid: Hi.NcParsers.Initializers.StaticInitializer.Reg* + name: Reg + href: api/Hi.NcParsers.Initializers.StaticInitializer.html#Hi_NcParsers_Initializers_StaticInitializer_Reg_ + commentId: Overload:Hi.NcParsers.Initializers.StaticInitializer.Reg + isSpec: "True" + fullName: Hi.NcParsers.Initializers.StaticInitializer.Reg + nameWithType: StaticInitializer.Reg - uid: Hi.NcParsers.Initializers.StaticInitializer.SiemensDefault name: SiemensDefault href: api/Hi.NcParsers.Initializers.StaticInitializer.html#Hi_NcParsers_Initializers_StaticInitializer_SiemensDefault @@ -127667,6 +129491,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.Name nameWithType: CleanupSyntax.Name +- uid: Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html#Hi_NcParsers_InspectionSyntaxs_CleanupSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CleanupSyntax.Reg(XFactory) +- uid: Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html#Hi_NcParsers_InspectionSyntaxs_CleanupSyntax_Reg_ + commentId: Overload:Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.Reg + nameWithType: CleanupSyntax.Reg - uid: Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.XName name: XName href: api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html#Hi_NcParsers_InspectionSyntaxs_CleanupSyntax_XName @@ -127756,6 +129593,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.Name nameWithType: ProgramXyzBackfillSyntax.Name +- uid: Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html#Hi_NcParsers_InspectionSyntaxs_ProgramXyzBackfillSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProgramXyzBackfillSyntax.Reg(XFactory) +- uid: Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html#Hi_NcParsers_InspectionSyntaxs_ProgramXyzBackfillSyntax_Reg_ + commentId: Overload:Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.Reg + nameWithType: ProgramXyzBackfillSyntax.Reg - uid: Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.XName name: XName href: api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html#Hi_NcParsers_InspectionSyntaxs_ProgramXyzBackfillSyntax_XName @@ -127870,6 +129720,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.Name nameWithType: SnapshotSyntax.Name +- uid: Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html#Hi_NcParsers_InspectionSyntaxs_SnapshotSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SnapshotSyntax.Reg(XFactory) +- uid: Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html#Hi_NcParsers_InspectionSyntaxs_SnapshotSyntax_Reg_ + commentId: Overload:Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.Reg + nameWithType: SnapshotSyntax.Reg - uid: Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.SectionName name: SectionName href: api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html#Hi_NcParsers_InspectionSyntaxs_SnapshotSyntax_SectionName @@ -127994,6 +129857,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.Name nameWithType: UnconsumedCheckSyntax.Name +- uid: Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html#Hi_NcParsers_InspectionSyntaxs_UnconsumedCheckSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: UnconsumedCheckSyntax.Reg(XFactory) +- uid: Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html#Hi_NcParsers_InspectionSyntaxs_UnconsumedCheckSyntax_Reg_ + commentId: Overload:Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.Reg + nameWithType: UnconsumedCheckSyntax.Reg - uid: Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.XName name: XName href: api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html#Hi_NcParsers_InspectionSyntaxs_UnconsumedCheckSyntax_XName @@ -130834,6 +132710,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.Name nameWithType: BackBoringSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html#Hi_NcParsers_LogicSyntaxs_BackBoringSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BackBoringSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html#Hi_NcParsers_LogicSyntaxs_BackBoringSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.Reg + nameWithType: BackBoringSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html#Hi_NcParsers_LogicSyntaxs_BackBoringSyntax_XName @@ -130944,6 +132833,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.Name nameWithType: BoringCycleSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_BoringCycleSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BoringCycleSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_BoringCycleSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.Reg + nameWithType: BoringCycleSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_BoringCycleSyntax_XName @@ -131021,6 +132923,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.Name nameWithType: CannedCycleResolveSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_CannedCycleResolveSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CannedCycleResolveSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_CannedCycleResolveSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.Reg + nameWithType: CannedCycleResolveSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_CannedCycleResolveSyntax_XName @@ -131113,6 +133028,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Name nameWithType: CircularMotionSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CircularMotionSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Reg + nameWithType: CircularMotionSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_XName @@ -131205,6 +133133,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.CoolantSyntax.Name nameWithType: CoolantSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.CoolantSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html#Hi_NcParsers_LogicSyntaxs_CoolantSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.CoolantSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.CoolantSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CoolantSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.CoolantSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html#Hi_NcParsers_LogicSyntaxs_CoolantSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.CoolantSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.CoolantSyntax.Reg + nameWithType: CoolantSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.CoolantSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html#Hi_NcParsers_LogicSyntaxs_CoolantSyntax_XName @@ -131383,6 +133324,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.Name nameWithType: DrillingCycleSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_DrillingCycleSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DrillingCycleSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_DrillingCycleSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.Reg + nameWithType: DrillingCycleSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_DrillingCycleSyntax_XName @@ -131475,6 +133429,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Name nameWithType: FanucPathSmoothingSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucPathSmoothingSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Reg + nameWithType: FanucPathSmoothingSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_XName @@ -131567,6 +133534,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.Name nameWithType: FeedrateSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html#Hi_NcParsers_LogicSyntaxs_FeedrateSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FeedrateSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html#Hi_NcParsers_LogicSyntaxs_FeedrateSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.Reg + nameWithType: FeedrateSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html#Hi_NcParsers_LogicSyntaxs_FeedrateSyntax_XName @@ -131659,6 +133639,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.Name nameWithType: FineBoringSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html#Hi_NcParsers_LogicSyntaxs_FineBoringSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FineBoringSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html#Hi_NcParsers_LogicSyntaxs_FineBoringSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.Reg + nameWithType: FineBoringSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html#Hi_NcParsers_LogicSyntaxs_FineBoringSyntax_XName @@ -131751,6 +133744,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.Name nameWithType: G43p4RtcpSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html#Hi_NcParsers_LogicSyntaxs_G43p4RtcpSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: G43p4RtcpSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html#Hi_NcParsers_LogicSyntaxs_G43p4RtcpSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.Reg + nameWithType: G43p4RtcpSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html#Hi_NcParsers_LogicSyntaxs_G43p4RtcpSyntax_XName @@ -131843,6 +133849,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.Name nameWithType: G53p1RotaryPositionSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html#Hi_NcParsers_LogicSyntaxs_G53p1RotaryPositionSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: G53p1RotaryPositionSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html#Hi_NcParsers_LogicSyntaxs_G53p1RotaryPositionSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.Reg + nameWithType: G53p1RotaryPositionSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html#Hi_NcParsers_LogicSyntaxs_G53p1RotaryPositionSyntax_XName @@ -131941,6 +133960,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.Name nameWithType: HeidenhainCoordinateOffsetSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_Heidenhain_HeidenhainCoordinateOffsetSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainCoordinateOffsetSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_Heidenhain_HeidenhainCoordinateOffsetSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.Reg + nameWithType: HeidenhainCoordinateOffsetSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_Heidenhain_HeidenhainCoordinateOffsetSyntax_XName @@ -132033,6 +134065,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.Name nameWithType: HighSpeedPeckCycleSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_HighSpeedPeckCycleSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HighSpeedPeckCycleSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_HighSpeedPeckCycleSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.Reg + nameWithType: HighSpeedPeckCycleSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_HighSpeedPeckCycleSyntax_XName @@ -132138,6 +134183,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Name nameWithType: IncrementalResolveSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IncrementalResolveSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Reg + nameWithType: IncrementalResolveSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.WorkingPathList name: WorkingPathList href: api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_WorkingPathList @@ -132243,6 +134301,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.Name nameWithType: IsoCoordinateOffsetSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoCoordinateOffsetSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IsoCoordinateOffsetSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoCoordinateOffsetSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.Reg + nameWithType: IsoCoordinateOffsetSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoCoordinateOffsetSyntax_XName @@ -132335,6 +134406,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.Name nameWithType: IsoG68RotationSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoG68RotationSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IsoG68RotationSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoG68RotationSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.Reg + nameWithType: IsoG68RotationSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoG68RotationSyntax_XName @@ -132427,6 +134511,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.Name nameWithType: IsoG68p2TiltSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoG68p2TiltSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IsoG68p2TiltSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoG68p2TiltSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.Reg + nameWithType: IsoG68p2TiltSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoG68p2TiltSyntax_XName @@ -132519,6 +134616,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.Name nameWithType: IsoLocalCoordinateOffsetSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoLocalCoordinateOffsetSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IsoLocalCoordinateOffsetSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoLocalCoordinateOffsetSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.Reg + nameWithType: IsoLocalCoordinateOffsetSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.TransformSource name: TransformSource href: api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_IsoLocalCoordinateOffsetSyntax_TransformSource @@ -132617,6 +134727,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.Name nameWithType: LinearMotionSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_LinearMotionSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: LinearMotionSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_LinearMotionSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.Reg + nameWithType: LinearMotionSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_LinearMotionSyntax_XName @@ -132709,6 +134832,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Name nameWithType: MachineCoordSelectSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachineCoordSelectSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg + nameWithType: MachineCoordSelectSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_XName @@ -132801,6 +134937,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Name nameWithType: McAbcCyclicPathSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: McAbcCyclicPathSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Reg + nameWithType: McAbcCyclicPathSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_XName @@ -132865,6 +135014,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.McAbcSyntax.Name nameWithType: McAbcSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.McAbcSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.McAbcSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.McAbcSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: McAbcSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.McAbcSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.McAbcSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.McAbcSyntax.Reg + nameWithType: McAbcSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.McAbcSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcSyntax_XName @@ -132929,6 +135091,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.Name nameWithType: McAbcXyzFallbackSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcXyzFallbackSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: McAbcXyzFallbackSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcXyzFallbackSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.Reg + nameWithType: McAbcXyzFallbackSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html#Hi_NcParsers_LogicSyntaxs_McAbcXyzFallbackSyntax_XName @@ -132993,6 +135168,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.McXyzSyntax.Name nameWithType: McXyzSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.McXyzSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html#Hi_NcParsers_LogicSyntaxs_McXyzSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.McXyzSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.McXyzSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: McXyzSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.McXyzSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html#Hi_NcParsers_LogicSyntaxs_McXyzSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.McXyzSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.McXyzSyntax.Reg + nameWithType: McXyzSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.McXyzSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html#Hi_NcParsers_LogicSyntaxs_McXyzSyntax_XName @@ -133085,6 +135273,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.Name nameWithType: PeckDrillingCycleSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_PeckDrillingCycleSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PeckDrillingCycleSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_PeckDrillingCycleSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.Reg + nameWithType: PeckDrillingCycleSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_PeckDrillingCycleSyntax_XName @@ -133177,6 +135378,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.Name nameWithType: PivotTransformationSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html#Hi_NcParsers_LogicSyntaxs_PivotTransformationSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PivotTransformationSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html#Hi_NcParsers_LogicSyntaxs_PivotTransformationSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.Reg + nameWithType: PivotTransformationSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html#Hi_NcParsers_LogicSyntaxs_PivotTransformationSyntax_XName @@ -133267,6 +135481,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.Name nameWithType: PlaneSelectSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_PlaneSelectSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PlaneSelectSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_PlaneSelectSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.Reg + nameWithType: PlaneSelectSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_PlaneSelectSyntax_XName @@ -133344,6 +135571,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.PositioningSyntax.Name nameWithType: PositioningSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.PositioningSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html#Hi_NcParsers_LogicSyntaxs_PositioningSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.PositioningSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.PositioningSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PositioningSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.PositioningSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html#Hi_NcParsers_LogicSyntaxs_PositioningSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.PositioningSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.PositioningSyntax.Reg + nameWithType: PositioningSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.PositioningSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html#Hi_NcParsers_LogicSyntaxs_PositioningSyntax_XName @@ -133436,6 +135676,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.Name nameWithType: ProgramEndCleanSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramEndCleanSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProgramEndCleanSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramEndCleanSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.Reg + nameWithType: ProgramEndCleanSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramEndCleanSyntax_XName @@ -133528,6 +135781,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.Name nameWithType: ProgramEndSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramEndSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProgramEndSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramEndSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.Reg + nameWithType: ProgramEndSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramEndSyntax_XName @@ -133620,6 +135886,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.Name nameWithType: ProgramStopSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramStopSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProgramStopSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramStopSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.Reg + nameWithType: ProgramStopSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramStopSyntax_XName @@ -133725,6 +136004,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.Name nameWithType: ProgramXyzSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ProgramXyzSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.Reg + nameWithType: ProgramXyzSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.WorkingPathList name: WorkingPathList href: api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzSyntax_WorkingPathList @@ -133990,6 +136282,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Name nameWithType: ReferenceReturnSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ReferenceReturnSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Reg + nameWithType: ReferenceReturnSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_XName @@ -134123,6 +136428,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.Name nameWithType: SiemensCoordinateOffsetSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_Siemens_SiemensCoordinateOffsetSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SiemensCoordinateOffsetSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_Siemens_SiemensCoordinateOffsetSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.Reg + nameWithType: SiemensCoordinateOffsetSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_Siemens_SiemensCoordinateOffsetSyntax_XName @@ -134215,6 +136533,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.Name nameWithType: SpindleSpeedSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html#Hi_NcParsers_LogicSyntaxs_SpindleSpeedSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SpindleSpeedSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html#Hi_NcParsers_LogicSyntaxs_SpindleSpeedSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.Reg + nameWithType: SpindleSpeedSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html#Hi_NcParsers_LogicSyntaxs_SpindleSpeedSyntax_XName @@ -134307,6 +136638,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.Name nameWithType: TappingCycleSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_TappingCycleSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TappingCycleSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_TappingCycleSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.Reg + nameWithType: TappingCycleSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html#Hi_NcParsers_LogicSyntaxs_TappingCycleSyntax_XName @@ -134492,6 +136836,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.Name nameWithType: ToolChangeSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolChangeSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ToolChangeSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolChangeSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.Reg + nameWithType: ToolChangeSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.SectionName name: SectionName href: api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolChangeSyntax_SectionName @@ -134602,6 +136959,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.Name nameWithType: ToolHeightOffsetSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolHeightOffsetSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ToolHeightOffsetSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolHeightOffsetSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.Reg + nameWithType: ToolHeightOffsetSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.ToolOrientationKey name: ToolOrientationKey href: api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolHeightOffsetSyntax_ToolOrientationKey @@ -134719,6 +137089,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.Name nameWithType: UnitModeSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html#Hi_NcParsers_LogicSyntaxs_UnitModeSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: UnitModeSyntax.Reg(XFactory) +- uid: Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html#Hi_NcParsers_LogicSyntaxs_UnitModeSyntax_Reg_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.Reg + nameWithType: UnitModeSyntax.Reg - uid: Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.XName name: XName href: api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html#Hi_NcParsers_LogicSyntaxs_UnitModeSyntax_XName @@ -135281,6 +137664,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.Name nameWithType: BlockSkipSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html#Hi_NcParsers_ParsingSyntaxs_BlockSkipSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BlockSkipSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html#Hi_NcParsers_ParsingSyntaxs_BlockSkipSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.Reg + nameWithType: BlockSkipSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html#Hi_NcParsers_ParsingSyntaxs_BlockSkipSyntax_XName @@ -135379,6 +137775,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.Name nameWithType: QuoteCommentSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html#Hi_NcParsers_ParsingSyntaxs_CommentSyntaxs_QuoteCommentSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: QuoteCommentSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html#Hi_NcParsers_ParsingSyntaxs_CommentSyntaxs_QuoteCommentSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.Reg + nameWithType: QuoteCommentSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html#Hi_NcParsers_ParsingSyntaxs_CommentSyntaxs_QuoteCommentSyntax_XName @@ -135471,6 +137880,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.Name nameWithType: TailCommentSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html#Hi_NcParsers_ParsingSyntaxs_CommentSyntaxs_TailCommentSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TailCommentSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html#Hi_NcParsers_ParsingSyntaxs_CommentSyntaxs_TailCommentSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.Reg + nameWithType: TailCommentSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.TailSymbol name: TailSymbol href: api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html#Hi_NcParsers_ParsingSyntaxs_CommentSyntaxs_TailCommentSyntax_TailSymbol @@ -135614,6 +138036,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.PreMarker nameWithType: CsScriptSyntax.PreMarker +- uid: Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html#Hi_NcParsers_ParsingSyntaxs_CsScriptSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CsScriptSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html#Hi_NcParsers_ParsingSyntaxs_CsScriptSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.Reg + nameWithType: CsScriptSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html#Hi_NcParsers_ParsingSyntaxs_CsScriptSyntax_XName @@ -135712,6 +138147,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Name nameWithType: FanucGotoParsingSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucGotoParsingSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Reg + nameWithType: FanucGotoParsingSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_XName @@ -135804,6 +138252,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Name nameWithType: FanucIfThenParsingSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucIfThenParsingSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Reg + nameWithType: FanucIfThenParsingSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_XName @@ -135896,6 +138357,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Name nameWithType: FanucProgramNumberSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FanucProgramNumberSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Reg + nameWithType: FanucProgramNumberSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_XName @@ -136014,6 +138488,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.FlagSyntax.Name nameWithType: FlagSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.FlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_FlagSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.FlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.FlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FlagSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.FlagSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_FlagSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.FlagSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.FlagSyntax.Reg + nameWithType: FlagSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.FlagSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_FlagSyntax_XName @@ -136061,6 +138548,19 @@ references: fullName.vb: Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.New nameWithType: FloatTagValueSyntax.FloatTagValueSyntax nameWithType.vb: FloatTagValueSyntax.New +- uid: Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_FloatTagValueSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FloatTagValueSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_FloatTagValueSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.Reg + nameWithType: FloatTagValueSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.ToFloat(System.String) name: ToFloat(string) href: api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_FloatTagValueSyntax_ToFloat_System_String_ @@ -136198,6 +138698,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.Name nameWithType: HeadIndexSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html#Hi_NcParsers_ParsingSyntaxs_HeadIndexSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeadIndexSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html#Hi_NcParsers_ParsingSyntaxs_HeadIndexSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.Reg + nameWithType: HeadIndexSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html#Hi_NcParsers_ParsingSyntaxs_HeadIndexSyntax_XName @@ -136302,6 +138815,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.Name nameWithType: HeidenhainDatumSettingSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_CyclDefSyntaxs_HeidenhainDatumSettingSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainDatumSettingSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_CyclDefSyntaxs_HeidenhainDatumSettingSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.Reg + nameWithType: HeidenhainDatumSettingSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.TagList name: TagList href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_CyclDefSyntaxs_HeidenhainDatumSettingSyntax_TagList @@ -136407,6 +138933,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.Name nameWithType: HeidenhainDatumShiftSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_CyclDefSyntaxs_HeidenhainDatumShiftSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainDatumShiftSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_CyclDefSyntaxs_HeidenhainDatumShiftSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.Reg + nameWithType: HeidenhainDatumShiftSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.TagList name: TagList href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_CyclDefSyntaxs_HeidenhainDatumShiftSyntax_TagList @@ -136518,6 +139057,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.Name nameWithType: HeidenhainBlkFormSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainBlkFormSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainBlkFormSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainBlkFormSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.Reg + nameWithType: HeidenhainBlkFormSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainBlkFormSyntax_XName @@ -136610,6 +139162,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.Name nameWithType: HeidenhainCallSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainCallSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainCallSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainCallSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.Reg + nameWithType: HeidenhainCallSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainCallSyntax_XName @@ -136708,6 +139273,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.Name nameWithType: HeidenhainCyclDefSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainCyclDefSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainCyclDefSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainCyclDefSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.Reg + nameWithType: HeidenhainCyclDefSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainCyclDefSyntax_XName @@ -136755,6 +139333,19 @@ references: fullName.vb: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.New nameWithType: HeidenhainFnAssignmentSyntax.HeidenhainFnAssignmentSyntax nameWithType.vb: HeidenhainFnAssignmentSyntax.New +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainFnAssignmentSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainFnAssignmentSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainFnAssignmentSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.Reg + nameWithType: HeidenhainFnAssignmentSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.TryStripPrefix(System.String@) name: TryStripPrefix(ref string) href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainFnAssignmentSyntax_TryStripPrefix_System_String__ @@ -136863,6 +139454,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.Name nameWithType: HeidenhainLSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainLSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainLSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainLSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.Reg + nameWithType: HeidenhainLSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.TagList name: TagList href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainLSyntax_TagList @@ -136968,6 +139572,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.Name nameWithType: HeidenhainLblSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainLblSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainLblSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainLblSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.Reg + nameWithType: HeidenhainLblSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainLblSyntax_XName @@ -137066,6 +139683,19 @@ references: commentId: F:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.ProjectedTagList fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.ProjectedTagList nameWithType: HeidenhainPlaneSyntax.ProjectedTagList +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainPlaneSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainPlaneSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainPlaneSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.Reg + nameWithType: HeidenhainPlaneSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.SpatialTagList name: SpatialTagList href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainPlaneSyntax_SpatialTagList @@ -137164,6 +139794,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.Name nameWithType: HeidenhainProgramSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainProgramSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainProgramSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainProgramSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.Reg + nameWithType: HeidenhainProgramSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainProgramSyntax_XName @@ -137256,6 +139899,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.Name nameWithType: HeidenhainToolCallSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainToolCallSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainToolCallSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainToolCallSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.Reg + nameWithType: HeidenhainToolCallSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainToolCallSyntax_XName @@ -137303,6 +139959,19 @@ references: fullName.vb: Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.New nameWithType: IntegerTagValueSyntax.IntegerTagValueSyntax nameWithType.vb: IntegerTagValueSyntax.New +- uid: Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_IntegerTagValueSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: IntegerTagValueSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_IntegerTagValueSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.Reg + nameWithType: IntegerTagValueSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.ToInteger(System.String) name: ToInteger(string) href: api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_IntegerTagValueSyntax_ToInteger_System_String_ @@ -137459,6 +140128,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.Name nameWithType: NamedVarAssignmentSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NamedVarAssignmentSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.Reg + nameWithType: NamedVarAssignmentSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.TerminateWords name: TerminateWords href: api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_TerminateWords @@ -137619,6 +140301,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.Name nameWithType: NumberedFlagSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_NumberedFlagSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NumberedFlagSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_NumberedFlagSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.Reg + nameWithType: NumberedFlagSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_NumberedFlagSyntax_XName @@ -137776,6 +140471,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.ParamPrefixes nameWithType: ParameterizedFlagSyntax.ParamPrefixes +- uid: Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_ParameterizedFlagSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ParameterizedFlagSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_ParameterizedFlagSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.Reg + nameWithType: ParameterizedFlagSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.TerminateWords name: TerminateWords href: api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html#Hi_NcParsers_ParsingSyntaxs_ParameterizedFlagSyntax_TerminateWords @@ -137879,6 +140587,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Name nameWithType: ShrinkIfNoDecimalPointSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html#Hi_NcParsers_ParsingSyntaxs_ShrinkIfNoDecimalPointSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ShrinkIfNoDecimalPointSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html#Hi_NcParsers_ParsingSyntaxs_ShrinkIfNoDecimalPointSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Reg + nameWithType: ShrinkIfNoDecimalPointSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.Tags name: Tags href: api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html#Hi_NcParsers_ParsingSyntaxs_ShrinkIfNoDecimalPointSyntax_Tags @@ -138010,6 +140731,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.Name nameWithType: TagAssignmentSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagAssignmentSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TagAssignmentSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagAssignmentSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.Reg + nameWithType: TagAssignmentSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.TagList name: TagList href: api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagAssignmentSyntax_TagList @@ -138186,6 +140920,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.Name nameWithType: TagValueSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagValueSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TagValueSyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagValueSyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.Reg + nameWithType: TagValueSyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.TagList name: TagList href: api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagValueSyntax_TagList @@ -138336,6 +141083,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.Name nameWithType: TapeBoundarySyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html#Hi_NcParsers_ParsingSyntaxs_TapeBoundarySyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TapeBoundarySyntax.Reg(XFactory) +- uid: Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.Reg* + name: Reg + href: api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html#Hi_NcParsers_ParsingSyntaxs_TapeBoundarySyntax_Reg_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.Reg + nameWithType: TapeBoundarySyntax.Reg - uid: Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.XName name: XName href: api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html#Hi_NcParsers_ParsingSyntaxs_TapeBoundarySyntax_XName @@ -138479,6 +141239,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.PostLogic nameWithType: ModalCarrySyntax.PostLogic +- uid: Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ModalCarrySyntax.Reg(XFactory) +- uid: Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Reg* + name: Reg + href: api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Reg_ + commentId: Overload:Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Reg + nameWithType: ModalCarrySyntax.Reg - uid: Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.TrackedKeys name: TrackedKeys href: api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_TrackedKeys @@ -138596,6 +141369,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.Name nameWithType: RadiusCompensationSyntax.Name +- uid: Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html#Hi_NcParsers_PostLogicSyntaxs_RadiusCompensationSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RadiusCompensationSyntax.Reg(XFactory) +- uid: Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html#Hi_NcParsers_PostLogicSyntaxs_RadiusCompensationSyntax_Reg_ + commentId: Overload:Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.Reg + nameWithType: RadiusCompensationSyntax.Reg - uid: Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.XName name: XName href: api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html#Hi_NcParsers_PostLogicSyntaxs_RadiusCompensationSyntax_XName @@ -138669,6 +141455,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Segmenters.HeidenhainSegmenter.Name nameWithType: HeidenhainSegmenter.Name +- uid: Hi.NcParsers.Segmenters.HeidenhainSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html#Hi_NcParsers_Segmenters_HeidenhainSegmenter_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Segmenters.HeidenhainSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Segmenters.HeidenhainSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HeidenhainSegmenter.Reg(XFactory) +- uid: Hi.NcParsers.Segmenters.HeidenhainSegmenter.Reg* + name: Reg + href: api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html#Hi_NcParsers_Segmenters_HeidenhainSegmenter_Reg_ + commentId: Overload:Hi.NcParsers.Segmenters.HeidenhainSegmenter.Reg + isSpec: "True" + fullName: Hi.NcParsers.Segmenters.HeidenhainSegmenter.Reg + nameWithType: HeidenhainSegmenter.Reg - uid: Hi.NcParsers.Segmenters.HeidenhainSegmenter.ToXElement name: ToXElement() href: api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html#Hi_NcParsers_Segmenters_HeidenhainSegmenter_ToXElement @@ -138812,6 +141611,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.Name nameWithType: InlineDelimiterSegmenter.Name +- uid: Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html#Hi_NcParsers_Segmenters_InlineDelimiterSegmenter_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: InlineDelimiterSegmenter.Reg(XFactory) +- uid: Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.Reg* + name: Reg + href: api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html#Hi_NcParsers_Segmenters_InlineDelimiterSegmenter_Reg_ + commentId: Overload:Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.Reg + isSpec: "True" + fullName: Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.Reg + nameWithType: InlineDelimiterSegmenter.Reg - uid: Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.ToXElement name: ToXElement() href: api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html#Hi_NcParsers_Segmenters_InlineDelimiterSegmenter_ToXElement @@ -138873,6 +141685,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Segmenters.SingleLineSegmenter.Name nameWithType: SingleLineSegmenter.Name +- uid: Hi.NcParsers.Segmenters.SingleLineSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html#Hi_NcParsers_Segmenters_SingleLineSegmenter_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Segmenters.SingleLineSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Segmenters.SingleLineSegmenter.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SingleLineSegmenter.Reg(XFactory) +- uid: Hi.NcParsers.Segmenters.SingleLineSegmenter.Reg* + name: Reg + href: api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html#Hi_NcParsers_Segmenters_SingleLineSegmenter_Reg_ + commentId: Overload:Hi.NcParsers.Segmenters.SingleLineSegmenter.Reg + isSpec: "True" + fullName: Hi.NcParsers.Segmenters.SingleLineSegmenter.Reg + nameWithType: SingleLineSegmenter.Reg - uid: Hi.NcParsers.Segmenters.SingleLineSegmenter.ToXElement name: ToXElement() href: api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html#Hi_NcParsers_Segmenters_SingleLineSegmenter_ToXElement @@ -138940,6 +141765,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.ClLinearMotionSemantic.MakeXmlSource nameWithType: ClLinearMotionSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.ClLinearMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html#Hi_NcParsers_Semantics_ClLinearMotionSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.ClLinearMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.ClLinearMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ClLinearMotionSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.ClLinearMotionSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html#Hi_NcParsers_Semantics_ClLinearMotionSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.ClLinearMotionSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.ClLinearMotionSemantic.Reg + nameWithType: ClLinearMotionSemantic.Reg - uid: Hi.NcParsers.Semantics.ClLinearMotionSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html#Hi_NcParsers_Semantics_ClLinearMotionSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139004,6 +141842,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.CompoundMotionSemantic.MakeXmlSource nameWithType: CompoundMotionSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.CompoundMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html#Hi_NcParsers_Semantics_CompoundMotionSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.CompoundMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.CompoundMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CompoundMotionSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.CompoundMotionSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html#Hi_NcParsers_Semantics_CompoundMotionSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.CompoundMotionSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.CompoundMotionSemantic.Reg + nameWithType: CompoundMotionSemantic.Reg - uid: Hi.NcParsers.Semantics.CompoundMotionSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html#Hi_NcParsers_Semantics_CompoundMotionSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139068,6 +141919,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.CoolantSemantic.MakeXmlSource nameWithType: CoolantSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.CoolantSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.CoolantSemantic.html#Hi_NcParsers_Semantics_CoolantSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.CoolantSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.CoolantSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CoolantSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.CoolantSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.CoolantSemantic.html#Hi_NcParsers_Semantics_CoolantSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.CoolantSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.CoolantSemantic.Reg + nameWithType: CoolantSemantic.Reg - uid: Hi.NcParsers.Semantics.CoolantSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.CoolantSemantic.html#Hi_NcParsers_Semantics_CoolantSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139132,6 +141996,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.CsScriptBeginSemantic.MakeXmlSource nameWithType: CsScriptBeginSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.CsScriptBeginSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html#Hi_NcParsers_Semantics_CsScriptBeginSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.CsScriptBeginSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.CsScriptBeginSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CsScriptBeginSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.CsScriptBeginSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html#Hi_NcParsers_Semantics_CsScriptBeginSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.CsScriptBeginSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.CsScriptBeginSemantic.Reg + nameWithType: CsScriptBeginSemantic.Reg - uid: Hi.NcParsers.Semantics.CsScriptBeginSemantic.ScriptKey name: ScriptKey href: api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html#Hi_NcParsers_Semantics_CsScriptBeginSemantic_ScriptKey @@ -139193,6 +142070,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.CsScriptEndSemantic.MakeXmlSource nameWithType: CsScriptEndSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.CsScriptEndSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html#Hi_NcParsers_Semantics_CsScriptEndSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.CsScriptEndSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.CsScriptEndSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CsScriptEndSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.CsScriptEndSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html#Hi_NcParsers_Semantics_CsScriptEndSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.CsScriptEndSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.CsScriptEndSemantic.Reg + nameWithType: CsScriptEndSemantic.Reg - uid: Hi.NcParsers.Semantics.CsScriptEndSemantic.ScriptKey name: ScriptKey href: api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html#Hi_NcParsers_Semantics_CsScriptEndSemantic_ScriptKey @@ -139366,6 +142256,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.MakeXmlSource nameWithType: MachineCoordinateStepSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html#Hi_NcParsers_Semantics_MachineCoordinateStepSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachineCoordinateStepSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html#Hi_NcParsers_Semantics_MachineCoordinateStepSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.Reg + nameWithType: MachineCoordinateStepSemantic.Reg - uid: Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html#Hi_NcParsers_Semantics_MachineCoordinateStepSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139430,6 +142333,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.McArcMotionSemantic.MakeXmlSource nameWithType: McArcMotionSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.McArcMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.McArcMotionSemantic.html#Hi_NcParsers_Semantics_McArcMotionSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.McArcMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.McArcMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: McArcMotionSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.McArcMotionSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.McArcMotionSemantic.html#Hi_NcParsers_Semantics_McArcMotionSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.McArcMotionSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.McArcMotionSemantic.Reg + nameWithType: McArcMotionSemantic.Reg - uid: Hi.NcParsers.Semantics.McArcMotionSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.McArcMotionSemantic.html#Hi_NcParsers_Semantics_McArcMotionSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139494,6 +142410,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.McLinearMotionSemantic.MakeXmlSource nameWithType: McLinearMotionSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.McLinearMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html#Hi_NcParsers_Semantics_McLinearMotionSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.McLinearMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.McLinearMotionSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: McLinearMotionSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.McLinearMotionSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html#Hi_NcParsers_Semantics_McLinearMotionSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.McLinearMotionSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.McLinearMotionSemantic.Reg + nameWithType: McLinearMotionSemantic.Reg - uid: Hi.NcParsers.Semantics.McLinearMotionSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html#Hi_NcParsers_Semantics_McLinearMotionSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139558,6 +142487,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.SpindleSpeedSemantic.MakeXmlSource nameWithType: SpindleSpeedSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.SpindleSpeedSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html#Hi_NcParsers_Semantics_SpindleSpeedSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.SpindleSpeedSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.SpindleSpeedSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SpindleSpeedSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.SpindleSpeedSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html#Hi_NcParsers_Semantics_SpindleSpeedSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.SpindleSpeedSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.SpindleSpeedSemantic.Reg + nameWithType: SpindleSpeedSemantic.Reg - uid: Hi.NcParsers.Semantics.SpindleSpeedSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html#Hi_NcParsers_Semantics_SpindleSpeedSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139622,6 +142564,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.MakeXmlSource nameWithType: StrokeLimitCheckSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html#Hi_NcParsers_Semantics_StrokeLimitCheckSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StrokeLimitCheckSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html#Hi_NcParsers_Semantics_StrokeLimitCheckSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.Reg + nameWithType: StrokeLimitCheckSemantic.Reg - uid: Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html#Hi_NcParsers_Semantics_StrokeLimitCheckSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -139686,6 +142641,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Semantics.ToolChangeSemantic.MakeXmlSource nameWithType: ToolChangeSemantic.MakeXmlSource +- uid: Hi.NcParsers.Semantics.ToolChangeSemantic.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Semantics.ToolChangeSemantic.html#Hi_NcParsers_Semantics_ToolChangeSemantic_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Semantics.ToolChangeSemantic.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Semantics.ToolChangeSemantic.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ToolChangeSemantic.Reg(XFactory) +- uid: Hi.NcParsers.Semantics.ToolChangeSemantic.Reg* + name: Reg + href: api/Hi.NcParsers.Semantics.ToolChangeSemantic.html#Hi_NcParsers_Semantics_ToolChangeSemantic_Reg_ + commentId: Overload:Hi.NcParsers.Semantics.ToolChangeSemantic.Reg + isSpec: "True" + fullName: Hi.NcParsers.Semantics.ToolChangeSemantic.Reg + nameWithType: ToolChangeSemantic.Reg - uid: Hi.NcParsers.Semantics.ToolChangeSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.Semantics.ToolChangeSemantic.html#Hi_NcParsers_Semantics_ToolChangeSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -140019,6 +142987,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.SoftNcRunner.NcSyntaxList nameWithType: SoftNcRunner.NcSyntaxList +- uid: Hi.NcParsers.SoftNcRunner.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.SoftNcRunner.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.SoftNcRunner.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SoftNcRunner.Reg(XFactory) +- uid: Hi.NcParsers.SoftNcRunner.Reg* + name: Reg + href: api/Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_Reg_ + commentId: Overload:Hi.NcParsers.SoftNcRunner.Reg + isSpec: "True" + fullName: Hi.NcParsers.SoftNcRunner.Reg + nameWithType: SoftNcRunner.Reg - uid: Hi.NcParsers.SoftNcRunner.RunControlLines(System.String,System.Collections.Generic.IEnumerable{System.String},Hi.MachiningProcs.MachiningSession,Hi.MachiningProcs.SessionProgress,System.Threading.CancellationToken) name: RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) href: api/Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_ @@ -140461,6 +143442,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.Syntaxs.BundleSyntax.Name nameWithType: BundleSyntax.Name +- uid: Hi.NcParsers.Syntaxs.BundleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.NcParsers.Syntaxs.BundleSyntax.html#Hi_NcParsers_Syntaxs_BundleSyntax_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.NcParsers.Syntaxs.BundleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.NcParsers.Syntaxs.BundleSyntax.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BundleSyntax.Reg(XFactory) +- uid: Hi.NcParsers.Syntaxs.BundleSyntax.Reg* + name: Reg + href: api/Hi.NcParsers.Syntaxs.BundleSyntax.html#Hi_NcParsers_Syntaxs_BundleSyntax_Reg_ + commentId: Overload:Hi.NcParsers.Syntaxs.BundleSyntax.Reg + isSpec: "True" + fullName: Hi.NcParsers.Syntaxs.BundleSyntax.Reg + nameWithType: BundleSyntax.Reg - uid: Hi.NcParsers.Syntaxs.BundleSyntax.SyntaxList name: SyntaxList href: api/Hi.NcParsers.Syntaxs.BundleSyntax.html#Hi_NcParsers_Syntaxs_BundleSyntax_SyntaxList @@ -144211,6 +147205,19 @@ references: isSpec: "True" fullName: Hi.Numerical.FilePlayers.CsvRunnerConfig.ParsingDictionary nameWithType: CsvRunnerConfig.ParsingDictionary +- uid: Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html#Hi_Numerical_FilePlayers_CsvRunnerConfig_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CsvRunnerConfig.Reg(XFactory) +- uid: Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg* + name: Reg + href: api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html#Hi_Numerical_FilePlayers_CsvRunnerConfig_Reg_ + commentId: Overload:Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg + isSpec: "True" + fullName: Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg + nameWithType: CsvRunnerConfig.Reg - uid: Hi.Numerical.FilePlayers.CsvRunnerConfig.SpindleDirectionTag name: SpindleDirectionTag href: api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html#Hi_Numerical_FilePlayers_CsvRunnerConfig_SpindleDirectionTag @@ -144839,6 +147846,19 @@ references: isSpec: "True" fullName: Hi.Numerical.HardNcEnv.RefNcLineOnInit nameWithType: HardNcEnv.RefNcLineOnInit +- uid: Hi.Numerical.HardNcEnv.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.HardNcEnv.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.HardNcEnv.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: HardNcEnv.Reg(XFactory) +- uid: Hi.Numerical.HardNcEnv.Reg* + name: Reg + href: api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_Reg_ + commentId: Overload:Hi.Numerical.HardNcEnv.Reg + isSpec: "True" + fullName: Hi.Numerical.HardNcEnv.Reg + nameWithType: HardNcEnv.Reg - uid: Hi.Numerical.HardNcEnv.StrokeLimitAbc_rad name: StrokeLimitAbc_rad href: api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitAbc_rad @@ -146609,6 +149629,19 @@ references: isSpec: "True" fullName: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.MinLinearResolution_mm nameWithType: FeedPerCycleMachiningMotionResolution.MinLinearResolution_mm +- uid: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FeedPerCycleMachiningMotionResolution_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FeedPerCycleMachiningMotionResolution.Reg(XFactory) +- uid: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.Reg* + name: Reg + href: api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FeedPerCycleMachiningMotionResolution_Reg_ + commentId: Overload:Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.Reg + isSpec: "True" + fullName: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.Reg + nameWithType: FeedPerCycleMachiningMotionResolution.Reg - uid: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.RotaryResolution_deg name: RotaryResolution_deg href: api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FeedPerCycleMachiningMotionResolution_RotaryResolution_deg @@ -146744,6 +149777,19 @@ references: isSpec: "True" fullName: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.MakeXmlSource nameWithType: FeedPerToothMachiningMotionResolution.MakeXmlSource +- uid: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FeedPerToothMachiningMotionResolution_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FeedPerToothMachiningMotionResolution.Reg(XFactory) +- uid: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.Reg* + name: Reg + href: api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FeedPerToothMachiningMotionResolution_Reg_ + commentId: Overload:Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.Reg + isSpec: "True" + fullName: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.Reg + nameWithType: FeedPerToothMachiningMotionResolution.Reg - uid: Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.RotaryResolution_deg name: RotaryResolution_deg href: api/Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FeedPerToothMachiningMotionResolution_RotaryResolution_deg @@ -146868,6 +149914,19 @@ references: isSpec: "True" fullName: Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.MakeXmlSource nameWithType: FixedMachiningMotionResolution.MakeXmlSource +- uid: Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FixedMachiningMotionResolution_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: FixedMachiningMotionResolution.Reg(XFactory) +- uid: Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.Reg* + name: Reg + href: api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FixedMachiningMotionResolution_Reg_ + commentId: Overload:Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.Reg + isSpec: "True" + fullName: Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.Reg + nameWithType: FixedMachiningMotionResolution.Reg - uid: Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.RotaryResolution_deg name: RotaryResolution_deg href: api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html#Hi_Numerical_MachiningMotionResolutionUtils_FixedMachiningMotionResolution_RotaryResolution_deg @@ -147088,6 +150147,19 @@ references: isSpec: "True" fullName: Hi.Numerical.MillingToolOffsetTable.MakeXmlSource nameWithType: MillingToolOffsetTable.MakeXmlSource +- uid: Hi.Numerical.MillingToolOffsetTable.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.MillingToolOffsetTable.html#Hi_Numerical_MillingToolOffsetTable_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.MillingToolOffsetTable.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.MillingToolOffsetTable.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MillingToolOffsetTable.Reg(XFactory) +- uid: Hi.Numerical.MillingToolOffsetTable.Reg* + name: Reg + href: api/Hi.Numerical.MillingToolOffsetTable.html#Hi_Numerical_MillingToolOffsetTable_Reg_ + commentId: Overload:Hi.Numerical.MillingToolOffsetTable.Reg + isSpec: "True" + fullName: Hi.Numerical.MillingToolOffsetTable.Reg + nameWithType: MillingToolOffsetTable.Reg - uid: Hi.Numerical.MillingToolOffsetTable.UpdateIdealMillingToolOffsetTableByToolHouse(Hi.Machining.MachiningToolHouse) name: UpdateIdealMillingToolOffsetTableByToolHouse(MachiningToolHouse) href: api/Hi.Numerical.MillingToolOffsetTable.html#Hi_Numerical_MillingToolOffsetTable_UpdateIdealMillingToolOffsetTableByToolHouse_Hi_Machining_MachiningToolHouse_ @@ -147219,6 +150291,19 @@ references: isSpec: "True" fullName: Hi.Numerical.MillingToolOffsetTableRow.RadialWear_mm nameWithType: MillingToolOffsetTableRow.RadialWear_mm +- uid: Hi.Numerical.MillingToolOffsetTableRow.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.MillingToolOffsetTableRow.html#Hi_Numerical_MillingToolOffsetTableRow_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.MillingToolOffsetTableRow.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.MillingToolOffsetTableRow.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MillingToolOffsetTableRow.Reg(XFactory) +- uid: Hi.Numerical.MillingToolOffsetTableRow.Reg* + name: Reg + href: api/Hi.Numerical.MillingToolOffsetTableRow.html#Hi_Numerical_MillingToolOffsetTableRow_Reg_ + commentId: Overload:Hi.Numerical.MillingToolOffsetTableRow.Reg + isSpec: "True" + fullName: Hi.Numerical.MillingToolOffsetTableRow.Reg + nameWithType: MillingToolOffsetTableRow.Reg - uid: Hi.Numerical.MillingToolOffsetTableRow.ToXElement name: ToXElement() href: api/Hi.Numerical.MillingToolOffsetTableRow.html#Hi_Numerical_MillingToolOffsetTableRow_ToXElement @@ -150768,6 +153853,19 @@ references: isSpec: "True" fullName: Hi.Numerical.StepSelectionUtils.BoundSelector.MakeXmlSource nameWithType: BoundSelector.MakeXmlSource +- uid: Hi.Numerical.StepSelectionUtils.BoundSelector.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.StepSelectionUtils.BoundSelector.html#Hi_Numerical_StepSelectionUtils_BoundSelector_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.StepSelectionUtils.BoundSelector.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.StepSelectionUtils.BoundSelector.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BoundSelector.Reg(XFactory) +- uid: Hi.Numerical.StepSelectionUtils.BoundSelector.Reg* + name: Reg + href: api/Hi.Numerical.StepSelectionUtils.BoundSelector.html#Hi_Numerical_StepSelectionUtils_BoundSelector_Reg_ + commentId: Overload:Hi.Numerical.StepSelectionUtils.BoundSelector.Reg + isSpec: "True" + fullName: Hi.Numerical.StepSelectionUtils.BoundSelector.Reg + nameWithType: BoundSelector.Reg - uid: Hi.Numerical.StepSelectionUtils.BoundSelector.Shift name: Shift href: api/Hi.Numerical.StepSelectionUtils.BoundSelector.html#Hi_Numerical_StepSelectionUtils_BoundSelector_Shift @@ -150936,6 +154034,19 @@ references: isSpec: "True" fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorHost.MakeXmlSource nameWithType: BoundSelectorHost.MakeXmlSource +- uid: Hi.Numerical.StepSelectionUtils.BoundSelectorHost.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html#Hi_Numerical_StepSelectionUtils_BoundSelectorHost_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.StepSelectionUtils.BoundSelectorHost.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorHost.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BoundSelectorHost.Reg(XFactory) +- uid: Hi.Numerical.StepSelectionUtils.BoundSelectorHost.Reg* + name: Reg + href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html#Hi_Numerical_StepSelectionUtils_BoundSelectorHost_Reg_ + commentId: Overload:Hi.Numerical.StepSelectionUtils.BoundSelectorHost.Reg + isSpec: "True" + fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorHost.Reg + nameWithType: BoundSelectorHost.Reg - uid: Hi.Numerical.StepSelectionUtils.BoundSelectorHost.XName name: XName href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html#Hi_Numerical_StepSelectionUtils_BoundSelectorHost_XName @@ -151056,6 +154167,19 @@ references: isSpec: "True" fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorPair.MakeXmlSource nameWithType: BoundSelectorPair.MakeXmlSource +- uid: Hi.Numerical.StepSelectionUtils.BoundSelectorPair.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html#Hi_Numerical_StepSelectionUtils_BoundSelectorPair_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.StepSelectionUtils.BoundSelectorPair.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorPair.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BoundSelectorPair.Reg(XFactory) +- uid: Hi.Numerical.StepSelectionUtils.BoundSelectorPair.Reg* + name: Reg + href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html#Hi_Numerical_StepSelectionUtils_BoundSelectorPair_Reg_ + commentId: Overload:Hi.Numerical.StepSelectionUtils.BoundSelectorPair.Reg + isSpec: "True" + fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorPair.Reg + nameWithType: BoundSelectorPair.Reg - uid: Hi.Numerical.StepSelectionUtils.BoundSelectorPair.XName name: XName href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html#Hi_Numerical_StepSelectionUtils_BoundSelectorPair_XName @@ -151158,6 +154282,19 @@ references: isSpec: "True" fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.MakeXmlSource nameWithType: BoundSelectorStepSectionBundle.MakeXmlSource +- uid: Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html#Hi_Numerical_StepSelectionUtils_BoundSelectorStepSectionBundle_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: BoundSelectorStepSectionBundle.Reg(XFactory) +- uid: Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.Reg* + name: Reg + href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html#Hi_Numerical_StepSelectionUtils_BoundSelectorStepSectionBundle_Reg_ + commentId: Overload:Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.Reg + isSpec: "True" + fullName: Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.Reg + nameWithType: BoundSelectorStepSectionBundle.Reg - uid: Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.XName name: XName href: api/Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html#Hi_Numerical_StepSelectionUtils_BoundSelectorStepSectionBundle_XName @@ -151269,6 +154406,19 @@ references: isSpec: "True" fullName: Hi.Numerical.StepSelectionUtils.DistanceShift.MakeXmlSource nameWithType: DistanceShift.MakeXmlSource +- uid: Hi.Numerical.StepSelectionUtils.DistanceShift.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.StepSelectionUtils.DistanceShift.html#Hi_Numerical_StepSelectionUtils_DistanceShift_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.StepSelectionUtils.DistanceShift.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.StepSelectionUtils.DistanceShift.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DistanceShift.Reg(XFactory) +- uid: Hi.Numerical.StepSelectionUtils.DistanceShift.Reg* + name: Reg + href: api/Hi.Numerical.StepSelectionUtils.DistanceShift.html#Hi_Numerical_StepSelectionUtils_DistanceShift_Reg_ + commentId: Overload:Hi.Numerical.StepSelectionUtils.DistanceShift.Reg + isSpec: "True" + fullName: Hi.Numerical.StepSelectionUtils.DistanceShift.Reg + nameWithType: DistanceShift.Reg - uid: Hi.Numerical.StepSelectionUtils.DistanceShift.XName name: XName href: api/Hi.Numerical.StepSelectionUtils.DistanceShift.html#Hi_Numerical_StepSelectionUtils_DistanceShift_XName @@ -151383,6 +154533,19 @@ references: isSpec: "True" fullName: Hi.Numerical.StepSelectionUtils.TimeShift.MakeXmlSource nameWithType: TimeShift.MakeXmlSource +- uid: Hi.Numerical.StepSelectionUtils.TimeShift.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.StepSelectionUtils.TimeShift.html#Hi_Numerical_StepSelectionUtils_TimeShift_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.StepSelectionUtils.TimeShift.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.StepSelectionUtils.TimeShift.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: TimeShift.Reg(XFactory) +- uid: Hi.Numerical.StepSelectionUtils.TimeShift.Reg* + name: Reg + href: api/Hi.Numerical.StepSelectionUtils.TimeShift.html#Hi_Numerical_StepSelectionUtils_TimeShift_Reg_ + commentId: Overload:Hi.Numerical.StepSelectionUtils.TimeShift.Reg + isSpec: "True" + fullName: Hi.Numerical.StepSelectionUtils.TimeShift.Reg + nameWithType: TimeShift.Reg - uid: Hi.Numerical.StepSelectionUtils.TimeShift.ShiftTimeSpan name: ShiftTimeSpan href: api/Hi.Numerical.StepSelectionUtils.TimeShift.html#Hi_Numerical_StepSelectionUtils_TimeShift_ShiftTimeSpan @@ -152013,6 +155176,19 @@ references: isSpec: "True" fullName: Hi.Numerical.Xyzabc.CodeXyzabcChain.McTransformers nameWithType: CodeXyzabcChain.McTransformers +- uid: Hi.Numerical.Xyzabc.CodeXyzabcChain.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html#Hi_Numerical_Xyzabc_CodeXyzabcChain_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.Xyzabc.CodeXyzabcChain.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.Xyzabc.CodeXyzabcChain.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CodeXyzabcChain.Reg(XFactory) +- uid: Hi.Numerical.Xyzabc.CodeXyzabcChain.Reg* + name: Reg + href: api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html#Hi_Numerical_Xyzabc_CodeXyzabcChain_Reg_ + commentId: Overload:Hi.Numerical.Xyzabc.CodeXyzabcChain.Reg + isSpec: "True" + fullName: Hi.Numerical.Xyzabc.CodeXyzabcChain.Reg + nameWithType: CodeXyzabcChain.Reg - uid: Hi.Numerical.Xyzabc.CodeXyzabcChain.RootAnchor name: RootAnchor href: api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html#Hi_Numerical_Xyzabc_CodeXyzabcChain_RootAnchor @@ -152427,6 +155603,19 @@ references: isSpec: "True" fullName: Hi.Numerical.Xyzabc.GeneralXyzabcChain.McTransformers nameWithType: GeneralXyzabcChain.McTransformers +- uid: Hi.Numerical.Xyzabc.GeneralXyzabcChain.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html#Hi_Numerical_Xyzabc_GeneralXyzabcChain_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Numerical.Xyzabc.GeneralXyzabcChain.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Numerical.Xyzabc.GeneralXyzabcChain.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GeneralXyzabcChain.Reg(XFactory) +- uid: Hi.Numerical.Xyzabc.GeneralXyzabcChain.Reg* + name: Reg + href: api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html#Hi_Numerical_Xyzabc_GeneralXyzabcChain_Reg_ + commentId: Overload:Hi.Numerical.Xyzabc.GeneralXyzabcChain.Reg + isSpec: "True" + fullName: Hi.Numerical.Xyzabc.GeneralXyzabcChain.Reg + nameWithType: GeneralXyzabcChain.Reg - uid: Hi.Numerical.Xyzabc.GeneralXyzabcChain.TableBuckleTransformer name: TableBuckleTransformer href: api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html#Hi_Numerical_Xyzabc_GeneralXyzabcChain_TableBuckleTransformer @@ -156548,6 +159737,19 @@ references: isSpec: "True" fullName: Hi.Physics.CoatingMaterial.PreferedThickness_um nameWithType: CoatingMaterial.PreferedThickness_um +- uid: Hi.Physics.CoatingMaterial.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Physics.CoatingMaterial.html#Hi_Physics_CoatingMaterial_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Physics.CoatingMaterial.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Physics.CoatingMaterial.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CoatingMaterial.Reg(XFactory) +- uid: Hi.Physics.CoatingMaterial.Reg* + name: Reg + href: api/Hi.Physics.CoatingMaterial.html#Hi_Physics_CoatingMaterial_Reg_ + commentId: Overload:Hi.Physics.CoatingMaterial.Reg + isSpec: "True" + fullName: Hi.Physics.CoatingMaterial.Reg + nameWithType: CoatingMaterial.Reg - uid: Hi.Physics.CoatingMaterial.ToXElement name: ToXElement() href: api/Hi.Physics.CoatingMaterial.html#Hi_Physics_CoatingMaterial_ToXElement @@ -156728,6 +159930,19 @@ references: isSpec: "True" fullName: Hi.Physics.CoolantHeatCondition.OffConvectionCoefficient_Wdm2K nameWithType: CoolantHeatCondition.OffConvectionCoefficient_Wdm2K +- uid: Hi.Physics.CoolantHeatCondition.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Physics.CoolantHeatCondition.html#Hi_Physics_CoolantHeatCondition_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Physics.CoolantHeatCondition.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Physics.CoolantHeatCondition.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CoolantHeatCondition.Reg(XFactory) +- uid: Hi.Physics.CoolantHeatCondition.Reg* + name: Reg + href: api/Hi.Physics.CoolantHeatCondition.html#Hi_Physics_CoolantHeatCondition_Reg_ + commentId: Overload:Hi.Physics.CoolantHeatCondition.Reg + isSpec: "True" + fullName: Hi.Physics.CoolantHeatCondition.Reg + nameWithType: CoolantHeatCondition.Reg - uid: Hi.Physics.CoolantHeatCondition.XName name: XName href: api/Hi.Physics.CoolantHeatCondition.html#Hi_Physics_CoolantHeatCondition_XName @@ -156985,6 +160200,19 @@ references: isSpec: "True" fullName: Hi.Physics.CutterMaterial.PoissonRatio nameWithType: CutterMaterial.PoissonRatio +- uid: Hi.Physics.CutterMaterial.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Physics.CutterMaterial.html#Hi_Physics_CutterMaterial_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Physics.CutterMaterial.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Physics.CutterMaterial.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: CutterMaterial.Reg(XFactory) +- uid: Hi.Physics.CutterMaterial.Reg* + name: Reg + href: api/Hi.Physics.CutterMaterial.html#Hi_Physics_CutterMaterial_Reg_ + commentId: Overload:Hi.Physics.CutterMaterial.Reg + isSpec: "True" + fullName: Hi.Physics.CutterMaterial.Reg + nameWithType: CutterMaterial.Reg - uid: Hi.Physics.CutterMaterial.TemperatureVsHardnessCurve name: TemperatureVsHardnessCurve href: api/Hi.Physics.CutterMaterial.html#Hi_Physics_CutterMaterial_TemperatureVsHardnessCurve @@ -157982,6 +161210,19 @@ references: isSpec: "True" fullName: Hi.Physics.StructureMaterial.PoissonRatio nameWithType: StructureMaterial.PoissonRatio +- uid: Hi.Physics.StructureMaterial.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Physics.StructureMaterial.html#Hi_Physics_StructureMaterial_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Physics.StructureMaterial.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Physics.StructureMaterial.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: StructureMaterial.Reg(XFactory) +- uid: Hi.Physics.StructureMaterial.Reg* + name: Reg + href: api/Hi.Physics.StructureMaterial.html#Hi_Physics_StructureMaterial_Reg_ + commentId: Overload:Hi.Physics.StructureMaterial.Reg + isSpec: "True" + fullName: Hi.Physics.StructureMaterial.Reg + nameWithType: StructureMaterial.Reg - uid: Hi.Physics.StructureMaterial.TensileStrength_MPa name: TensileStrength_MPa href: api/Hi.Physics.StructureMaterial.html#Hi_Physics_StructureMaterial_TensileStrength_MPa @@ -158283,6 +161524,19 @@ references: isSpec: "True" fullName: Hi.Physics.ThermalLayer1D.Material nameWithType: ThermalLayer1D.Material +- uid: Hi.Physics.ThermalLayer1D.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Physics.ThermalLayer1D.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Physics.ThermalLayer1D.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ThermalLayer1D.Reg(XFactory) +- uid: Hi.Physics.ThermalLayer1D.Reg* + name: Reg + href: api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_Reg_ + commentId: Overload:Hi.Physics.ThermalLayer1D.Reg + isSpec: "True" + fullName: Hi.Physics.ThermalLayer1D.Reg + nameWithType: ThermalLayer1D.Reg - uid: Hi.Physics.ThermalLayer1D.XName name: XName href: api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_XName @@ -158877,6 +162131,19 @@ references: isSpec: "True" fullName: Hi.Physics.WorkpieceMaterial.PreferredFileName nameWithType: WorkpieceMaterial.PreferredFileName +- uid: Hi.Physics.WorkpieceMaterial.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.Physics.WorkpieceMaterial.html#Hi_Physics_WorkpieceMaterial_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.Physics.WorkpieceMaterial.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.Physics.WorkpieceMaterial.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: WorkpieceMaterial.Reg(XFactory) +- uid: Hi.Physics.WorkpieceMaterial.Reg* + name: Reg + href: api/Hi.Physics.WorkpieceMaterial.html#Hi_Physics_WorkpieceMaterial_Reg_ + commentId: Overload:Hi.Physics.WorkpieceMaterial.Reg + isSpec: "True" + fullName: Hi.Physics.WorkpieceMaterial.Reg + nameWithType: WorkpieceMaterial.Reg - uid: Hi.Physics.WorkpieceMaterial.TensileYieldStrength_MPa name: TensileYieldStrength_MPa href: api/Hi.Physics.WorkpieceMaterial.html#Hi_Physics_WorkpieceMaterial_TensileYieldStrength_MPa @@ -158994,6 +162261,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.EnablingWrapper.MakeXmlSource nameWithType: EnablingWrapper.MakeXmlSource +- uid: Hi.SessionCommands.EnablingWrapper.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.EnablingWrapper.html#Hi_SessionCommands_EnablingWrapper_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.EnablingWrapper.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.EnablingWrapper.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: EnablingWrapper.Reg(XFactory) +- uid: Hi.SessionCommands.EnablingWrapper.Reg* + name: Reg + href: api/Hi.SessionCommands.EnablingWrapper.html#Hi_SessionCommands_EnablingWrapper_Reg_ + commentId: Overload:Hi.SessionCommands.EnablingWrapper.Reg + isSpec: "True" + fullName: Hi.SessionCommands.EnablingWrapper.Reg + nameWithType: EnablingWrapper.Reg - uid: Hi.SessionCommands.EnablingWrapper.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.EnablingWrapper.html#Hi_SessionCommands_EnablingWrapper_Run_Hi_MachiningProcs_SessionShell_ @@ -159089,6 +162369,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.GeomDiffCommand.MakeXmlSource nameWithType: GeomDiffCommand.MakeXmlSource +- uid: Hi.SessionCommands.GeomDiffCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.GeomDiffCommand.html#Hi_SessionCommands_GeomDiffCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.GeomDiffCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.GeomDiffCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: GeomDiffCommand.Reg(XFactory) +- uid: Hi.SessionCommands.GeomDiffCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.GeomDiffCommand.html#Hi_SessionCommands_GeomDiffCommand_Reg_ + commentId: Overload:Hi.SessionCommands.GeomDiffCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.GeomDiffCommand.Reg + nameWithType: GeomDiffCommand.Reg - uid: Hi.SessionCommands.GeomDiffCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.GeomDiffCommand.html#Hi_SessionCommands_GeomDiffCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -159235,6 +162528,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.ListCommand.MakeXmlSource nameWithType: ListCommand.MakeXmlSource +- uid: Hi.SessionCommands.ListCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.ListCommand.html#Hi_SessionCommands_ListCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.ListCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.ListCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ListCommand.Reg(XFactory) +- uid: Hi.SessionCommands.ListCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.ListCommand.html#Hi_SessionCommands_ListCommand_Reg_ + commentId: Overload:Hi.SessionCommands.ListCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.ListCommand.Reg + nameWithType: ListCommand.Reg - uid: Hi.SessionCommands.ListCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.ListCommand.html#Hi_SessionCommands_ListCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -159324,6 +162630,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.MachiningMotionResolutionCommand.MakeXmlSource nameWithType: MachiningMotionResolutionCommand.MakeXmlSource +- uid: Hi.SessionCommands.MachiningMotionResolutionCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.MachiningMotionResolutionCommand.html#Hi_SessionCommands_MachiningMotionResolutionCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.MachiningMotionResolutionCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.MachiningMotionResolutionCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningMotionResolutionCommand.Reg(XFactory) +- uid: Hi.SessionCommands.MachiningMotionResolutionCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.MachiningMotionResolutionCommand.html#Hi_SessionCommands_MachiningMotionResolutionCommand_Reg_ + commentId: Overload:Hi.SessionCommands.MachiningMotionResolutionCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.MachiningMotionResolutionCommand.Reg + nameWithType: MachiningMotionResolutionCommand.Reg - uid: Hi.SessionCommands.MachiningMotionResolutionCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.MachiningMotionResolutionCommand.html#Hi_SessionCommands_MachiningMotionResolutionCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -159435,6 +162754,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.NcCodeCommand.NcText nameWithType: NcCodeCommand.NcText +- uid: Hi.SessionCommands.NcCodeCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.NcCodeCommand.html#Hi_SessionCommands_NcCodeCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.NcCodeCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.NcCodeCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcCodeCommand.Reg(XFactory) +- uid: Hi.SessionCommands.NcCodeCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.NcCodeCommand.html#Hi_SessionCommands_NcCodeCommand_Reg_ + commentId: Overload:Hi.SessionCommands.NcCodeCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.NcCodeCommand.Reg + nameWithType: NcCodeCommand.Reg - uid: Hi.SessionCommands.NcCodeCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.NcCodeCommand.html#Hi_SessionCommands_NcCodeCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -159559,6 +162891,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.NcFileCommand.NcFile nameWithType: NcFileCommand.NcFile +- uid: Hi.SessionCommands.NcFileCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.NcFileCommand.html#Hi_SessionCommands_NcFileCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.NcFileCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.NcFileCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcFileCommand.Reg(XFactory) +- uid: Hi.SessionCommands.NcFileCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.NcFileCommand.html#Hi_SessionCommands_NcFileCommand_Reg_ + commentId: Overload:Hi.SessionCommands.NcFileCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.NcFileCommand.Reg + nameWithType: NcFileCommand.Reg - uid: Hi.SessionCommands.NcFileCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.NcFileCommand.html#Hi_SessionCommands_NcFileCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -159648,6 +162993,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.NcFileListCommand.NcFileList nameWithType: NcFileListCommand.NcFileList +- uid: Hi.SessionCommands.NcFileListCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.NcFileListCommand.html#Hi_SessionCommands_NcFileListCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.NcFileListCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.NcFileListCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcFileListCommand.Reg(XFactory) +- uid: Hi.SessionCommands.NcFileListCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.NcFileListCommand.html#Hi_SessionCommands_NcFileListCommand_Reg_ + commentId: Overload:Hi.SessionCommands.NcFileListCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.NcFileListCommand.Reg + nameWithType: NcFileListCommand.Reg - uid: Hi.SessionCommands.NcFileListCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.NcFileListCommand.html#Hi_SessionCommands_NcFileListCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -159750,6 +163108,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.NcOptOptionCommand.NcOptOption nameWithType: NcOptOptionCommand.NcOptOption +- uid: Hi.SessionCommands.NcOptOptionCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.NcOptOptionCommand.html#Hi_SessionCommands_NcOptOptionCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.NcOptOptionCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.NcOptOptionCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: NcOptOptionCommand.Reg(XFactory) +- uid: Hi.SessionCommands.NcOptOptionCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.NcOptOptionCommand.html#Hi_SessionCommands_NcOptOptionCommand_Reg_ + commentId: Overload:Hi.SessionCommands.NcOptOptionCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.NcOptOptionCommand.Reg + nameWithType: NcOptOptionCommand.Reg - uid: Hi.SessionCommands.NcOptOptionCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.NcOptOptionCommand.html#Hi_SessionCommands_NcOptOptionCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -159826,6 +163197,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.OptimizeToFilesCommand.MakeXmlSource nameWithType: OptimizeToFilesCommand.MakeXmlSource +- uid: Hi.SessionCommands.OptimizeToFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.OptimizeToFilesCommand.html#Hi_SessionCommands_OptimizeToFilesCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.OptimizeToFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.OptimizeToFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: OptimizeToFilesCommand.Reg(XFactory) +- uid: Hi.SessionCommands.OptimizeToFilesCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.OptimizeToFilesCommand.html#Hi_SessionCommands_OptimizeToFilesCommand_Reg_ + commentId: Overload:Hi.SessionCommands.OptimizeToFilesCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.OptimizeToFilesCommand.Reg + nameWithType: OptimizeToFilesCommand.Reg - uid: Hi.SessionCommands.OptimizeToFilesCommand.RelFileTemplate name: RelFileTemplate href: api/Hi.SessionCommands.OptimizeToFilesCommand.html#Hi_SessionCommands_OptimizeToFilesCommand_RelFileTemplate @@ -160019,6 +163403,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.PostExecutionCommand.OptimizationFileTemplate nameWithType: PostExecutionCommand.OptimizationFileTemplate +- uid: Hi.SessionCommands.PostExecutionCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.PostExecutionCommand.html#Hi_SessionCommands_PostExecutionCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.PostExecutionCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.PostExecutionCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PostExecutionCommand.Reg(XFactory) +- uid: Hi.SessionCommands.PostExecutionCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.PostExecutionCommand.html#Hi_SessionCommands_PostExecutionCommand_Reg_ + commentId: Overload:Hi.SessionCommands.PostExecutionCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.PostExecutionCommand.Reg + nameWithType: PostExecutionCommand.Reg - uid: Hi.SessionCommands.PostExecutionCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.PostExecutionCommand.html#Hi_SessionCommands_PostExecutionCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -160238,6 +163635,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.PreSettingCommand.MakeXmlSource nameWithType: PreSettingCommand.MakeXmlSource +- uid: Hi.SessionCommands.PreSettingCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.PreSettingCommand.html#Hi_SessionCommands_PreSettingCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.PreSettingCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.PreSettingCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: PreSettingCommand.Reg(XFactory) +- uid: Hi.SessionCommands.PreSettingCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.PreSettingCommand.html#Hi_SessionCommands_PreSettingCommand_Reg_ + commentId: Overload:Hi.SessionCommands.PreSettingCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.PreSettingCommand.Reg + nameWithType: PreSettingCommand.Reg - uid: Hi.SessionCommands.PreSettingCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.PreSettingCommand.html#Hi_SessionCommands_PreSettingCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -160370,6 +163780,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.RecordRuntimeGeomCommand.MakeXmlSource nameWithType: RecordRuntimeGeomCommand.MakeXmlSource +- uid: Hi.SessionCommands.RecordRuntimeGeomCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.RecordRuntimeGeomCommand.html#Hi_SessionCommands_RecordRuntimeGeomCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.RecordRuntimeGeomCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.RecordRuntimeGeomCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: RecordRuntimeGeomCommand.Reg(XFactory) +- uid: Hi.SessionCommands.RecordRuntimeGeomCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.RecordRuntimeGeomCommand.html#Hi_SessionCommands_RecordRuntimeGeomCommand_Reg_ + commentId: Overload:Hi.SessionCommands.RecordRuntimeGeomCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.RecordRuntimeGeomCommand.Reg + nameWithType: RecordRuntimeGeomCommand.Reg - uid: Hi.SessionCommands.RecordRuntimeGeomCommand.RelFile name: RelFile href: api/Hi.SessionCommands.RecordRuntimeGeomCommand.html#Hi_SessionCommands_RecordRuntimeGeomCommand_RelFile @@ -160537,6 +163960,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.ScriptCommand.PreSettingTemplate nameWithType: ScriptCommand.PreSettingTemplate +- uid: Hi.SessionCommands.ScriptCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.ScriptCommand.html#Hi_SessionCommands_ScriptCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.ScriptCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.ScriptCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ScriptCommand.Reg(XFactory) +- uid: Hi.SessionCommands.ScriptCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.ScriptCommand.html#Hi_SessionCommands_ScriptCommand_Reg_ + commentId: Overload:Hi.SessionCommands.ScriptCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.ScriptCommand.Reg + nameWithType: ScriptCommand.Reg - uid: Hi.SessionCommands.ScriptCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.ScriptCommand.html#Hi_SessionCommands_ScriptCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -160830,6 +164266,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.SimpleSessionCommand.OptimizationFileTemplate nameWithType: SimpleSessionCommand.OptimizationFileTemplate +- uid: Hi.SessionCommands.SimpleSessionCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.SimpleSessionCommand.html#Hi_SessionCommands_SimpleSessionCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.SimpleSessionCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.SimpleSessionCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: SimpleSessionCommand.Reg(XFactory) +- uid: Hi.SessionCommands.SimpleSessionCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.SimpleSessionCommand.html#Hi_SessionCommands_SimpleSessionCommand_Reg_ + commentId: Overload:Hi.SessionCommands.SimpleSessionCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.SimpleSessionCommand.Reg + nameWithType: SimpleSessionCommand.Reg - uid: Hi.SessionCommands.SimpleSessionCommand.Run(Hi.MachiningProcs.SessionShell) name: Run(SessionShell) href: api/Hi.SessionCommands.SimpleSessionCommand.html#Hi_SessionCommands_SimpleSessionCommand_Run_Hi_MachiningProcs_SessionShell_ @@ -160971,6 +164420,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.WriteRuntimeGeomToStlCommand.MakeXmlSource nameWithType: WriteRuntimeGeomToStlCommand.MakeXmlSource +- uid: Hi.SessionCommands.WriteRuntimeGeomToStlCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html#Hi_SessionCommands_WriteRuntimeGeomToStlCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.WriteRuntimeGeomToStlCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.WriteRuntimeGeomToStlCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: WriteRuntimeGeomToStlCommand.Reg(XFactory) +- uid: Hi.SessionCommands.WriteRuntimeGeomToStlCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html#Hi_SessionCommands_WriteRuntimeGeomToStlCommand_Reg_ + commentId: Overload:Hi.SessionCommands.WriteRuntimeGeomToStlCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.WriteRuntimeGeomToStlCommand.Reg + nameWithType: WriteRuntimeGeomToStlCommand.Reg - uid: Hi.SessionCommands.WriteRuntimeGeomToStlCommand.RelFile name: RelFile href: api/Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html#Hi_SessionCommands_WriteRuntimeGeomToStlCommand_RelFile @@ -161073,6 +164535,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.WriteShotFilesCommand.MakeXmlSource nameWithType: WriteShotFilesCommand.MakeXmlSource +- uid: Hi.SessionCommands.WriteShotFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.WriteShotFilesCommand.html#Hi_SessionCommands_WriteShotFilesCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.WriteShotFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.WriteShotFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: WriteShotFilesCommand.Reg(XFactory) +- uid: Hi.SessionCommands.WriteShotFilesCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.WriteShotFilesCommand.html#Hi_SessionCommands_WriteShotFilesCommand_Reg_ + commentId: Overload:Hi.SessionCommands.WriteShotFilesCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.WriteShotFilesCommand.Reg + nameWithType: WriteShotFilesCommand.Reg - uid: Hi.SessionCommands.WriteShotFilesCommand.RelFileTemplate name: RelFileTemplate href: api/Hi.SessionCommands.WriteShotFilesCommand.html#Hi_SessionCommands_WriteShotFilesCommand_RelFileTemplate @@ -161175,6 +164650,19 @@ references: isSpec: "True" fullName: Hi.SessionCommands.WriteStepFilesCommand.MakeXmlSource nameWithType: WriteStepFilesCommand.MakeXmlSource +- uid: Hi.SessionCommands.WriteStepFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/Hi.SessionCommands.WriteStepFilesCommand.html#Hi_SessionCommands_WriteStepFilesCommand_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Hi.SessionCommands.WriteStepFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Hi.SessionCommands.WriteStepFilesCommand.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: WriteStepFilesCommand.Reg(XFactory) +- uid: Hi.SessionCommands.WriteStepFilesCommand.Reg* + name: Reg + href: api/Hi.SessionCommands.WriteStepFilesCommand.html#Hi_SessionCommands_WriteStepFilesCommand_Reg_ + commentId: Overload:Hi.SessionCommands.WriteStepFilesCommand.Reg + isSpec: "True" + fullName: Hi.SessionCommands.WriteStepFilesCommand.Reg + nameWithType: WriteStepFilesCommand.Reg - uid: Hi.SessionCommands.WriteStepFilesCommand.RelFileTemplate name: RelFileTemplate href: api/Hi.SessionCommands.WriteStepFilesCommand.html#Hi_SessionCommands_WriteStepFilesCommand_RelFileTemplate @@ -165205,6 +168693,19 @@ references: isSpec: "True" fullName: HiMachining.Milling.ClMillingDevice.McTransformers nameWithType: ClMillingDevice.McTransformers +- uid: HiMachining.Milling.ClMillingDevice.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/HiMachining.Milling.ClMillingDevice.html#HiMachining_Milling_ClMillingDevice_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:HiMachining.Milling.ClMillingDevice.Reg(Hi.Common.XmlUtils.XFactory) + fullName: HiMachining.Milling.ClMillingDevice.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: ClMillingDevice.Reg(XFactory) +- uid: HiMachining.Milling.ClMillingDevice.Reg* + name: Reg + href: api/HiMachining.Milling.ClMillingDevice.html#HiMachining_Milling_ClMillingDevice_Reg_ + commentId: Overload:HiMachining.Milling.ClMillingDevice.Reg + isSpec: "True" + fullName: HiMachining.Milling.ClMillingDevice.Reg + nameWithType: ClMillingDevice.Reg - uid: HiMachining.Milling.ClMillingDevice.TableBuckle name: TableBuckle href: api/HiMachining.Milling.ClMillingDevice.html#HiMachining_Milling_ClMillingDevice_TableBuckle @@ -165341,6 +168842,19 @@ references: isSpec: "True" fullName: HiNc.Grpcs.MachiningProjectGrpcServer.MakeXmlSource nameWithType: MachiningProjectGrpcServer.MakeXmlSource +- uid: HiNc.Grpcs.MachiningProjectGrpcServer.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: api/HiNc.Grpcs.MachiningProjectGrpcServer.html#HiNc_Grpcs_MachiningProjectGrpcServer_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:HiNc.Grpcs.MachiningProjectGrpcServer.Reg(Hi.Common.XmlUtils.XFactory) + fullName: HiNc.Grpcs.MachiningProjectGrpcServer.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: MachiningProjectGrpcServer.Reg(XFactory) +- uid: HiNc.Grpcs.MachiningProjectGrpcServer.Reg* + name: Reg + href: api/HiNc.Grpcs.MachiningProjectGrpcServer.html#HiNc_Grpcs_MachiningProjectGrpcServer_Reg_ + commentId: Overload:HiNc.Grpcs.MachiningProjectGrpcServer.Reg + isSpec: "True" + fullName: HiNc.Grpcs.MachiningProjectGrpcServer.Reg + nameWithType: MachiningProjectGrpcServer.Reg - uid: HiNc.Grpcs.MachiningProjectGrpcServer.ServicePort name: ServicePort href: api/HiNc.Grpcs.MachiningProjectGrpcServer.html#HiNc_Grpcs_MachiningProjectGrpcServer_ServicePort @@ -165878,6 +169392,19 @@ references: isSpec: "True" fullName: Sample.MachineTool.DemoBuildMachineTool.GetXyzabcMachineTool nameWithType: DemoBuildMachineTool.GetXyzabcMachineTool +- uid: Sample.MachineTool.DemoBuildMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + name: Reg(XFactory) + href: sample/Sample.MachineTool.DemoBuildMachineTool.html#Sample_MachineTool_DemoBuildMachineTool_Reg_Hi_Common_XmlUtils_XFactory_ + commentId: M:Sample.MachineTool.DemoBuildMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + fullName: Sample.MachineTool.DemoBuildMachineTool.Reg(Hi.Common.XmlUtils.XFactory) + nameWithType: DemoBuildMachineTool.Reg(XFactory) +- uid: Sample.MachineTool.DemoBuildMachineTool.Reg* + name: Reg + href: sample/Sample.MachineTool.DemoBuildMachineTool.html#Sample_MachineTool_DemoBuildMachineTool_Reg_ + commentId: Overload:Sample.MachineTool.DemoBuildMachineTool.Reg + isSpec: "True" + fullName: Sample.MachineTool.DemoBuildMachineTool.Reg + nameWithType: DemoBuildMachineTool.Reg - uid: Sample.MachineTool.DemoBuildMachineTool.ToXElement name: ToXElement() href: sample/Sample.MachineTool.DemoBuildMachineTool.html#Sample_MachineTool_DemoBuildMachineTool_ToXElement diff --git a/App/zh-Hans/HiMech.resources.dll b/App/zh-Hans/HiMech.resources.dll index 3f052435ae8e387e3fe32ae4ff19aafb5ab33732..90ded7f86313052f52ad347cb0602e1440590f73 100644 GIT binary patch delta 223 zcmZq3Xvmn*!LrTB>g>iICuYW3o6j>VG6_if{K?7|a&cRl8TopCZs?p%Y*~z!CVB=8 z45o|>2F7}ZdWNPZ+U914X=X;o<`%}LCW(pWNr^^@mMJObCKf3vX^DvjmZ_D79%oq$A(txB9gE5e20VGWs zOc)Y@(3~L&NE!jLB|{1jnghixz^pW|ya7-=6$lN1x-EdT1%uh-U_(ow@x6w{OaNwC BHc|ip delta 223 zcmZq3Xvmn*!E#5<_4>vhCuYW(o6j>VG70=k;aTUxpz6LNsP)tNa}pw(*s>Tcjr9x| z7)%)%42<;*^$bmowUfEQ}2j&5})xlgv{slMF1)%~DOwEX-3)jS?+PjSNy# zEH^J^f33nflYxRAUIFjesx_D3%OlgJhE#lE5m=f#Q~vAM;v*jOTmI3;<3> BH532< delta 223 zcmWlRy-EW?6ot=ZOdwH%f^E8Vfo1-7XSTJn5ea#M`Fnx*0%-&b3n7sB5Q`GF3fQDc z>pK`ooyOi9E*!qY`M8VmV*LJkQT-KPo40$;n)Zj^c5e9R>hXIzfBM*8#^dhpVR`Cq zYgGuKWDvTLg|up7r4w11QiM7O;e3oDMX99KmC4oz6H`py>GrqR@O}dZ4xnk*gBQkB zJGy#iGldB(Bpd`X6bwqDfSOt$a`1?B0*O+RA<5UM$jn5ZEJMqAP1GFp@^D?B-wzM` EA9mz6Qvd(} diff --git a/App/zh-Hant/HiGeom.resources.dll b/App/zh-Hant/HiGeom.resources.dll index cc08da970bb56ab71bfcb277a2a5c5dbbdc9f09e..885cb600fc0221634ac06e9313264c554d03c5d4 100644 GIT binary patch delta 232 zcmW-YF-rqM6olvHa)=^w78dqtByjHLc)NS8Nt41#tYtUsHChP%fTX(=DU=lc1VOL} zTjXct*95GRJdR<8$2ap9gT>%;+22!tyIDPC)TUi_+bhP??c3|m{_*$uWAc8Nf35%X zL(QcEn4qdsm%8Gi9=XOiA7b#@>1ge&3XzS`wP$M^Wei8Bd`S0aFWGquLI$8s-xoJM z;`Dbprzge`8Y4I~Fp?etQS5~}afB7kP<5PTV}#bybJsLb9b;KKx#fR7zp8Ua36-vk J2_-6ybOKhoHDmw) delta 232 zcmZorX;7Ka!NRMvr)6W06EkDm=JU*wOag*Ehn5s6ySUFU%(UgY9Ai592kSpe6Fmb4 z22(}`17kfyJwsy??IaTeV+-R%6B7e76N6MsV>2_u6w4HoWQ*if6JrZAqtrADOGBX4 zW_|W}X3jPSMh0dE28OoH)44>M7)>^><*8>3Het|aNMbNyFkmodumIvjARELp1Cyx? zmOwExAT(r10kTtoqRBvY$qcDL7D$H~gAtIO24q IQQ$u#0M8UMr2qf` diff --git a/App/zh-Hant/HiMech.resources.dll b/App/zh-Hant/HiMech.resources.dll index 8a24c9b3ce0296a997dd2102d3b1fcf3ceb55aea..70cbc45d7d7a4085db204ab9009bdf0a96885b6c 100644 GIT binary patch delta 223 zcmZq3Xvmn*!SdpF%<_#rPRxw6HlJr!WD+>nzlQtp?Ocb=?#GjZ3w9jd#FoWqX`*Mq zz+lSAU|_6gsAp(uqHS(wm}X{VY;Iv}YLb{}o|I^mXql2?Zeo#=l9rfgV40d~Xl9XW zVYYcO`)d`>SqzK}%nS?+vo=rHdCA0Rvbj;eo-x>jL7Tyx!HmI>Aq_|xF&G1R7C_RJ z!Gs|Z2+bLifTR%+TQZ~op*c|80?bMS%Nqd2Q-RPBsM`WaTQHbS4mPv|8sBSJ%me^* CsW|BX delta 223 zcmW-ZJ!%3`6ot>52?=&CK_QUBFus}hds7HW;{sg4yypYa(gkR`6cGfAFm)CXl4(-8 z1uMH$>BK#RTx`B`Ip^c9XY1Ma<*IpDeSE$?<)Ud1c|YrJj{E-a&*<^Hcefb+jrG^{ zT#zaxU<9Np%Az!C5N(Qqv{$mW(Wu}O1xd~(ZM{pTs=cXXno|3IbH42~5Xb>E?c4n+ z6RLe4uEa!PfC!7k3?OKDC`i=YMHs#V9IwPFneO6hroZ$C6}z6ziuZ&mXg4W|-*3ug F_7At0HWvT@ diff --git a/App/zh-Hant/HiNc.resources.dll b/App/zh-Hant/HiNc.resources.dll index 1cce83bc028cd110ede1c86d3773be1218107238..a1221ffaeb42d63b00dae146c323f231ed69060b 100644 GIT binary patch delta 223 zcmZoLX)u}4!Ll;={N{~4PRxvJH=k$T$|R7tX5Qo*--MiZB;IP=-z%a!c?#Q3OJh9) z1_o0`1_NU~Lp?)tV{KzgbA!axw3HM}OH0!f3ky?ob2Ed~L_-53qeSy$15@+lBy%%! zBg@Tg>>S*jYZ(|Bm>C!t)^46I)XKmswHUh##pja}H4U$b}NCK-c2Z~!xek^JUGG6R4GXP%} BHX8r{ delta 223 zcmWlRy=nqM6ot=ZLt?OzU<8Xaw!$)h>&&*Itxei(=I;rDscj+&qzEY38nE0ZEEc|k zjSperYk1|t;X9m7}r65C)uP`Dr5jnCnEw?pNvrwz^OL=?WJ7-sa C4>kG#

    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 diff --git a/App/en/HiGeom.resources.dll b/App/en/HiGeom.resources.dll index 46a9adbb9a2476c82e7501d0875be7df5a919568..d136286601c6b670105c756660663618b67ef3d6 100644 GIT binary patch delta 232 zcmW-Yv1$TA7=&j%MIst5g-@WJaO`^gyL(*_!Oq4f*pyN{@9J+lf4pChx7MSe zOadez^Gszbr;!@lQd{SPcgm_@%rf_Zv{r>9V@jzt1uLD8gZ4-AQb8aAP{mWH-w+fp z-L+T{Mo<{TqJ-vj@Ca9TAq5wU=s#yh9m|P1_K6T1`8lg1hPRqGccLT zUw}FwPRxw6HlJq}WfFL+@n$XC%FBMsHk^+3oT{g=`3q|nqos+S z0Rw|6BZGmlo}r$hsfo6^nPHllk+Hdjv8hR7qIpuHQKDr^in)nJN=jN{qJd>FnQ`IA<|1GB7hRFwELKo$DnNqsit*-g?Gh69#Pta|Sa8LxwaUX~bX*Z}6i)?0L!fR8AZ@{5HaVEz5@>uce=!pP Dupl>s delta 224 zcmW-Zy-EW?6ot?1MkPXsP2M2g!ZO*}`MIr-E@F|&a%VD)Z7M5c7l=Y2U|8@8?3U?F zo8ITJ7gFja&37*6eB9M|HQug!MgOwvUT<^Jrtf@|-Mk;4rk{Uz_lM=j!)Er?rQeH3 zL8_F17Lcl(loPFrU}Er8J0%+vwDLBRmt;+>jk8f#jnkEk3rhQ|Q`T=GkOOGb{`w~q zD!mMz#ay94fI(z>5NbFmNHp99Xudrxuf!>t_UzV7ckVSRb{(4)?-2{oZayS_|2AA^ E|H0NZ=>Px# diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeFile.html b/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeFile.html index 9d4caa0d..453889b1 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeFile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeFile.html @@ -471,6 +471,40 @@ Since the folder can be moving with the configuration file.

    +
    + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html index 9d5c4c05..384c3fc7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html @@ -653,6 +653,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html index f44404bf..c5f64784 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html @@ -582,6 +582,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html index b938ed26..b54b441a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html @@ -614,6 +614,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DiscreteQuantityColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DiscreteQuantityColorGuide.html index 6e385462..354aead7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DiscreteQuantityColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DiscreteQuantityColorGuide.html @@ -514,6 +514,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html index 48896ce3..21d49cfd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html @@ -522,6 +522,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FuncRangeColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FuncRangeColorGuide.html index 3107e257..ff9ad97e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FuncRangeColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FuncRangeColorGuide.html @@ -559,6 +559,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.PlainColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.PlainColorGuide.html index a6292973..df75d885 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.PlainColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.PlainColorGuide.html @@ -481,6 +481,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.QuantityColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.QuantityColorGuide.html index ede05016..761cb130 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.QuantityColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.QuantityColorGuide.html @@ -583,6 +583,39 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

    Registers this type's deserializer with the given XFactory +and chains Reg(factory) on dependents. Idempotent.

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RangeColorRule.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RangeColorRule.html index 9c674f4a..760d3699 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RangeColorRule.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RangeColorRule.html @@ -555,6 +555,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RgbSeed.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RgbSeed.html index d3c02788..ed29fefc 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RgbSeed.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.RgbSeed.html @@ -443,6 +443,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.BlockingTimer.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.BlockingTimer.html index 1ff329c0..cc0eb5cd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.BlockingTimer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.BlockingTimer.html @@ -539,6 +539,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.IndexSegment.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.IndexSegment.html index a94c6035..1fb8e3a7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.IndexSegment.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.IndexSegment.html @@ -870,6 +870,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter-1.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter-1.html index bd13f316..c8dbd4d5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter-1.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter-1.html @@ -492,6 +492,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter.html index 3afed211..4390225c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.IntegerKeyDictionaryConverter.html @@ -486,6 +486,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.RoutineBlocker.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.RoutineBlocker.html index 3c53e453..fcd2231c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.RoutineBlocker.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.RoutineBlocker.html @@ -565,6 +565,40 @@ Since the folder can be moving with the configuration file.

    + + +

    + Reg(XFactory) + +

    + +

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

    +
    +
    + +
    +
    public static void Reg(XFactory factory = null)
    +
    + +

    Parameters

    +
    +
    factory XFactory
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html index bcbdd408..902bcbc7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,8 @@ Delegate XFactory.XGeneratorDelegate
    Assembly
    HiGeom.dll
    -

    Delegate for generating objects from XML elements with relative file path.

    +

    Delegate for generating an object from an XML element with relative +file path context.

    @@ -108,26 +109,26 @@ Delegate XFactory.XGeneratorDelegate

    Parameters

    src XElement
    -

    The source XML element

    +

    The source XML element.

    baseDirectory string
    -

    The base directory for resolving paths

    +

    The base directory for resolving paths.

    relFile string
    -

    The relative file path

    +

    The relative file path.

    progress IProgress<object>
    -

    Progress reporter for the XML parsing chain

    +

    Progress reporter for the XML parsing chain.

    res object[]
    -

    Additional parameters for generation

    +

    Additional parameters for generation.

    Returns

    object
    -

    The generated object

    +

    The generated object.

    @@ -165,8 +166,9 @@ Delegate XFactory.XGeneratorDelegate

    Remarks

    -

    Note that the design pattern of seperating BaseDirectory and RelativePath is for easy data package moving. -The pattern assume the BaseDirectory can be changed if all the content in the BaseDirectory is changed to the destinate directory.

    +

    Separating baseDirectory and relFile +keeps data packages relocatable: moving the whole base directory only +requires updating the directory string, not every internal path.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html index 3828202e..49e90d71 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html @@ -108,10 +108,10 @@ Delegate XFactory.XmlExceptionDelegate

    Parameters

    relPath string
    -

    The relative path where the exception occurred

    +

    The relative path where the exception occurred.

    exception Exception
    -

    The exception that was thrown

    +

    The exception that was thrown.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.html index 7bfca26a..38fdf3f8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.XFactory.html @@ -6,7 +6,7 @@ - + @@ -97,12 +97,13 @@ Class XFactory
    Assembly
    HiGeom.dll
    -

    Factory class for generating objects from XML elements using registered generator functions.

    +

    Factory for generating objects from XML elements using registered generator +functions.

    -
    public static class XFactory
    +
    public class XFactory
    @@ -144,11 +145,57 @@ Class XFactory

  • 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