From ff2cfa6210edc068a0cb7472ed4085ea3a587d4d Mon Sep 17 00:00:00 2001 From: iamboss Date: Thu, 19 Mar 2026 22:31:17 +0800 Subject: [PATCH] fix bug of opt R negative interpolation. --- App/HiMech.dll | Bin 892928 -> 892928 bytes App/HiNC-2025-win-desktop.deps.json | 66 +++++++++--------- App/HiNC-2025-win-desktop.dll | Bin 873472 -> 873472 bytes App/HiNC-2025-win-desktop.pdb | Bin 328744 -> 328744 bytes App/HiNc-Resource.dll | Bin 56320 -> 56320 bytes App/HiNc.dll | Bin 391168 -> 391680 bytes App/HiUniNc.dll | Bin 189440 -> 189440 bytes App/en/HiMech.resources.dll | Bin 4608 -> 4608 bytes .../api/Hi.MachiningProcs.RuntimeApi.html | 3 +- ...illingForces.Training.MillingTraining.html | 3 +- ...Dependencys.Fanuc.FanucParameterTable.html | 4 +- ...s.Heidenhain.HeidenhainParameterTable.html | 2 +- ...encys.Siemens.SiemensMachineDataTable.html | 2 +- ...i.NcParsers.Keywords.CoordinateOffset.html | 4 +- .../api/Hi.NcParsers.Keywords.html | 2 +- .../dev-doc/build-hinc/controller/index.html | 2 - .../dev-doc/release-note/index.html | 8 ++- App/wwwroot/HiAPI-docsite/index.json | 14 ++-- App/wwwroot/HiAPI-docsite/manifest.json | 2 +- App/zh-Hans/HiMech.resources.dll | Bin 13312 -> 13312 bytes App/zh-Hans/HiNc.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 23 files changed, 58 insertions(+), 54 deletions(-) diff --git a/App/HiMech.dll b/App/HiMech.dll index c22d4059ddd9ca09a080e8591cb57ce0f2b3fbbe..10b2457a86e05a5c9a51a3c70c76ff350f12bad2 100644 GIT binary patch delta 2156 zcma)+dr(wW9LIlW@80LS!h%Gmv?HjAxUla9UktBE9YrCi#+eM(MgPdCNh&f2ND+0` z*Eo1na?l!Oe1VF1$RTx_#8)Hgj43%PhzKUWa;!;9``x<->kt3vGCSY<`MuA%hf{IX zTXEF8cDb=->*-UK!Kxss3L2_{TvgE69OQrNB%jdoE}kQX`<%M;I{!BDs8_D@O~gyr zb@QpjG)Dkvc?clDLiO?ueus6a5#UH7fC3!`fJJ9DS93Q&Y>f8SpnluKXOT(jtsee3 z8KLgG$va2^?Y_xxBvF5G0EOECBB0Aa^dbT*pzHd0m5Z9n`Y7kflW&uyBB{7~{k?p%@Xu zbW5vR`+$!d_3(Le7{uw0{^u48#Osz0+WmkZIw^7)wyvE(u+e$hIy@44aWpJRSYx)h z&@(T-pkgZ1Ika)2pbjn{fo;1?1r^(I3QgyuUsK#zT`RDL#s`@H0@IyL+nC0(JRj2; zOy6gE183IimsY9qtwnld5U7_kW({CzbNend4~ zi-f;K+Ok;qLUe4w3NITIp~<1`_Dz{0#~`;dUa0$%;5y@#G*BfxlVS__Ucrc}w72 zzRq$eZz*&$Hq%FI1*^>FxdgjQwYY(KF2NC<2j=O3|2am9bznaEn52igrHUoj4~8$`A;4z)9rCdOu!uM^gg z(X^&cxVC_NNK4IPNtER&ey-_x6ZquYcz|$K;p(GUvBbjT=FQGe<$q=7NLm^vHikRS z=+idxlTG-qi{X99`?*FwoAJk3u7TUj=P<6K`ED_1oW-i!FAIAYh4QA*=J&*FqsS^+ zvrN1;#JLmiga$52s(0Y|gG%WqWR71)es^lq>b>Jdl_x-D7@C{JCD75n-8t=lSufcIo~OEpdZ%O7$EPlgMZ_a7eUT`f*;( z`|hrg_iMFAGhbomsNEs+D0=LWm@|f*@dO1c;nQXgo$&-EaTJaRZF1<0k5e)kucTSs zV&iaffj)XBHl`8>-Igl3W{^C!W0h1+^5{FOCDkhXaYnp1z)%0&Bh4F3mZ*iTl9d=} zWvlcspUhWFBjg39YV45=2XLZxdM85mhmmSJD^}h}P;bY{-}9(D;^nZxsNeZyl_M&h zH9@8(WI0>DVn*$KQ{E%sHCr=V-gsEPhnuKfr>j-pE6Ov=5BRFxZgos8YW6VYE%`ap z`e8~Ec|ln3aK(yi5@VF=7kKMp&^wkMiBam!WQaO10Wq3ZCn(XJ+>aAzEmzR`MCBPz zrqg=2k|Zc+ajlxYU!a}im13g2!~)SUbD|<}aw_iG$khO6)H$h2bo^L`_wmbV<}FO0 z;Kpj)#WFz8?y3d|vbGux2n>*d(w54SF zoVGMCzPr<0o(zXeopsAJ;{Qc%xMi9gzI;zjel&j~WBoVvUs_LWUqNr&GVSUd@3tq} z0Xziku0%(o!);F}^x6IXfZy&Z@;g1nDa8&~inGw`_XP?aDRb>bfs|xVz+dEY)03wL zb+yYuJa4$c5Ts3;%)JKA4R*SDvpJvS;~OMEA^1@J_!q#R9XwEk>O?Ju6#O~Bh3dpO mFWP+=Rfx6}n2WJRNGW($J$h~tM!MDPIh z;3EgGh)UKdnaV1J#~cfrQpfrOA2TWWL_{PtGozVkl79EzgY}1hbZ2(I=kxoW-{YM7 z+pRqAtvv4CxYn}${N>#%s;jC=Rkf+A+FVs_X|3jdyH4t9MJHz_rbvsr>IOHDyrN#Y z!L^Y2bW<0XLaeKJfFln9c&Jk^-Q@PhOtS#AB>>3KVFFloMsu}x0gR2-R_E1EySa2y zsP=Yqr$~l+=oY7tWwh%SS4SeFFtlJdKsa=oh@OOpkLae`oNA6NV|8SB=PbY&LU7j` z>eRd31Ts@CxyyAEkD7IlJ4@nd^e>#p{Ng7fu!jHvAj80h={HLN9I|1#A`Dv0fJ@vn z7t0uX1PIeDoof99E_VFL$H8F`t2^wEEp~|0Esto|18&sRh}&j>`ecHI&Pg#*5m;*? z4NK%V*zEJLsfBU*m1Rs<(a;oL9a@orWjn3;l|Nt?n%1CSQ@mJRD=~-09n9a)w4Lc4 zrkO16Ri^JT-Nf`JcBbW7!gw>Mb9m)W-Qb1c{Q%|9zKRPh61?m0Yh zlX)qe%hBRii(Sag$lW^MlA3gXIoxA>T=$p5AB>;HMw-kYfH=#j>!Pje`7o1W#I4kf z_?)yEaVz0$p3agHw+gx#yJ+7=K1O2wT!j6LwS9yAT!c2A2m9%OQ;dzg9dL%Rk@qLK z!PupiY~$PQ^YQpi=Ih{DVx)barq}ajW>(HhmRJ6_oRw_Ud9d6NvX!w>ZV1`M*eGWs zEsR|%*T8QeS+ur+zqW|f(#1BREYco}uXW~}WX^vF2MAB)QTxUUW%lRrGUw-|a6dD% zpDvCSLc^4Ydbc5NniYS#xZS2-dWg$pyj8#SgIo^d&uLzgkTc1irrR&^2bURfZ`0NV z!nN_Fnbxirt_^p!<4>i@oG3ObIDfE0e1P1Hd{F1rV!!^f6U8IUZxiUAdf}1P6`?mY zTfADP1+El*$j#>2Vvo*)fwRT?%#VRTHVWC{_62zG{+f32*S%Wc7V*C7IVvQQEVbmQ z5M#G9?`!)E?>B0#W;QW%>TKeY!ap6$%nObm6 zj3E=~ieuu#JW``B4wn{L_hSt|e1RSPPVa?FMPXz=%^fS%5!5@e(pMbn-Z&|2DC(C! zNi~yWG&fnIR%9ttx?)4^c}Y6JP?ZHty0Z6u&Bj7OY8*Tl;s%#xjzYNCw^ z@&HHPrHx5)A}{yhS+!Q|0=+(2E+uj@zHerjHAUvlQZe4yxbof;!dSI56QbMYl;ucwD_>~v}>Hx=L@>MN~*(`s<<3U0VT~b z-J|#&UbiclI^E?9re&n7xxLmg|8M7(UhA}Bo!dvf*}mu7thVgoZ<%P20Xzhp?gS-4aR=gkrT*g5B(JB)nN(2XQhcSQoC c<-b*pE`&=g`Dnzm=;TC2iS2xKJfE%t0ERP6;s5{u diff --git a/App/HiNC-2025-win-desktop.pdb b/App/HiNC-2025-win-desktop.pdb index be98ce8a894aa703c255f3350f195929de1134e0..2875efb51717a6f575ed608a0e5a91f865915498 100644 GIT binary patch delta 201 zcmZ3{A+n-FWI~Nd@B8DfUoNscH=Ot_`yy%Xt-QxK4mVC{oxr$t0@JQz^*a`xKE?2W zm!V_r)KGEO6V8(tEpL)Pv8>Z0(=S;!D784hv?w`MFC{03fr0VEj0gJ|6c`!mX6?z( zWc%(qt?!*zQT#j=kXopc=5VXU3=V7zy1~W|GOwL?S=OR-Bl4s0eUHr0JcOz{k-KIv sC@?c{R`Z3q{JAaRzGjt>&5l;dGt(blVis?Icbo}`nYX_?&SGT)01G2mRsaA1 delta 201 zcmZ3{A+n-FWI~OIb>Cv9HLE`R_boYpZzYc)N2qXFN8^On35;7OFzq^4Kj-qDr3?>v z86M7&%sjvBu=jpHk*w6Om0}*5e#yE)sm1xFMaijpDLFX|42%zKUQcIGU}Si`GGlF9 zNTFW?A7f^u_L>%uTBs7)TAQT|4r~lQ7Fy2#Ys(xavPs9hV-x$}kr|qYP*pYQ0?;64 ph7I0)Q7h6i^WD3$JKB$F9ojnm;U#AA_IJmbfS7svyW=cYHUOFfQ2PJ? diff --git a/App/HiNc-Resource.dll b/App/HiNc-Resource.dll index c7082f516c7ff6f60f1b9fb9a377bb4669414b6d..4fb29c08d0984502cb16223cf6c9d44c4942f67e 100644 GIT binary patch delta 301 zcmZqJ!Q8Nec|r%vhZzs{ZS3)2X4KkzmH9oRK;5i8`I&6rU8nWE^D2s;r!x5p>lX_n zJp%>?6GjGoV?9GX6C>?3152|cOXCy+^Q08xL?cThGZQm&b4!cl#L~|p< zR3n2)>@qBCjBCzJR$vbh$fXk|e z?b+%dRyf&_QDHM5$DDJVS`3T~%nS?+TAMdt`^?B_w0ZfBYQ|tA25p8k1_K651~Y~v zAZg5y0_2$k*(pGFB7+f7%m^rF0>tJ(Xvtu~kPL*0KozDyo+VH$4ahSGsxo9q1(F7n WOK+L78ZqcG7;N5n%b$^nfdK%bi&>`t delta 301 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

Vm;r)zY+@)MAthvnS-eGGiLqI^C7h7=M$v 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 delta 852 zcma)%KTH!*9LL}9y$TqDAQTiuu@wyMwQ$$oyX#4aX?s^Cgg9tGiAyOxBSwgW157mx zCCVTeeC{kNF@Q==7EO#OgE1IQ&;?D6EDQ{Wgl@ijp}Tp>C%^BX-@ALcwaVOD<%3Dj z_{=)HJGDFoexFpt3qAuaqK5#0P(5+gi+y!XC}&@NXFq&kRTE)u?3>Lj?1$qp?{xd2 z3*#bTlPxfUk9nNE7Qi0wF1g?>D|=JX41GD9^n3eq1;P#mz>l{viv%ErcQ6|dKoi~~ z>~R3vl2v4rw=B-mUV{hf`*I&SOHMbb;m$N?$$70bb7z*g9AhL1olwip1)-y{mrQVP zm9x~<$P9OeSw0B2D{S(fivoEhK?B|;?5G4yr*^Pw{uX@eap$%smnVHL`JY~v;7a4H zSRE5gAUDakx~yfZ5_C#cBCrJKMO+lz7T0zQe_F7CNg+5|zLxz&Cb11Xt^N zMPXG?6C8HFhTx~C{4ajhT8FBg6$K{RpvUPNfLq@306~Z#>@1DIf(m(-o`XAZ-`SXh z^#jhQr_ceXbxTjtM2v#b>Z|wk2gG4MjJ#a9od@ zVU;HMl!)^k)ii0+lr1A-vd@3O_kYd0Er{1F_6$6+Z;YP5cXKlTA^2|D8QOxqGX`y! z5u$+PXuHy`M5$y`C97p(FwN$K diff --git a/App/en/HiMech.resources.dll b/App/en/HiMech.resources.dll index c06902f1f9a7e9fe0b50d3eb013a48470b16d3fb..c35bec85153f217660a1405d2f1a8e459ae40a06 100644 GIT binary patch delta 231 zcmZorX;7Ka!Q#BSaKpwPCuYW;&F7g#nFJhpOa7|+x%p1C`pf0`)%?fiFRYo2Rwf2| z1`G_Qj0^_GdWL$2CI;Gx<_5{hsmTVWNy$d0X_je*#+F8jX36HMiH4Rb21%)w7N)7m zNya9dr?Y=&;_P8yWMF1sVCdOAo$EOhvk8O2=0@IH#!w)GL7O3w!5l~@17Ru<8!(tM zBmrq7Af3iw3B-mB#z5K#sLl*1ZVptH2o$qqNCB!%0`e>wEP!f3dXs=EO(qBPn}e(aP9T z&wzo!l##)}SkF+;(AZMjJk25{&BV+!*}x<*)yU91EzLB^G|3_<*)l1`EGaSB)WXct z*udCm^K|y_Oq|^ej10^S3=G|yr*l1LVm4;5+}y}p%NPn|FlaNFGo&$CFr)xU69zK| zQ-)*)10XArA(g?1!4NE)1{6&KV+$ai4AhkbRBr|(6M;Napl&mum@!bFF@w?MV19G3 J6}|k$OaRi9H}e1h diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html index eefeebb..32d4f5c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html @@ -489,7 +489,8 @@ public bool EnableMotionDependentMachiningResolution { get; set; } -

+

Gets or sets whether Mz lever weighting is enabled on training.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.Training.MillingTraining.html b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.Training.MillingTraining.html index e57744e..f48c3e2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.Training.MillingTraining.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MillingForces.Training.MillingTraining.html @@ -159,7 +159,8 @@ Class MillingTraining -
+

Gets or sets whether Mz lever weighting is enabled during training sample gathering.

+
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 df4485f..0bed534 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 @@ -550,7 +550,7 @@ following real Fanuc parameter numbering.

#1006: Axis type per axis. -See AxisType. See AxisNames. See IsRotaryAxis. See SetAxis.

+See AxisType. See AxisNames. See IsRotaryAxis(string). See SetAxis(string, AxisType).

@@ -583,7 +583,7 @@ See AxisType.

#1240: G28 first reference position per axis. -See IHomeMcConfig. See GetHomePosition. See SetHomePosition.

+See IHomeMcConfig. See GetHomePosition(string). See SetHomePosition(string, double).

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 cc58758..7c6733a 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 @@ -428,7 +428,7 @@ MP400–MP499: Axis-specific parameters. -

MP400: Axis type per axis. See AxisType. See AxisNames.

+

MP400: Axis type per axis. See AxisType. See AxisNames.

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 700a120..bd5a3e6 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 @@ -491,7 +491,7 @@ MD30000–MD39999: Axis-specific machine data (extended). -

MD30300: Axis type per axis. See AxisType. See AxisNames.

+

MD30300: Axis type per axis. See AxisType. See AxisNames.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CoordinateOffset.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CoordinateOffset.html index 7d19088..5418158 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CoordinateOffset.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CoordinateOffset.html @@ -6,7 +6,7 @@ - + @@ -98,7 +98,7 @@ Class CoordinateOffset

Work coordinate offset state written by -LogicSyntaxs.CoordinateOffsetSyntax. +IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof.

Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html index e75d960..d48699b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html @@ -101,7 +101,7 @@ Classes

CoordinateOffset

Work coordinate offset state written by -LogicSyntaxs.CoordinateOffsetSyntax. +IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof.

Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. diff --git a/App/wwwroot/HiAPI-docsite/dev-doc/build-hinc/controller/index.html b/App/wwwroot/HiAPI-docsite/dev-doc/build-hinc/controller/index.html index edefc35..e163404 100644 --- a/App/wwwroot/HiAPI-docsite/dev-doc/build-hinc/controller/index.html +++ b/App/wwwroot/HiAPI-docsite/dev-doc/build-hinc/controller/index.html @@ -184,7 +184,6 @@

  • Config Tab
      -
    • <xref:Hi.Numerical.HardNcEnv.SetToolHeightCompensationOnFeatureNormal> Setting
    • EnableShortestRotary Setting
  • @@ -264,7 +263,6 @@ See Rendering Items SubMenu from Config Options

    General configuration options including:

    Source Code Locations

    diff --git a/App/wwwroot/HiAPI-docsite/dev-doc/release-note/index.html b/App/wwwroot/HiAPI-docsite/dev-doc/release-note/index.html index ae1a6d4..12f6dde 100644 --- a/App/wwwroot/HiAPI-docsite/dev-doc/release-note/index.html +++ b/App/wwwroot/HiAPI-docsite/dev-doc/release-note/index.html @@ -87,14 +87,18 @@

    Release Note

    +

    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
    • +

    HiNc Packages Version 3.1.157

    • 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 執行CSV檔)
    • Fix CSV title parsing to trim surrounding quotes
    • -
    • Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support)
    • -
    • Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state

    HiNc Packages Version 3.1.156

      diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json index 52bee65..2515411 100644 --- a/App/wwwroot/HiAPI-docsite/index.json +++ b/App/wwwroot/HiAPI-docsite/index.json @@ -2067,7 +2067,7 @@ "api/Hi.MachiningProcs.RuntimeApi.html": { "href": "api/Hi.MachiningProcs.RuntimeApi.html", "title": "Class RuntimeApi | HiAPI-C# 2025", - "summary": "Class RuntimeApi Namespace Hi.MachiningProcs Assembly HiNc.dll Runtime API for machining operations. public class RuntimeApi : ICsScriptApi Inheritance object RuntimeApi Implements ICsScriptApi Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DefaultParaTemplateDimension Gets or sets the parameter template dimension (2D or 3D). [JsAce] public int DefaultParaTemplateDimension { get; set; } Property Value int DiffVisualRadius_mm Gets or sets the visual radius in millimeters for difference visualization. Controls the radius used for highlighting differences between workpiece states. [JsAce] public double DiffVisualRadius_mm { get; set; } Property Value double DispCacheMb Gets or sets the display cache size in megabytes. [Obsolete] public long DispCacheMb { get; set; } Property Value long DispCache_Mb Gets or sets the display cache size in megabytes. [JsAce] public long DispCache_Mb { get; set; } Property Value long EmbeddedLogMode Gets or sets the embedded log mode for NC optimization. [JsAce] public static NcOptimizationEmbeddedLogMode EmbeddedLogMode { get; set; } Property Value NcOptimizationEmbeddedLogMode EnableCollisionDetection Gets or sets whether collision detection is enabled. [JsAce(DocContentHtml = \"Enable Collision Detection.\")] public bool EnableCollisionDetection { get; set; } Property Value bool EnableIndividualStepAdjustmentLog Gets or sets whether to enable individual step adjustment logging. [JsAce] public static bool EnableIndividualStepAdjustmentLog { get; set; } Property Value bool EnableMapOnSelectionEnd Gets or sets whether to automatically map selections when they end. [JsAce] public bool EnableMapOnSelectionEnd { get; set; } Property Value bool EnableMotionDependentMachiningResolution Gets or sets whether motion-dependent machining resolution is enabled. [JsAce] public bool EnableMotionDependentMachiningResolution { get; set; } Property Value bool EnableMzLeverWeightingOnTraining [Obsolete] public bool EnableMzLeverWeightingOnTraining { get; set; } Property Value bool EnablePauseOnCollision Gets or sets whether to pause execution when a collision is detected. This property only has an effect if collision detection is enabled. [Obsolete] public bool EnablePauseOnCollision { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure during execution. [JsAce(DocContentHtml = \"Enable Pause On Failure.\")] public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether milling force evaluation is enabled. [JsAce(DocContentHtml = \"Enable milling force evaluation.\")] public bool EnablePhysics { get; set; } Property Value bool EnableSampleNormalization [Obsolete] public bool EnableSampleNormalization { get; set; } Property Value bool Remarks The input normalization deminish the quantity effect. The R-value decrease from 99% to 70% in moment training case from NKUST\\nkust2024-milling-para-training-plan\\workingx.hincproj Don't apply this option. EnableWearEffect Gets or sets whether tool wear effects are enabled in simulation. [JsAce] public bool EnableWearEffect { get; set; } Property Value bool FeedPerCycle Gets a new feed per cycle machining motion resolution instance. [JsAce] public FeedPerCycleMachiningMotionResolution FeedPerCycle { get; } Property Value FeedPerCycleMachiningMotionResolution FeedPerTooth Gets a new feed per tooth machining motion resolution instance. [JsAce] public FeedPerToothMachiningMotionResolution FeedPerTooth { get; } Property Value FeedPerToothMachiningMotionResolution Fixture Gets or sets the fixture. [JsAce] public Fixture Fixture { get; set; } Property Value Fixture Global Global variables. [JsAce(\"Global[$1key]\")] public Dictionary Global { get; } Property Value Dictionary InitSpindleTemperature_C Gets or sets the initial spindle temperature in degrees Celsius. [JsAce(DocContentHtml = \"Spindle Temperature on initialization.\")] public double InitSpindleTemperature_C { get; set; } Property Value double JsAceCompletionProfileJsonArray Internal used. public static JsonArray JsAceCompletionProfileJsonArray { get; } Property Value JsonArray MachiningMotionResolution Gets or sets the machining motion resolution. [JsAce] public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution Gets or sets the machining resolution in millimeters. [JsAce] [Obsolete(\"Use MachiningResolution_mm instead.\")] public double MachiningResolution { get; set; } Property Value double MachiningResolution_mm Gets or sets the machining resolution in millimeters. [JsAce] public double MachiningResolution_mm { get; set; } Property Value double MachiningSession public MachiningSession MachiningSession { get; } Property Value MachiningSession MapTask Task tracking the status of mapping operations. public Task MapTask { get; set; } Property Value Task MillingCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce] public static int MillingCycleDivisionNum { get; set; } Property Value int MillingForceCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce(DocContentHtml = \"Obsoleted. Use MillingCycleDivisionNum instead.\")] [Obsolete(\"Use MillingCycleDivisionNum instead.\")] public static int MillingForceCycleDivisionNum { get; set; } Property Value int NcOptOption Gets or sets the NC optimization options. [JsAce] public NcOptOption NcOptOption { get; set; } Property Value NcOptOption OptEnableDepthCompensation Enables or disables depth compensation during optimization. [JsAce] public bool OptEnableDepthCompensation { get; set; } Property Value bool OptEnableFeedrate Gets or sets whether to enable feed rate optimization in NC optimization. [JsAce] public bool OptEnableFeedrate { get; set; } Property Value bool OptEnableForwardCompensation Enables or disables forward compensation during optimization. [JsAce] public bool OptEnableForwardCompensation { get; set; } Property Value bool OptEnableInterpolation Enables or disables reinterpolation for optimization. [JsAce] public bool OptEnableInterpolation { get; set; } Property Value bool OptEnableSideCompensation Enables or disables side compensation during optimization. [JsAce] public bool OptEnableSideCompensation { get; set; } Property Value bool OptExtendedPostDistance_mm Gets or sets the extended post-distance in millimeters for NC optimization. This is the distance after the current segment that will be considered for optimization. [JsAce] public double OptExtendedPostDistance_mm { get; set; } Property Value double OptExtendedPreDistance_mm Gets or sets the extended pre-distance in millimeters for NC optimization. This is the distance before the current segment that will be considered for optimization. [JsAce] public double OptExtendedPreDistance_mm { get; set; } Property Value double OptFeedrateAssignmentRatio Gets or sets the feedrate assignment ratio for optimization. If the feedrate change exceeds this ratio, the feedrate in the NC line will be updated. [JsAce] public double OptFeedrateAssignmentRatio { get; set; } Property Value double OptMaxAcceleration_mmds2 Maximum acceleration in mm/s² during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxAcceleration_mmds2 { get; set; } Property Value double OptMaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters for optimization. [JsAce] public double OptMaxFeedPerTooth_mm { get; set; } Property Value double OptMaxFeedrate_mmdmin Maximum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMaxFeedrate_mmdmin { get; set; } Property Value double OptMaxJerk_mmds3 Maximum jerk in mm/s³ during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxJerk_mmds3 { get; set; } Property Value double OptMinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters for optimization. [JsAce] public double OptMinFeedPerTooth_mm { get; set; } Property Value double OptMinFeedrate_mmdmin Minimum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMinFeedrate_mmdmin { get; set; } Property Value double OptPreferedForce_N Preferred force in N for optimization. [JsAce] public double OptPreferedForce_N { get; set; } Property Value double OptRapidFeed_mmdmin Rapid feed rate in mm/min for non-cutting movements during optimization. [JsAce] public double OptRapidFeed_mmdmin { get; set; } Property Value double OptSpindlePowerSafetyFactor Safety factor for MAX spindle power during optimization. [JsAce] public double OptSpindlePowerSafetyFactor { get; set; } Property Value double OptSpindlePowerUtilizationFactor Utilization factor for MAX spindle power during optimization. It is the reciprocal of the spindle power safety factor. [JsAce] public double OptSpindlePowerUtilizationFactor { get; set; } Property Value double OptSpindleTorqueSafetyFactor Gets or sets the MAX spindle torque safety factor for NC optimization. [JsAce] public double OptSpindleTorqueSafetyFactor { get; set; } Property Value double OptSpindleTorqueUtilizationFactor Utilization factor for MAX spindle torque during optimization. It is the reciprocal of the spindle torque safety factor. [JsAce] public double OptSpindleTorqueUtilizationFactor { get; set; } Property Value double OptThermalYieldSafetyFactor Safety factor for spindle torque during optimization. [JsAce] public double OptThermalYieldSafetyFactor { get; set; } Property Value double OptThermalYieldUtilizationFactor Utilization factor for thermal yield during optimization. It is the reciprocal of the thermal yield safety factor. [JsAce] public double OptThermalYieldUtilizationFactor { get; set; } Property Value double OptYieldingSafetyFactor Safety factor for yielding during optimization. [JsAce] public double OptYieldingSafetyFactor { get; set; } Property Value double OptYieldingUtilizationFactor Utilization factor for yielding during optimization. It is the reciprocal of the yielding safety factor. [JsAce] public double OptYieldingUtilizationFactor { get; set; } Property Value double ScriptOptions ScriptOptions. public ScriptOptions ScriptOptions { get; set; } Property Value ScriptOptions SessionMessageHost Gets the session message host for displaying messages. [JsAce] public SessionMessageHost SessionMessageHost { get; } Property Value SessionMessageHost StepCount Gets the total number of milling steps. [JsAce] public int StepCount { get; } Property Value int Workpiece Gets or sets the workpiece. [JsAce] public Workpiece Workpiece { get; set; } Property Value Workpiece Methods AddTimeDataByFile(string, string, double, double) Adds time-based data from a file to the time mapping dictionary with specified time bounds in seconds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, double beginTime, double endTime) Parameters key string Key to identify the data relFile string Relative path to the data file beginTime double Beginning time in seconds endTime double Ending time in seconds Returns bool True if the data was successfully added, false otherwise AddTimeDataByFile(string, string, string, string) Adds time-based data from a file to the time mapping dictionary with specified time bounds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, string beginTimeText, string endTimeText) Parameters key string Key to identify the data relFile string Relative path to the data file beginTimeText string Beginning time as text (seconds or TimeSpan format) endTimeText string Ending time as text (seconds or TimeSpan format) Returns bool True if the data was successfully added, false otherwise AdjustedFeedPerCycle(double, double) Gets a new feed per cycle machining motion resolution instance with adjusted scale and minimum linear resolution. [JsAce(\"AdjustedFeedPerCycle($1scale,$2minLinearResolution_mm)\")] public FeedPerCycleMachiningMotionResolution AdjustedFeedPerCycle(double scale, double minLinearResolution_mm = 0) Parameters scale double The scale factor for the resolution. minLinearResolution_mm double The minimum linear resolution in millimeters. Default is 0. Returns FeedPerCycleMachiningMotionResolution A new FeedPerCycleMachiningMotionResolution instance with the specified parameters. AppendMessagesToFile(string, params string[]) Appends messages to a file, optionally filtered by tags. [JsAce(\"AppendMessagesToFile(\\\"dstRelFile\\\",flags)\")] public void AppendMessagesToFile(string dstRelFile, params string[] flags) Parameters dstRelFile string Destination relative file path flags string[] Optional flags to filter messages by tags BeginPreserve() Begin Preserve section in optimzation process. [JsAce(\"BeginPreserve()\")] public void BeginPreserve() BeginSelection(string, AnchorMode, IStepShift) Begin mark on current line. milling step() has not triggered yet. public void BeginSelection(string key, AnchorMode anchorMode = AnchorMode.LineBegin, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the beginning of selection shift IStepShift Step shift to apply BeginSession() Begins a new machining session. Not for end user. public void BeginSession() ClearDefectDisplayee() Clears the defect displayee from the workpiece. [JsAce] public void ClearDefectDisplayee() ClearTimeMappingData() Clears all time mapping data. [JsAce] public void ClearTimeMappingData() Diff(double) Performs a difference analysis on the workpiece geometry to detect variations. [JsAce(\"Diff($1detectionRadius_mm)\")] public void Diff(double detectionRadius_mm) Parameters detectionRadius_mm double Radius for detecting differences EndPreserve() End Preserve section in optimzation process. [JsAce(\"EndPreserve()\")] public void EndPreserve() EndSelection(string, AnchorMode, IStepShift) End mark on current line for selection. public void EndSelection(string key, AnchorMode anchorMode = AnchorMode.LineEnd, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the end of selection shift IStepShift Step shift to apply EndSession() Ends the current machining session. Not for end user. public void EndSession() ErrorMessage(string) Displays an error message in the message host. [JsAce(\"ErrorMessage($1message)\")] public void ErrorMessage(string message) Parameters message string The error message to display FixedPace(double, double) Creates a fixed machining motion resolution with specified parameters. [JsAce(\"FixedPace($1linearResolution_mm, $2rotaryResolution_deg)\")] public FixedMachiningMotionResolution FixedPace(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters rotaryResolution_deg double Rotary resolution in degrees Returns FixedMachiningMotionResolution A new fixed machining motion resolution instance GetMillingStep(int) Retrieves a milling step at the specified index. [JsAce(Snippet = \"GetMillingStep($1\\\"stepIndex\\\")\")] public MachiningStep GetMillingStep(int stepIndex) Parameters stepIndex int Index of the milling step to retrieve Returns MachiningStep The milling step at the specified index GetStickMachiningToolObservationHeight_mm(int) Gets the observation height in millimeters for the specified stick machining tool. [JsAce(\"GetStickMachiningToolObservationHeight_mm($1toolId)\")] public double GetStickMachiningToolObservationHeight_mm(int toolId) Parameters toolId int The ID of the tool Returns double The observation height in millimeters GetUniformContourTrayShiftAngle_deg(int) Gets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"GetUniformContourTrayShiftAngle_deg($1toolId)\")] public double GetUniformContourTrayShiftAngle_deg(int toolId) Parameters toolId int The ID of the tool Returns double The shift angle in degrees LineSelection(string, AnchorMode, IStepShift, AnchorMode, IStepShift) Create a line selection from begin to end mark. public void LineSelection(string key, AnchorMode beginAnchorMode = AnchorMode.LineBegin, IStepShift beginShift = null, AnchorMode endAnchorMode = AnchorMode.LineEnd, IStepShift endShift = null) Parameters key string Identifier key for the selection beginAnchorMode AnchorMode Mode for anchoring the beginning of selection beginShift IStepShift Step shift to apply at beginning endAnchorMode AnchorMode Mode for anchoring the end of selection endShift IStepShift Step shift to apply at end LoadCuttingParaByFile(string) Loads cutting parameters from a file. [JsAce(\"LoadCuttingParaByFile($1\\\"relFile\\\")\")] public void LoadCuttingParaByFile(string relFile) Parameters relFile string File path relative to BaseDirectory. Map(string, FileTimeSection, CycleSamplingMode?) Maps selection data to time section. public Task Map(string key, FileTimeSection fileTimeSection = null, StepTimeShotUtil.CycleSamplingMode? cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters key string Identifier key for the selection fileTimeSection FileTimeSection File time section, or null to use the one associated with the key cycleSamplingMode StepTimeShotUtil.CycleSamplingMode? Cycle sampling mode Returns Task Task representing the asynchronous mapping operation MapByActualTime(string, CycleSamplingMode) Maps machining steps by actual time from a time shot file. [Obsolete] public void MapByActualTime(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string Relative path to the time shot file. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. MapSeriesByCsvFile(string, CycleSamplingMode) Maps machining steps by actual time from a time shot csv file. [JsAce(\"MapSeriesByCsvFile($1timeShotRelFile)\")] public void MapSeriesByCsvFile(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string Relative path to the time shot file. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. MapSingleByCsvFile(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. It is one (step) - one (embedded-data) mapping. [JsAce(Snippet = \"MapSingleByCsvFile($1\\\"csvFile\\\")\")] public void MapSingleByCsvFile(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory Message(string) Displays a message in the message host. [JsAce(\"Message($1message)\")] public void Message(string message) Parameters message string The message to display OptCallPreferFuncIndexDictionary() Gets the dictionary of preferred function index for NC optimization. [JsAce(\"OptCallPreferFuncIndexDictionary()\")] public Dictionary, double> OptCallPreferFuncIndexDictionary() Returns Dictionary, double> Dictionary mapping functions to their preference indexes. OptimizeToFiles(string) Optimizes NC files and saves results using the specified file template. [JsAce(Snippet = \"OptimizeToFiles(\\\"Output/Opt-[NcName]\\\")\", DocContentHtml = \"Optimize To Files by substitude template keywoard \\\"[NcName]\\\"\")] public void OptimizeToFiles(string relFileTemplate = \"Output/Opt-[NcName]\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Pace() A pausable mark for the playing process. The function enables Pause() to take effect. [JsAce(\"Pace();\")] public void Pace() Remarks Waits for the player to signal the next pace. Pause() Pause Player [JsAce(DocContentHtml = \"Pause Player\")] public void Pause() PlayAct(IAct, IGetSentence, CancellationToken?) Plays an act with pacing control. [JsAce] public void PlayAct(IAct act, IGetSentence sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to play. sourceCommand IGetSentence The source command. cancellationToken CancellationToken? Cancellation token. PlayClTeleport(double, double, double, double, double, double) Plays a CL (cutter location) teleport operation. [JsAce] public void PlayClTeleport(double x, double y, double z, double i, double j, double k) Parameters x double X coordinate. y double Y coordinate. z double Z coordinate. i double I vector component. j double J vector component. k double K vector component. PlayCsvFile(string) Plays an Csv file with the specified relative path. [JsAce(\"PlayCsvFile($1\\\"csvFile\\\");\")] public void PlayCsvFile(string relFilePath) Parameters relFilePath string Relative path to the CSV file PlayNc(string, string) Plays NC code directly from a string, executing each action and pacing between them. [JsAce(Snippet = \"PlayNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Play NC. second parameter is the file name alternative shows in the log.\")] public void PlayNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs PlayNcFile(string) Plays an NC file with the specified relative path. [JsAce(\"PlayNcFile($1\\\"ncFile\\\");\")] public void PlayNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file PlayToolingTeleport(int) Plays a tooling teleport operation. [JsAce] public void PlayToolingTeleport(int toolId) Parameters toolId int The tool ID to teleport. Preserve() Preserve one line NC code in optimzation process. [JsAce(\"Preserve()\")] public void Preserve() ProgressMessage(string) Displays a progress message in the message host. [JsAce(\"ProgressMessage($1message)\")] public void ProgressMessage(string message) Parameters message string The progress message to display ReTrainMillingPara(SampleFlag, string, double) Re-trains milling parameters using the specified sample flag. [JsAce(\"ReTrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void ReTrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 0.1) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering ReadCsvByTimeInterpolation(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. It is one (step) - one (embedded-data) mapping. [Obsolete] public void ReadCsvByTimeInterpolation(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory ReadRuntimeGeom(string) Reads runtime geometry from a file. [JsAce(\"ReadRuntimeGeom($1\\\"srcFile\\\")\")] public void ReadRuntimeGeom(string relFile) Parameters relFile string Relative path to the input file RegisterStepVariable(string, string, string, string, Func) Registers a step variable for tracking during execution. [JsAce(Snippet = \"RegisterStepVariable(\\\"$1key\\\",\\\"$2name\\\",\\\"$3unit\\\",\\\"$4formatString\\\",\\\"$5variableFunc\\\")\", DocContentHtml = \"

      Register Step Variable.

      \\\"unit\\\" is nullable

      \\\"formatString\\\" is nullable

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

      Register Step Variable.

      \\\"unit\\\" is nullable

      \\\"formatString\\\" is nullable

      \")] public void RegisterStepVariable(string key, string name, string unit, string formatString, Func variableFunc = null) Parameters key string Unique key to identify the variable name string Human-readable name of the variable unit string Physical unit of the variable (can be null) formatString string Format string for displaying the variable (can be null) variableFunc Func Function to compute the variable value from a milling step (can be null) RemoveFlyPiece() Removes any disconnected or “flying” pieces from the workpiece geometry. [JsAce] public void RemoveFlyPiece() Reset() Reset Player [JsAce(DocContentHtml = \"Reset Player\")] public void Reset() ResetRuntime() Clears internal buffers. [JsAce] public void ResetRuntime() RunNc(string, string) Runs NC code directly from a string. Not for end user. [JsAce(Snippet = \"RunNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Run NC. second parameter is the file name alternative shows in the log.\")] public IEnumerable RunNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs Returns IEnumerable Enumerable sequence of actions to be executed RunNcFile(string) Runs an NC file with the specified relative path. Not for end user. [JsAce(\"RunNcFile($1\\\"ncFile\\\");\")] public IEnumerable RunNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file Returns IEnumerable Enumerable sequence of actions to be executed ScaledFeedPerCycle(double) Gets a new feed per cycle machining motion resolution instance with the specified scale. [JsAce(\"ScaledFeedPerCycle($1scale)\")] public FeedPerCycleMachiningMotionResolution ScaledFeedPerCycle(double scale) Parameters scale double The scale factor for the resolution. Returns FeedPerCycleMachiningMotionResolution A new FeedPerCycleMachiningMotionResolution instance with the specified scale. ScanRuntimeGeomInfDefect() Scans the runtime geometry for defects. After scanning, the scanned defects will render in the workpiece. [JsAce] public bool? ScanRuntimeGeomInfDefect() Returns bool? True if defects are found, false otherwise, or null if the operation cannot be performed. SetNcResolutionFeedPerCycle() Sets NC resolution to feed per cycle mode. public void SetNcResolutionFeedPerCycle() SetNcResolutionFeedPerTooth() Sets NC resolution to feed per tooth mode. public void SetNcResolutionFeedPerTooth() SetNcResolutionFixed(double, double) Sets NC resolution to fixed mode with specified resolution values. public void SetNcResolutionFixed(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters. rotaryResolution_deg double Rotary resolution in degrees. SetStickMachiningToolObservationHeight_mm(int, double) Sets the observation height in millimeters for the specified stick machining tool. [JsAce(\"SetStickMachiningToolObservationHeight_mm($1toolId,$2height_mm)\")] public void SetStickMachiningToolObservationHeight_mm(int toolId, double height) Parameters toolId int The ID of the tool height double The observation height in millimeters to set SetUniformContourTrayShiftAngle_deg(int, double) Sets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"SetUniformContourTrayShiftAngle_deg($1toolId,$2angle_deg)\")] public void SetUniformContourTrayShiftAngle_deg(int toolId, double angle_deg) Parameters toolId int The ID of the tool angle_deg double The shift angle in degrees to set ShiftDistance_mm(double) Creates a distance shift object representing the specified distance in millimeters. public DistanceShift ShiftDistance_mm(double distanceShift_mm) Parameters distanceShift_mm double Distance shift in millimeters Returns DistanceShift Distance shift object ShiftTime_s(double) Creates a time shift object representing the specified time in seconds. public TimeShift ShiftTime_s(double seconds) Parameters seconds double Time in seconds Returns TimeShift Time shift object TrainMillingPara(SampleFlag, string, double, ICuttingPara) Trains milling parameters using the specified sample flag. [JsAce(\"TrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void TrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 0.1, ICuttingPara paraTemplate = null) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering paraTemplate ICuttingPara Optional parameter template for cutting operations. WarningMessage(string) Displays a warning message in the message host. [JsAce(\"WarningMessage($1message)\")] public void WarningMessage(string message) Parameters message string The warning message to display WriteRuntimeGeom(string) Writes the current runtime geometry to a file. [JsAce(\"WriteRuntimeGeom($1\\\"dstFile\\\")\")] public void WriteRuntimeGeom(string relFile) Parameters relFile string Relative path to the output file WriteRuntimeGeomToStl(string, double) Writes the current runtime geometry to an STL file. [JsAce(\"WriteRuntimeGeomToStl($1\\\"dstFile\\\",$2resolution_mm)\")] public void WriteRuntimeGeomToStl(string relFile, double resolution_mm = 0) Parameters relFile string Relative path to the output STL file resolution_mm double Resolution in millimeters (0 for default) WriteShotFiles(double, string) Writes time-series data to shot files with the specified resolution period (alternative parameter order). public void WriteShotFiles(double resolutionPeroid_ms, string relFileTemplate) Parameters resolutionPeroid_ms double Resolution period in milliseconds relFileTemplate string Template for output file path, can include [NcName] placeholder WriteShotFiles(string, double) Writes time-series data to shot files with the specified resolution period. [JsAce(Snippet = \"WriteShotFiles(\\\"Output/[NcName].shot.csv\\\",resolutionPeroid_ms)\", DocContentHtml = \"Write time series data by resolutionPeroid_ms\")] public void WriteShotFiles(string relFileTemplate = \"Output/[NcName].shot.csv\", double resolutionPeroid_ms = 1) Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder resolutionPeroid_ms double Resolution period in milliseconds WriteStepFiles(string) Writes step-series data to files with the specified file template. [JsAce(Snippet = \"WriteStepFiles(\\\"Output/[NcName].step.csv\\\")\", DocContentHtml = \"Write step series data.\")] public void WriteStepFiles(string relFileTemplate = \"Output/[NcName].step.csv\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Events MachiningStepBuilt Gets or sets the action to configure steps during execution. The event will be cleared by the calling of ResetRuntime(). [JsAce(Snippet = \"MachiningStepBuilt+=($1preStep,$2curStep)=>{$3Command};\", DocContentHtml = \"Runtime Step Configuration action. preStep is the Previous Milling Step; curStep is the Current Milling Step. preStep is null if no previous step existed.\")] public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate MachiningStepSelected Event that is triggered when a milling step is selected. The event will be cleared by the calling of ResetRuntime(). [JsAce(Snippet = \"MachiningStepSelected+=($1millingStep)=>{$2Command};\")] public event Action MachiningStepSelected Event Type Action" }, "api/Hi.MachiningProcs.RuntimeController.html": { "href": "api/Hi.MachiningProcs.RuntimeController.html", @@ -3007,7 +3007,7 @@ "api/Hi.MillingForces.Training.MillingTraining.html": { "href": "api/Hi.MillingForces.Training.MillingTraining.html", "title": "Class MillingTraining | HiAPI-C# 2025", - "summary": "Class MillingTraining Namespace Hi.MillingForces.Training Assembly HiNc.dll Provides utilities for milling force training and parameter identification. public static class MillingTraining Inheritance object MillingTraining Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields EnableMzLeverWeighting public static bool EnableMzLeverWeighting Field Value bool EnableSampleNormalization [Obsolete] public static bool EnableSampleNormalization Field Value bool Remarks The input normalization deminish the quantity effect. The R-value decrease from 99% to 70% in moment training case from NKUST\\nkust2024-milling-para-training-plan\\workingx.hincproj Don't apply this option. Properties CycleDivisionNum Division number of a spindle cycle. public static int CycleDivisionNum { get; } Property Value int DefaultParaTemplate Gets or sets the parameter template for cutting operations. public static ICuttingPara DefaultParaTemplate { get; set; } Property Value ICuttingPara StepQuantityNames Gets the names of step quantities used in training. public static string[] StepQuantityNames { get; } Property Value string[] TextAngleOffset_deg Gets the text key for angle offset in degrees. public static string TextAngleOffset_deg { get; } Property Value string TextTrainingErrRatio Gets the text key for training error ratio. public static string TextTrainingErrRatio { get; } Property Value string Methods Convert(ICuttingPara, ICuttingPara, GeneralApt, double, double, IProgress, CancellationToken) Converts one cutting parameter model to another based on the provided parameters. public static ICuttingPara Convert(ICuttingPara src, ICuttingPara resultParaTemplate, GeneralApt apt, double helixAngle_rad, double radialRakeAngle_rad, IProgress messageHost, CancellationToken cancellationToken) Parameters src ICuttingPara Source cutting parameter model resultParaTemplate ICuttingPara Destination template for the converted model apt GeneralApt General apt parameters helixAngle_rad double Helix angle in radians radialRakeAngle_rad double Radial rake angle in radians messageHost IProgress Message host for logging cancellationToken CancellationToken Cancellation token Returns ICuttingPara The converted cutting parameter model Convert(LocalProfileMillingPara, double, double, IProgress, CancellationToken) Converts a LocalProfileMillingPara to a RakeFaceCuttingPara. public static RakeFaceCuttingPara2d Convert(LocalProfileMillingPara src, double helixAngle_rad, double radialRakeAngle_rad, IProgress messageHost, CancellationToken cancellationToken) Parameters src LocalProfileMillingPara Source LocalProfileMillingPara helixAngle_rad double Helix angle in radians radialRakeAngle_rad double Radial rake angle in radians messageHost IProgress Message host for logging cancellationToken CancellationToken Cancellation token Returns RakeFaceCuttingPara2d The converted RakeFaceCuttingPara GatherAndGetUpdate(ConcurrentDictionary>, ClStrip, ICuttingPara, SampleFlag, double, IProgress, CancellationToken) Gathers training samples and updates an existing cutting parameter model. public static ICuttingPara GatherAndGetUpdate(ConcurrentDictionary> stepToTimeShotListDictionary, ClStrip clStrip, ICuttingPara anchorPara, SampleFlag sampleFlags, double outlierRatio, IProgress messageHost, CancellationToken cancellationToken) Parameters stepToTimeShotListDictionary ConcurrentDictionary> Dictionary mapping step indices to time shot lists clStrip ClStrip The cutter location strip anchorPara ICuttingPara The anchor cutting parameter model to update sampleFlags SampleFlag Sample flags indicating which forces to use outlierRatio double Ratio of outliers to exclude messageHost IProgress Message host for logging cancellationToken CancellationToken Cancellation token Returns ICuttingPara The updated cutting parameter model" + "summary": "Class MillingTraining Namespace Hi.MillingForces.Training Assembly HiNc.dll Provides utilities for milling force training and parameter identification. public static class MillingTraining Inheritance object MillingTraining Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields EnableMzLeverWeighting Gets or sets whether Mz lever weighting is enabled during training sample gathering. public static bool EnableMzLeverWeighting Field Value bool EnableSampleNormalization [Obsolete] public static bool EnableSampleNormalization Field Value bool Remarks The input normalization deminish the quantity effect. The R-value decrease from 99% to 70% in moment training case from NKUST\\nkust2024-milling-para-training-plan\\workingx.hincproj Don't apply this option. Properties CycleDivisionNum Division number of a spindle cycle. public static int CycleDivisionNum { get; } Property Value int DefaultParaTemplate Gets or sets the parameter template for cutting operations. public static ICuttingPara DefaultParaTemplate { get; set; } Property Value ICuttingPara StepQuantityNames Gets the names of step quantities used in training. public static string[] StepQuantityNames { get; } Property Value string[] TextAngleOffset_deg Gets the text key for angle offset in degrees. public static string TextAngleOffset_deg { get; } Property Value string TextTrainingErrRatio Gets the text key for training error ratio. public static string TextTrainingErrRatio { get; } Property Value string Methods Convert(ICuttingPara, ICuttingPara, GeneralApt, double, double, IProgress, CancellationToken) Converts one cutting parameter model to another based on the provided parameters. public static ICuttingPara Convert(ICuttingPara src, ICuttingPara resultParaTemplate, GeneralApt apt, double helixAngle_rad, double radialRakeAngle_rad, IProgress messageHost, CancellationToken cancellationToken) Parameters src ICuttingPara Source cutting parameter model resultParaTemplate ICuttingPara Destination template for the converted model apt GeneralApt General apt parameters helixAngle_rad double Helix angle in radians radialRakeAngle_rad double Radial rake angle in radians messageHost IProgress Message host for logging cancellationToken CancellationToken Cancellation token Returns ICuttingPara The converted cutting parameter model Convert(LocalProfileMillingPara, double, double, IProgress, CancellationToken) Converts a LocalProfileMillingPara to a RakeFaceCuttingPara. public static RakeFaceCuttingPara2d Convert(LocalProfileMillingPara src, double helixAngle_rad, double radialRakeAngle_rad, IProgress messageHost, CancellationToken cancellationToken) Parameters src LocalProfileMillingPara Source LocalProfileMillingPara helixAngle_rad double Helix angle in radians radialRakeAngle_rad double Radial rake angle in radians messageHost IProgress Message host for logging cancellationToken CancellationToken Cancellation token Returns RakeFaceCuttingPara2d The converted RakeFaceCuttingPara GatherAndGetUpdate(ConcurrentDictionary>, ClStrip, ICuttingPara, SampleFlag, double, IProgress, CancellationToken) Gathers training samples and updates an existing cutting parameter model. public static ICuttingPara GatherAndGetUpdate(ConcurrentDictionary> stepToTimeShotListDictionary, ClStrip clStrip, ICuttingPara anchorPara, SampleFlag sampleFlags, double outlierRatio, IProgress messageHost, CancellationToken cancellationToken) Parameters stepToTimeShotListDictionary ConcurrentDictionary> Dictionary mapping step indices to time shot lists clStrip ClStrip The cutter location strip anchorPara ICuttingPara The anchor cutting parameter model to update sampleFlags SampleFlag Sample flags indicating which forces to use outlierRatio double Ratio of outliers to exclude messageHost IProgress Message host for logging cancellationToken CancellationToken Cancellation token Returns ICuttingPara The updated cutting parameter model" }, "api/Hi.MillingForces.Training.html": { "href": "api/Hi.MillingForces.Training.html", @@ -3667,7 +3667,7 @@ "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, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase FanucParameterTable Implements IHomeMcConfig IMachineAxisConfig INcDependency IMakeXmlSource Inherited Members 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.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucParameterTable() public FanucParameterTable() FanucParameterTable(XElement) public FanucParameterTable(XElement src) Parameters src XElement Fields 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 ParamMaxSpindleSpeed #3741: Maximum spindle speed (RPM). public const int ParamMaxSpindleSpeed = 3741 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. See SetAxis. public Dictionary AxisParam1006 { get; set; } Property Value Dictionary AxisParam1240 #1240: G28 first reference position per axis. See IHomeMcConfig. See GetHomePosition. See SetHomePosition. public Dictionary AxisParam1240 { 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 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 ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int XName public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class 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, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase FanucParameterTable Implements IHomeMcConfig IMachineAxisConfig INcDependency IMakeXmlSource Inherited Members 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.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucParameterTable() public FanucParameterTable() FanucParameterTable(XElement) public FanucParameterTable(XElement src) Parameters src XElement Fields 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 ParamMaxSpindleSpeed #3741: Maximum spindle speed (RPM). public const int ParamMaxSpindleSpeed = 3741 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 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 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 ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int XName public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.Dependencys.Fanuc.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.html", @@ -3792,7 +3792,7 @@ "api/Hi.NcParsers.Keywords.CoordinateOffset.html": { "href": "api/Hi.NcParsers.Keywords.CoordinateOffset.html", "title": "Class CoordinateOffset | HiAPI-C# 2025", - "summary": "Class CoordinateOffset Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Work coordinate offset state written by LogicSyntaxs.CoordinateOffsetSyntax. 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). public class CoordinateOffset Inheritance object CoordinateOffset Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 0.0, \"Offset_Y\": 0.0, \"Offset_Z\": -100.0 } Properties CoordinateId Active coordinate system ID: “G54”, “G55”, ..., “G59.9”. public string CoordinateId { get; set; } Property Value string Offset_X X component of the coordinate offset (mm). public double Offset_X { get; set; } Property Value double Offset_Y Y component of the coordinate offset (mm). public double Offset_Y { get; set; } Property Value double Offset_Z Z component of the coordinate offset (mm). public double Offset_Z { get; set; } Property Value double" + "summary": "Class CoordinateOffset Namespace Hi.NcParsers.Keywords Assembly HiMech.dll 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). public class CoordinateOffset Inheritance object CoordinateOffset Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) 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 \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 0.0, \"Offset_Y\": 0.0, \"Offset_Z\": -100.0 } Properties CoordinateId Active coordinate system ID: “G54”, “G55”, ..., “G59.9”. public string CoordinateId { get; set; } Property Value string Offset_X X component of the coordinate offset (mm). public double Offset_X { get; set; } Property Value double Offset_Y Y component of the coordinate offset (mm). public double Offset_Y { get; set; } Property Value double Offset_Z Z component of the coordinate offset (mm). public double Offset_Z { get; set; } Property Value double" }, "api/Hi.NcParsers.Keywords.CsScript.html": { "href": "api/Hi.NcParsers.Keywords.CsScript.html", @@ -3927,7 +3927,7 @@ "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 Comment CoordinateOffset Work coordinate offset state written by LogicSyntaxs.CoordinateOffsetSyntax. 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 Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote LocalCoordinateOffset Local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. ISO: G52 X Y Z (local coordinate system shift, additive to G54 series). Cancelled by G52 X0 Y0 Z0 or M30 (program end). Siemens equivalent: TRANS / ATRANS (handled by separate syntax). SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Interfaces 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 IMachineCoordinateDef IParsingDef IPositioningModeDef JsonObject key for positioning mode (G90 absolute / G91 incremental). Written by PositioningModeSyntax, consumed by ProgramXyzSyntax. IProgramXyzDef ISpindleSpeedDef Spindle speed state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO standard: S command. Supported by all major CNC brands. 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” and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. ProgramXyzSyntax composes all entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. IUnparsedTextDef" + "summary": "Namespace Hi.NcParsers.Keywords Classes Comment 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 Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote LocalCoordinateOffset Local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. ISO: G52 X Y Z (local coordinate system shift, additive to G54 series). Cancelled by G52 X0 Y0 Z0 or M30 (program end). Siemens equivalent: TRANS / ATRANS (handled by separate syntax). SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Interfaces 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 IMachineCoordinateDef IParsingDef IPositioningModeDef JsonObject key for positioning mode (G90 absolute / G91 incremental). Written by PositioningModeSyntax, consumed by ProgramXyzSyntax. IProgramXyzDef ISpindleSpeedDef Spindle speed state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO standard: S command. Supported by all major CNC brands. 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” and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. ProgramXyzSyntax composes all entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. IUnparsedTextDef" }, "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html", @@ -5712,7 +5712,7 @@ "dev-doc/build-hinc/controller/index.html": { "href": "dev-doc/build-hinc/controller/index.html", "title": "Controller Page | HiAPI-C# 2025", - "summary": "Controller Page The Controller Page is responsible for configuring and managing the CNC controller settings for the machine tool. Key Models The key models used by the Controller Page are: HardNcEnv MachiningProjectDisplayee The MachiningProjectDisplayee contains IsoCoordinateEntryDisplayee and HeidenhainCoordinateEntryDisplayee. They are used in this GUI. Connection with Main Panel The Controller Page is activated through the Main Panel's Environment menu. It retrieves the MachiningProject from the Main Panel and updates the model. Layout Controller Page Management Panel Head Line Object Management Menu Button file extension is NcEnv The pointed Editor Panel is Management Tabs Panel Title Label Management Tabs Panel Coordinate Table Tab ISO Coordinate Table Panel HardNcEnv.IsoCoordinateTable Display (Note that The XYZ is not sortable on the table.) Datum Preset Table Tab (Only visible for Heidenhain controllers) HeidenhainDatumPresetTable Panel (Note that The XYZ is not sortable on the table.) Show Datum Preset Toggle Button for HeidenhainCoordinateEntryDisplayee Datum Shift Table Tab (Only visible for Heidenhain controllers) (Note that The XYZ is not sortable on the table.) HeidenhainDatumShiftTable Panel Show Datum Shift Toggle Button for HeidenhainCoordinateEntryDisplayee Offset Table Tab MillingToolOffsetTable Panel Set Ideal Offset Dependent on Tool House Checkbox Machine Tab RapidFeedrate_mmdmin Settings ToolingTime Settings Linear Axis Limits Table StrokeLimitXyz_mm Min and Max for X, Y, Z Rotary Axis Table StrokeLimitAbc_rad Min and Max for A, B, C MaxRotarySpeedABC_radds for A, B, C Brand Tab CncBrand Selection Dropdown Syntec Fanuc Heidenhain Siemens Brand-specific Settings Panel (content varies based on selected brand) Config Tab Setting EnableShortestRotary Setting Viewer Panel Viewer Toolbar RenderingCanvas Tool Bar Rendering Items SubMenu See Rendering Items SubMenu from Player extended RenderingCanvas Tool Bar. RenderingCanvas The DispEngine.Displayee is MachiningProjectDisplayee Tip Viewer Panel is not essential in the single user desktop application if this page raises a new window so that there arises a duplicate rendering content with the Main Window. This page should have a code-behind boolean property to add / remove the Viewer Panel. There should not preserve space for the un-existed Viewer Panel. Apply SetViewToIsometricView() on initialization if Viewer Panel has enabled. Tip Add a resizable splitter between the Manage Panel and Viewer Panel to allow users to customize the interface layout according to their needs. Behavior ISO Coordinate Table The ISO coordinate table allows users to edit and manage coordinates for the IsoCoordinateTable. Each entry consists of: An index identifier X, Y, Z coordinate values Action buttons to set the entry to program zero or machine zero Row selection updates IsoCoordinateId. Datum Preset and Shift Tables (Heidenhain) These tables are specific to Heidenhain controllers and provide interfaces for: Setting datum preset positions in HeidenhainDatumPresetTable Configuring datum shifts in HeidenhainDatumShiftTable Visualizing selected datum in the 3D viewer with HeidenhainCoordinateEntryDisplayee Offset Table Manages tool offsets with the following capabilities: Display and edit ideal radius and height values in MillingToolOffsetTable Configure radial and axial wear values Option to automatically set ideal offset based on the MachiningToolHouse configuration Add new tool offset entries (when not using tool house dependency) Machine Configuration Controls machine-specific settings: RapidFeedrate_mmdmin (mm/min) ToolingTime (seconds) Stroke limits (minimum and maximum) for linear axes (StrokeLimitXyz_mm) Stroke limits and maximum speeds for rotary axes (StrokeLimitAbc_rad and MaxRotarySpeedABC_radds) Brand Selection Allows switching between different CNC controller brands via CncBrand: Syntec Fanuc Heidenhain Siemens Each brand may have specialized settings that appear when selected. Config Options General configuration options including: setting EnableShortestRotary optimization Source Code Locations See HiNC GUI Architecture for git repository links. WPF Application Numerical/Controller/ControllerWindow Numerical/Controller/IsoCoordinateTablePanel Numerical/Controller/DatumPresetTablePanel Numerical/Controller/DatumShiftTablePanel Numerical/Controller/ControllerExtendedRenderingCanvasToolBar Web Application Controller/ControllerController.cs - Backend API controller wwwroot/controller/controller-panel.html - Main HTML structure wwwroot/controller/controller-panel.js - Main Vue.js component wwwroot/controller/controller-panel.css - Main styling wwwroot/controller/controller-extended-toolbar.js - Extended toolbar Vue.js component wwwroot/controller/controller-extended-toolbar.css - Toolbar styling wwwroot/controller/tabs/*.js - Individual tab components: coordinate-table-tab.js datum-preset-tab.js datum-shift-tab.js offset-table-tab.js machine-tab.js brand-tab.js config-tab.js" + "summary": "Controller Page The Controller Page is responsible for configuring and managing the CNC controller settings for the machine tool. Key Models The key models used by the Controller Page are: HardNcEnv MachiningProjectDisplayee The MachiningProjectDisplayee contains IsoCoordinateEntryDisplayee and HeidenhainCoordinateEntryDisplayee. They are used in this GUI. Connection with Main Panel The Controller Page is activated through the Main Panel's Environment menu. It retrieves the MachiningProject from the Main Panel and updates the model. Layout Controller Page Management Panel Head Line Object Management Menu Button file extension is NcEnv The pointed Editor Panel is Management Tabs Panel Title Label Management Tabs Panel Coordinate Table Tab ISO Coordinate Table Panel HardNcEnv.IsoCoordinateTable Display (Note that The XYZ is not sortable on the table.) Datum Preset Table Tab (Only visible for Heidenhain controllers) HeidenhainDatumPresetTable Panel (Note that The XYZ is not sortable on the table.) Show Datum Preset Toggle Button for HeidenhainCoordinateEntryDisplayee Datum Shift Table Tab (Only visible for Heidenhain controllers) (Note that The XYZ is not sortable on the table.) HeidenhainDatumShiftTable Panel Show Datum Shift Toggle Button for HeidenhainCoordinateEntryDisplayee Offset Table Tab MillingToolOffsetTable Panel Set Ideal Offset Dependent on Tool House Checkbox Machine Tab RapidFeedrate_mmdmin Settings ToolingTime Settings Linear Axis Limits Table StrokeLimitXyz_mm Min and Max for X, Y, Z Rotary Axis Table StrokeLimitAbc_rad Min and Max for A, B, C MaxRotarySpeedABC_radds for A, B, C Brand Tab CncBrand Selection Dropdown Syntec Fanuc Heidenhain Siemens Brand-specific Settings Panel (content varies based on selected brand) Config Tab EnableShortestRotary Setting Viewer Panel Viewer Toolbar RenderingCanvas Tool Bar Rendering Items SubMenu See Rendering Items SubMenu from Player extended RenderingCanvas Tool Bar. RenderingCanvas The DispEngine.Displayee is MachiningProjectDisplayee Tip Viewer Panel is not essential in the single user desktop application if this page raises a new window so that there arises a duplicate rendering content with the Main Window. This page should have a code-behind boolean property to add / remove the Viewer Panel. There should not preserve space for the un-existed Viewer Panel. Apply SetViewToIsometricView() on initialization if Viewer Panel has enabled. Tip Add a resizable splitter between the Manage Panel and Viewer Panel to allow users to customize the interface layout according to their needs. Behavior ISO Coordinate Table The ISO coordinate table allows users to edit and manage coordinates for the IsoCoordinateTable. Each entry consists of: An index identifier X, Y, Z coordinate values Action buttons to set the entry to program zero or machine zero Row selection updates IsoCoordinateId. Datum Preset and Shift Tables (Heidenhain) These tables are specific to Heidenhain controllers and provide interfaces for: Setting datum preset positions in HeidenhainDatumPresetTable Configuring datum shifts in HeidenhainDatumShiftTable Visualizing selected datum in the 3D viewer with HeidenhainCoordinateEntryDisplayee Offset Table Manages tool offsets with the following capabilities: Display and edit ideal radius and height values in MillingToolOffsetTable Configure radial and axial wear values Option to automatically set ideal offset based on the MachiningToolHouse configuration Add new tool offset entries (when not using tool house dependency) Machine Configuration Controls machine-specific settings: RapidFeedrate_mmdmin (mm/min) ToolingTime (seconds) Stroke limits (minimum and maximum) for linear axes (StrokeLimitXyz_mm) Stroke limits and maximum speeds for rotary axes (StrokeLimitAbc_rad and MaxRotarySpeedABC_radds) Brand Selection Allows switching between different CNC controller brands via CncBrand: Syntec Fanuc Heidenhain Siemens Each brand may have specialized settings that appear when selected. Config Options General configuration options including: EnableShortestRotary optimization Source Code Locations See HiNC GUI Architecture for git repository links. WPF Application Numerical/Controller/ControllerWindow Numerical/Controller/IsoCoordinateTablePanel Numerical/Controller/DatumPresetTablePanel Numerical/Controller/DatumShiftTablePanel Numerical/Controller/ControllerExtendedRenderingCanvasToolBar Web Application Controller/ControllerController.cs - Backend API controller wwwroot/controller/controller-panel.html - Main HTML structure wwwroot/controller/controller-panel.js - Main Vue.js component wwwroot/controller/controller-panel.css - Main styling wwwroot/controller/controller-extended-toolbar.js - Extended toolbar Vue.js component wwwroot/controller/controller-extended-toolbar.css - Toolbar styling wwwroot/controller/tabs/*.js - Individual tab components: coordinate-table-tab.js datum-preset-tab.js datum-shift-tab.js offset-table-tab.js machine-tab.js brand-tab.js config-tab.js" }, "dev-doc/build-hinc/controller/web-implementation.html": { "href": "dev-doc/build-hinc/controller/web-implementation.html", @@ -6022,7 +6022,7 @@ "dev-doc/release-note/index.html": { "href": "dev-doc/release-note/index.html", "title": "Release Note | HiAPI-C# 2025", - "summary": "Release Note HiNc Packages Version 3.1.157 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 執行CSV檔) Fix CSV title parsing to trim surrounding quotes Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support) Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state 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 幾何缺陷掃描) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; 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 嵌入式日誌註解). 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 優化日誌): .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 RuntimeApi by unifying SessionMessageHost 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.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 HiNc Packages Version 3.1.157 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 執行CSV檔) 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 幾何缺陷掃描) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; 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 嵌入式日誌註解). 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 優化日誌): .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 RuntimeApi by unifying SessionMessageHost 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" }, "dev-doc/system-requirements.html": { "href": "dev-doc/system-requirements.html", diff --git a/App/wwwroot/HiAPI-docsite/manifest.json b/App/wwwroot/HiAPI-docsite/manifest.json index 239428c..8a8a776 100644 --- a/App/wwwroot/HiAPI-docsite/manifest.json +++ b/App/wwwroot/HiAPI-docsite/manifest.json @@ -10634,7 +10634,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.CoordinateOffset", - "Summary": "

      Work coordinate offset state written by\nLogicSyntaxs.CoordinateOffsetSyntax.\nProperty names are used as JSON keys via nameof.

      \n

      \nManaged commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9.\nSiemens: G54–G57 + G505–G599 (extended), G500 to cancel.\nHeidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift).\n

      \n" + "Summary": "

      Work coordinate offset state written by\n.\nProperty names are used as JSON keys via nameof.

      \n

      \nManaged commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9.\nSiemens: G54–G57 + G505–G599 (extended), G500 to cancel.\nHeidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift).\n

      \n" }, { "type": "ManagedReference", diff --git a/App/zh-Hans/HiMech.resources.dll b/App/zh-Hans/HiMech.resources.dll index 5c603a0f1881fbbcc92387c02867578ba67b844f..d8be9de1dc5fa6e74b12c743c8d47d1348919072 100644 GIT binary patch delta 230 zcmZq3Xvmn*!7{%i>)pm4CuYW;&F7gFnFKUj{Z1?W^>v;vcJTJ=#yyiZv1Kw^nHcC9 zFff=hG8h=^8R{9D7-%P&8zd*ECL5S0B^#NhS*95pTN)*rC7Y)v8d|0pB&Awfn5HHt z8Jlcg%>G)1vxk9^fti7Up=a}So##xU<< IuVFD000}iY=l}o! diff --git a/App/zh-Hans/HiNc.resources.dll b/App/zh-Hans/HiNc.resources.dll index 48070a50ce4bb94175b69bc935c074ca9e73c036..126a05e65e64fcd963c8f1bd568eb4365ba77c9b 100644 GIT binary patch delta 220 zcmZorX;7Ka!E(!P&dZHGPRxw+H=kz~WD+>M{P2$hpBDRdP44-ryrpN} zOg2AcTg%KjpMjBqnSp^}{^sdit&EJ8n`L>583QdDv>6N-(il=0%o$98&>YA%WH4he z0hWhzi41t^vXV_;-pW?*2Lw|P2OD^Byw)JY`5rR^ E0B0mN!TVG6|d#JaA)8)m4`U_K4s6A6I#7V#{Q-GBMCI zU|=w1WH2z+Gt@IQG0;vlH%LxSO*Sx1N;Wc0vrIEIwlqpKOEynUG_*`HNJ_P|FilNP zGB(+~nEka1XAc7-12Y2yL(k^vI?tJyO&AO|H|p0ih5{K3+6;*d=0G|b2vdRBfWed@ z2}m0O=`;pQAU0$$2GT}Ab!I?ubD*k3pqM2?3Q%nlkY~wY0aOdpn*>y8GCA1L9Bf6e HVKEZ`8xuM| delta 230 zcmZq3Xvmn*!4jeMr*&hG6EkD?=JU*oOad`Bo$F5OL^*Z8zpDIFY{|k+Y?+K!#+G^p z3=F1>3sLNhxMYiOHrGW|qbV z#zvbLv%gm1>}FtOU}j)o=-xbC=Q$IzF@xpiM*UjGP#}Xro57qRjlqH;1xT7Om@$|# zBr_NQS&0m(3`PuwVA(XFXc8D(0O@3)t|Xv(Ga#7=n*qg)f%=RYj3x&gnuD$A IH7sTV0Mv^(V*mgE diff --git a/App/zh-Hant/HiNc.resources.dll b/App/zh-Hant/HiNc.resources.dll index aff9c13966a9d1027ea531df92d2cfa2420c8c7e..a90f3f03700e21b00719fc765ef1cd0133aa98d4 100644 GIT binary patch delta 220 zcmZoLX)u}4!7}&zvY#7!oR}HsZ$8hwl}TVJgY4Iei8ZbZrrmnvKAZ9K zOg6W&b8>UeXJBMtW?*2Lzj?Y)Dxga|RP2GzYQ`8O#`r zfb2vDQy>P3CjnUoK-vH-X9`rE%wP#rnFKU3^Xq%-Om?tKgCMBj>8YG&hnVFiV8d|2A8CsZF8l@PU8yOj=7#W&b zY;I-e~ Dk;gO|