diff --git a/App/Hi.WpfPlus.dll b/App/Hi.WpfPlus.dll index bc18781..7b3ebc8 100644 Binary files a/App/Hi.WpfPlus.dll and b/App/Hi.WpfPlus.dll differ diff --git a/App/HiCbtr.dll b/App/HiCbtr.dll index 4732c5b..ee37b2b 100644 Binary files a/App/HiCbtr.dll and b/App/HiCbtr.dll differ diff --git a/App/HiDisp.dll b/App/HiDisp.dll index a5ea511..dfb8c49 100644 Binary files a/App/HiDisp.dll and b/App/HiDisp.dll differ diff --git a/App/HiGeom.dll b/App/HiGeom.dll index d9e9cf5..6953cfa 100644 Binary files a/App/HiGeom.dll and b/App/HiGeom.dll differ diff --git a/App/HiLicense.dll b/App/HiLicense.dll new file mode 100644 index 0000000..3772162 Binary files /dev/null and b/App/HiLicense.dll differ diff --git a/App/HiMech.dll b/App/HiMech.dll index 6d0913d..2a88ea2 100644 Binary files a/App/HiMech.dll and b/App/HiMech.dll differ diff --git a/App/HiNC-2025-win-desktop.deps.json b/App/HiNC-2025-win-desktop.deps.json index b797943..3c211d9 100644 --- a/App/HiNC-2025-win-desktop.deps.json +++ b/App/HiNC-2025-win-desktop.deps.json @@ -11,9 +11,9 @@ "dependencies": { "AvalonEdit": "6.3.0.90", "FontAwesome.Sharp": "6.3.0", - "Hi.WpfPlus": "3.1.91", - "HiNc": "3.1.107", - "HiNc-Resource": "3.1.7", + "Hi.WpfPlus": "3.1.92", + "HiNc": "3.1.108", + "HiNc-Resource": "3.1.8", "runtimepack.Microsoft.NETCore.App.Runtime.win-x64": "10.0.1", "runtimepack.Microsoft.WindowsDesktop.App.Runtime.win-x64": "10.0.1", "runtimepack.Microsoft.AspNetCore.App.Runtime.win-x64": "10.0.1" @@ -1673,36 +1673,36 @@ } } }, - "Hi.WpfPlus/3.1.91": { + "Hi.WpfPlus/3.1.92": { "dependencies": { - "HiDisp": "3.1.93" + "HiDisp": "3.1.94" }, "runtime": { "lib/net10.0-windows7.0/Hi.WpfPlus.dll": { - "assemblyVersion": "3.1.91.0", - "fileVersion": "3.1.91.0" + "assemblyVersion": "3.1.92.0", + "fileVersion": "3.1.92.0" } } }, - "HiCbtr/3.1.91": { + "HiCbtr/3.1.92": { "dependencies": { - "HiDisp": "3.1.93" + "HiDisp": "3.1.94" }, "runtime": { "lib/net10.0/HiCbtr.dll": { - "assemblyVersion": "3.1.91.0", - "fileVersion": "3.1.91.0" + "assemblyVersion": "3.1.92.0", + "fileVersion": "3.1.92.0" } } }, - "HiDisp/3.1.93": { + "HiDisp/3.1.94": { "dependencies": { - "HiGeom": "3.1.85" + "HiGeom": "3.1.86" }, "runtime": { "lib/net10.0/HiDisp.dll": { - "assemblyVersion": "3.1.93.0", - "fileVersion": "3.1.93.0" + "assemblyVersion": "3.1.94.0", + "fileVersion": "3.1.94.0" } }, "native": { @@ -1720,7 +1720,7 @@ } } }, - "HiGeom/3.1.85": { + "HiGeom/3.1.86": { "dependencies": { "Google.Protobuf": "3.28.3", "Grpc.AspNetCore": "2.66.0", @@ -1731,8 +1731,8 @@ }, "runtime": { "lib/net10.0/HiGeom.dll": { - "assemblyVersion": "3.1.85.0", - "fileVersion": "3.1.85.0" + "assemblyVersion": "3.1.86.0", + "fileVersion": "3.1.86.0" } }, "resources": { @@ -1744,16 +1744,27 @@ } } }, - "HiMech/3.1.98": { + "HiLicense/3.1.86": { + "dependencies": { + "HiGeom": "3.1.86" + }, + "runtime": { + "lib/net10.0/HiLicense.dll": { + "assemblyVersion": "3.1.86.0", + "fileVersion": "3.1.86.0" + } + } + }, + "HiMech/3.1.99": { "dependencies": { "CommandLineParser": "2.9.1", - "HiCbtr": "3.1.91", + "HiCbtr": "3.1.92", "Microsoft.CodeAnalysis.CSharp.Scripting": "5.0.0" }, "runtime": { "lib/net10.0/HiMech.dll": { - "assemblyVersion": "3.1.98.0", - "fileVersion": "3.1.98.0" + "assemblyVersion": "3.1.99.0", + "fileVersion": "3.1.99.0" } }, "resources": { @@ -1768,18 +1779,19 @@ } } }, - "HiNc/3.1.107": { + "HiNc/3.1.108": { "dependencies": { "Google.Protobuf": "3.28.3", "Grpc.AspNetCore": "2.66.0", "Grpc.Net.Client": "2.66.0", - "HiMech": "3.1.98", - "HiUniNc": "3.1.95" + "HiLicense": "3.1.86", + "HiMech": "3.1.99", + "HiUniNc": "3.1.96" }, "runtime": { "lib/net10.0/HiNc.dll": { - "assemblyVersion": "3.1.107.0", - "fileVersion": "3.1.107.0" + "assemblyVersion": "3.1.108.0", + "fileVersion": "3.1.108.0" } }, "resources": { @@ -1791,22 +1803,22 @@ } } }, - "HiNc-Resource/3.1.7": { + "HiNc-Resource/3.1.8": { "runtime": { "lib/net10.0/HiNc-Resource.dll": { - "assemblyVersion": "3.1.7.0", - "fileVersion": "3.1.7.0" + "assemblyVersion": "3.1.8.0", + "fileVersion": "3.1.8.0" } } }, - "HiUniNc/3.1.95": { + "HiUniNc/3.1.96": { "dependencies": { - "HiMech": "3.1.98" + "HiMech": "3.1.99" }, "runtime": { "lib/net10.0/HiUniNc.dll": { - "assemblyVersion": "3.1.95.0", - "fileVersion": "3.1.95.0" + "assemblyVersion": "3.1.96.0", + "fileVersion": "3.1.96.0" } } }, @@ -2179,61 +2191,68 @@ "path": "grpc.net.common/2.66.0", "hashPath": "grpc.net.common.2.66.0.nupkg.sha512" }, - "Hi.WpfPlus/3.1.91": { + "Hi.WpfPlus/3.1.92": { "type": "package", "serviceable": true, - "sha512": "sha512-SgsB6ncLdcOXwlMbeCF9hjf98Kas25HrcmupIROmkR+7ku7OeowEe6vBDELjqeOuJaREr1mimuhnGDWoKMuJZg==", - "path": "hi.wpfplus/3.1.91", - "hashPath": "hi.wpfplus.3.1.91.nupkg.sha512" + "sha512": "sha512-YznvH8xz3oPeWXRnX1kCMCAVZ0qPpksf3NmYX5/uBAt5Hd3aGr+ocM0gA3N3k7vUUblWs6OW22oJ4e/WheSYbg==", + "path": "hi.wpfplus/3.1.92", + "hashPath": "hi.wpfplus.3.1.92.nupkg.sha512" }, - "HiCbtr/3.1.91": { + "HiCbtr/3.1.92": { "type": "package", "serviceable": true, - "sha512": "sha512-jdqMrOTASmyXmCsqu8ThA4WgGBX+NJbyFl/rF+TJG31YCs+Y2rebIkGgmUdSvbhdUAOG2ZKDmiyWaGs2b3Cd/g==", - "path": "hicbtr/3.1.91", - "hashPath": "hicbtr.3.1.91.nupkg.sha512" + "sha512": "sha512-u39MwB30TI56rP2AqqnCD5t8DYO/6g7614qU/BLO0PY72xyuDjOR00bSIsAVpyogryUMQ/gnEI0Xcib7yoKhgA==", + "path": "hicbtr/3.1.92", + "hashPath": "hicbtr.3.1.92.nupkg.sha512" }, - "HiDisp/3.1.93": { + "HiDisp/3.1.94": { "type": "package", "serviceable": true, - "sha512": "sha512-d0saKagSwOM3evfJgRvX5oec8xcPmWWxQNe1lmbqK44dpuR+X3F1D9TjbHs8YJOjD0AS5aLulIIeHfNmaqmgdg==", - "path": "hidisp/3.1.93", - "hashPath": "hidisp.3.1.93.nupkg.sha512" + "sha512": "sha512-/JtLg77lTg17EVmvN7D6wwALMidRJbNVyxuxzQAbLtX4qSbHbmhSr9az3N+tfoO+ZJe7CQkiGxJSFSbjTPf9Lg==", + "path": "hidisp/3.1.94", + "hashPath": "hidisp.3.1.94.nupkg.sha512" }, - "HiGeom/3.1.85": { + "HiGeom/3.1.86": { "type": "package", "serviceable": true, - "sha512": "sha512-dY96yEYcSNRqIbsboCyJYs95TFK+rfAM6qE5ta37xd6Pu3/x7PqDBEI9kEHfeG2WJNWwpM4aWDtKQpPNVEIP/g==", - "path": "higeom/3.1.85", - "hashPath": "higeom.3.1.85.nupkg.sha512" + "sha512": "sha512-rWft+iZD8jJ1gTqIyqrlqkqks79QkirSE/jKf0DSw13HgQpX9kv0jMq4HAESyHGJtXvY/606hugaZG+1VSKTNw==", + "path": "higeom/3.1.86", + "hashPath": "higeom.3.1.86.nupkg.sha512" }, - "HiMech/3.1.98": { + "HiLicense/3.1.86": { "type": "package", "serviceable": true, - "sha512": "sha512-Ycy2o4g2zg8Jm1YYPgWn048sDfzNlwepTqF+7ZgjqFpwUtafs1EfDwok9K20HdtVVa2ygAg/XsP78ANKJ8IwQw==", - "path": "himech/3.1.98", - "hashPath": "himech.3.1.98.nupkg.sha512" + "sha512": "sha512-HEIn2SA9Zeapfxkq3wU5rjbznICDMMhHcE+uPjXzfmlRNtz5RHH1UXucqS6lh/Kz7Lm9U1kQgXwKw6Kygy491Q==", + "path": "hilicense/3.1.86", + "hashPath": "hilicense.3.1.86.nupkg.sha512" }, - "HiNc/3.1.107": { + "HiMech/3.1.99": { "type": "package", "serviceable": true, - "sha512": "sha512-vL3z0yqm3rWqkV3ALSUMSZyRAF8Ma7ggWM7GkrskNnsGflKWCEpmY7YVLF1qR5KVN7j6aJG+vsjAhABiilfzrw==", - "path": "hinc/3.1.107", - "hashPath": "hinc.3.1.107.nupkg.sha512" + "sha512": "sha512-0nJwUOU+ne6sSwSoEQq7O4uyG/iD854olnHR0Soh/KnYm/kjvZIp12LZJnWUdHoDY7UuOw9+Qm+jjwv/AMqTRg==", + "path": "himech/3.1.99", + "hashPath": "himech.3.1.99.nupkg.sha512" }, - "HiNc-Resource/3.1.7": { + "HiNc/3.1.108": { "type": "package", "serviceable": true, - "sha512": "sha512-cteACkvJUNHyIHS6SMJp/Spn51WLMUuOsywFZvhcZylCs1QMxypSn4pnC8vbu5zrSUNvlh4Ed4nHo966fqKwZg==", - "path": "hinc-resource/3.1.7", - "hashPath": "hinc-resource.3.1.7.nupkg.sha512" + "sha512": "sha512-jn4bpKuhtP8T8MmnuRVIutpmvGlc3PEuu/93azoEFB5ZeCwCxNFnpCJojXysuXqaDmeRlvNAiLkakTtIAfp1yw==", + "path": "hinc/3.1.108", + "hashPath": "hinc.3.1.108.nupkg.sha512" }, - "HiUniNc/3.1.95": { + "HiNc-Resource/3.1.8": { "type": "package", "serviceable": true, - "sha512": "sha512-gpQa7SfSJ0IH8YUzLzEOvYMs0Mv2YQXYGSkwFxmHhI90J+75QspKxmP2FlvVR0SwadCFLX8m/14fFStA0Ks4CA==", - "path": "hiuninc/3.1.95", - "hashPath": "hiuninc.3.1.95.nupkg.sha512" + "sha512": "sha512-g9k77byHdH0geBhhyeTDYau0ePJbxoCocOP7fejWPqm+YDdNUVNHTY5tNTRwRyRfnB4Y+Kw+zCLetSIXikiG4w==", + "path": "hinc-resource/3.1.8", + "hashPath": "hinc-resource.3.1.8.nupkg.sha512" + }, + "HiUniNc/3.1.96": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lY+QIRLxVgq1hcv3Rfb8oGNTkO6lG2BwAy+W3daXNY80u3rFE8zz5tSDnvMxn0rHHBDfnSlNeUYAmBglsArlzA==", + "path": "hiuninc/3.1.96", + "hashPath": "hiuninc.3.1.96.nupkg.sha512" }, "MathNet.Numerics/5.0.0": { "type": "package", diff --git a/App/HiNC-2025-win-desktop.dll b/App/HiNC-2025-win-desktop.dll index 46e2a1b..38fa3dc 100644 Binary files a/App/HiNC-2025-win-desktop.dll and b/App/HiNC-2025-win-desktop.dll differ diff --git a/App/HiNC-2025-win-desktop.pdb b/App/HiNC-2025-win-desktop.pdb index 1d79a0c..f74de12 100644 Binary files a/App/HiNC-2025-win-desktop.pdb and b/App/HiNC-2025-win-desktop.pdb differ diff --git a/App/HiNc-Resource.dll b/App/HiNc-Resource.dll index c43eb82..93789ef 100644 Binary files a/App/HiNc-Resource.dll and b/App/HiNc-Resource.dll differ diff --git a/App/HiNc.dll b/App/HiNc.dll index 8ce9c9a..22df2f5 100644 Binary files a/App/HiNc.dll and b/App/HiNc.dll differ diff --git a/App/HiUniNc.dll b/App/HiUniNc.dll index 672b7c9..5b09d6e 100644 Binary files a/App/HiUniNc.dll and b/App/HiUniNc.dll differ diff --git a/App/en/HiGeom.resources.dll b/App/en/HiGeom.resources.dll index 0886f0b..1a37666 100644 Binary files a/App/en/HiGeom.resources.dll and b/App/en/HiGeom.resources.dll differ diff --git a/App/en/HiMech.resources.dll b/App/en/HiMech.resources.dll index c1e3444..578c650 100644 Binary files a/App/en/HiMech.resources.dll and b/App/en/HiMech.resources.dll differ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.ListUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.ListUtil.html index 2e07ee0..6330c8d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.ListUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.ListUtil.html @@ -1406,7 +1406,8 @@ with the list items.

Returns

List<TItem>
-

A new list containing only the items within the specified key range.

+

A new list containing only the items within the specified key range. +return empty new list instead of null if no elements in the boundary.

diff --git a/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html b/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html index fadd6a6..71970f6 100644 --- a/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html +++ b/App/wwwroot/HiAPI-docsite/brief/dev-doc/release-note/index.html @@ -95,6 +95,7 @@
  • MapByActualTimeMapSeriesByCsvFile (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
  • diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/index.html b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/index.html new file mode 100644 index 0000000..aae8239 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/index.html @@ -0,0 +1,120 @@ + + + + + 範例專案 | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + + + +
    +
    + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/mapping-demo/index.html b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/mapping-demo/index.html new file mode 100644 index 0000000..f0e5357 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/mapping-demo/index.html @@ -0,0 +1,122 @@ + + + + + 範例專案:串聯控制器資料及感測器資料至模擬數控路徑並更新銑削係數 | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + + + +
    +
    + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/MillingTraining/demo-training-S50C.png b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/milling-training-dynamometer/demo-training-S50C.png similarity index 100% rename from App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/MillingTraining/demo-training-S50C.png rename to App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/milling-training-dynamometer/demo-training-S50C.png diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.html b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.html new file mode 100644 index 0000000..8f879db --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.html @@ -0,0 +1,128 @@ + + + + + 範例專案:動力計訓練銑削係數 | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + + + +
    +
    + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.jpg b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.jpg new file mode 100644 index 0000000..c77c68b Binary files /dev/null and b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.jpg differ diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.png b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.png new file mode 100644 index 0000000..bcf90a7 Binary files /dev/null and b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.png differ diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/index.html b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/index.html index 296c951..ac59558 100644 --- a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/index.html +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/Mapping/index.html @@ -348,6 +348,12 @@ Map("region2"); // 手動執行映射
  • 控制器資料及感測器資料皆含實際時間,故可依此設定兩者相應錨點
  • 串接後可使模擬步索引感測器資料。

    +

    串接映射示意圖

    +

    如示意圖:

    +
    Note

    為何使用兩層映射?

    @@ -383,6 +389,10 @@ MapSingleByCsvFile("Data/controller.csv"); MapSeriesByCsvFile("Data/sensor.csv");
    +

    範例專案

    + diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/MillingTraining/index.html b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/MillingTraining/index.html index d20e86b..d4817fe 100644 --- a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/MillingTraining/index.html +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/MillingTraining/index.html @@ -167,15 +167,11 @@ ReTrainMillingPara(Fz|Mx|My|Mz, "StainlessSteel.mp");
    Tip

    較大的 MillingCycleDivisionNum(API) 設定可以得到更準確的 AngleOffset 結果,進而訓練出更準確的銑削係數。

    -

    範例專案-動力計訓練銑削係數

    -

    使用動力計訓練銑削係數的範例專案可於此下載:

    -

    https://superhightech-gitea.webredirect.org/HiNC-Deploy/Demo-Para-Training-S50C-202501

    -

    此專案使用 Kistler 動力計量測資料,透過一對多映射-指定數控路徑及時間局部映射方式,訓練 S50C 材料的銑削係數。

    -

    demo-training-S50C.png

    -
    -
    Tip
    -

    加工路徑與切削條件可以根據現場情況自由更改。

    -
    +

    範例專案

    + diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.jpg b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.jpg new file mode 100644 index 0000000..6ed4d4b Binary files /dev/null and b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.jpg differ diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.png b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.png new file mode 100644 index 0000000..3a61ad7 Binary files /dev/null and b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.png differ diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html index c1e444d..5f3a4d2 100644 --- a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/script/NcOptimization/index.html @@ -144,7 +144,7 @@ OptPreferedForce_N = <實數>;
    - ExtendedDistance + OptExtendedDistance
    優化程序中的有切削區域等效計算的長度
    +
  • + + 範例 + + +
  • 理論與技術 diff --git a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/toc.json b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/toc.json index 9414efa..97294ba 100644 --- a/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/toc.json +++ b/App/wwwroot/HiAPI-docsite/brief/user-guide/zh-Hant/toc.json @@ -1,2 +1,2 @@ -{"items":[{"name":"HiNC 使用說明","href":"index.html","topicHref":"index.html"},{"name":"使用者條款","href":"license/index.html","topicHref":"license/index.html"},{"name":"HiNC啟用","items":[{"name":"Windows系統啟用","href":"startup/windows.html","topicHref":"startup/windows.html"},{"name":"單機多站配置","href":"startup/multi-station.html","topicHref":"startup/multi-station.html"},{"name":"多主機授權設置","href":"startup/delegate-auth.html","topicHref":"startup/delegate-auth.html"},{"name":"教學視頻","href":"startup/tutorial.html","topicHref":"startup/tutorial.html"}]},{"name":"系統","items":[{"name":"檔案總管","href":"system/file-explorer.html","topicHref":"system/file-explorer.html"}]},{"name":"設備","items":[{"name":"錨點","href":"mech/anchor.html","topicHref":"mech/anchor.html"},{"name":"工具機建置","href":"equipment/build-machine-tool.html","topicHref":"equipment/build-machine-tool.html"},{"name":"冷卻液","href":"equipment/coolant.html","topicHref":"equipment/coolant.html"}]},{"name":"控制器","items":[{"name":"海德漢支援","href":"controllers/heidenhain-support.html","topicHref":"controllers/heidenhain-support.html"},{"name":"通用NC碼支援","href":"controllers/iso-nc-support.html","topicHref":"controllers/iso-nc-support.html"}]},{"name":"加工工具","items":[{"name":"銑刀","href":"milling-tool/cutter.html","topicHref":"milling-tool/cutter.html"},{"name":"APT工具","href":"milling-tool/apt.html","topicHref":"milling-tool/apt.html"},{"name":"刀片式刃雕","href":"milling-tool/insert-cutter/index.html","topicHref":"milling-tool/insert-cutter/index.html"},{"name":"徑向角度量測","href":"milling-tool/radial-angle-measurement.html","topicHref":"milling-tool/radial-angle-measurement.html"},{"name":"智慧刀把","href":"milling-tool/smart-tool-holder.html","topicHref":"milling-tool/smart-tool-holder.html"}]},{"name":"腳本命令","href":"script/index.html","topicHref":"script/index.html","items":[{"name":"文件任務","href":"script/Doc-Task/index.html","topicHref":"script/Doc-Task/index.html"},{"name":"執行NC檔案","href":"script/PlayNcFile/index.html","topicHref":"script/PlayNcFile/index.html"},{"name":"執行NC碼字串","href":"script/PlayNc/index.html","topicHref":"script/PlayNc/index.html"},{"name":"執行CSV檔案","href":"script/PlayCsvFile/play-csv-file.html","topicHref":"script/PlayCsvFile/play-csv-file.html"},{"name":"播放器控制","href":"script/PlayerControl/index.html","topicHref":"script/PlayerControl/index.html"},{"name":"事件處理","href":"script/Events/index.html","topicHref":"script/Events/index.html"},{"name":"屬性設定","href":"script/Properties/index.html","topicHref":"script/Properties/index.html"},{"name":"動作操作","href":"script/ActOperations/index.html","topicHref":"script/ActOperations/index.html"},{"name":"加工步變數","href":"script/StepVariables/index.html","topicHref":"script/StepVariables/index.html"},{"name":"訊息處理","href":"script/Messages/index.html","topicHref":"script/Messages/index.html"},{"name":"運行時管理","href":"script/RuntimeManagement/index.html","topicHref":"script/RuntimeManagement/index.html"},{"name":"碰撞檢測","href":"script/Collision/index.html","topicHref":"script/Collision/index.html"},{"name":"離料","href":"script/FlyPiece/index.html","topicHref":"script/FlyPiece/index.html"},{"name":"幾何差異","href":"script/GeomDiff/index.html","topicHref":"script/GeomDiff/index.html"},{"name":"映射","href":"script/Mapping/index.html","topicHref":"script/Mapping/index.html"},{"name":"銑削訓練","href":"script/MillingTraining/index.html","topicHref":"script/MillingTraining/index.html"},{"name":"載入切削參數","href":"script/LoadCuttingPara/index.html","topicHref":"script/LoadCuttingPara/index.html"},{"name":"物理仿真設定","href":"script/Physics/index.html","topicHref":"script/Physics/index.html"},{"name":"NC優化","href":"script/NcOptimization/index.html","topicHref":"script/NcOptimization/index.html"},{"name":"解析度","href":"script/Resolution/index.html","topicHref":"script/Resolution/index.html"},{"name":"運行時幾何","href":"script/RuntimeGeom/index.html","topicHref":"script/RuntimeGeom/index.html"},{"name":"輸出Shot檔案","href":"script/WriteShotFiles/index.html","topicHref":"script/WriteShotFiles/index.html"},{"name":"輸出Step檔案","href":"script/WriteStepFiles/index.html","topicHref":"script/WriteStepFiles/index.html"},{"name":"刀具與智慧刀把設置","href":"script/ToolSetup/index.html","topicHref":"script/ToolSetup/index.html"}]},{"name":"輸出","items":[{"name":"模擬步階輸出資訊","href":"output/simulation-step-output.html","topicHref":"output/simulation-step-output.html"}]},{"name":"優化","items":[{"name":"NC優化","href":"optimization/index.html","topicHref":"optimization/index.html"}]},{"name":"理論與技術","items":[{"name":"銑削物理座標系","href":"theory-and-technique/milling-physics-coordinates.html","topicHref":"theory-and-technique/milling-physics-coordinates.html"},{"name":"評估製程可加工性","href":"availability/index.html","topicHref":"availability/index.html"},{"name":"刀具壽命與磨耗","href":"technique/wear.html","topicHref":"technique/wear.html"},{"name":"第一離隙角避讓","href":"technique/relief-face-avoidance/index.html","topicHref":"technique/relief-face-avoidance/index.html"},{"name":"仿真CPU使用率","href":"theory-and-technique/cpu-usage/index.html","topicHref":"theory-and-technique/cpu-usage/index.html"}]}]} +{"items":[{"name":"HiNC 使用說明","href":"index.html","topicHref":"index.html"},{"name":"使用者條款","href":"license/index.html","topicHref":"license/index.html"},{"name":"HiNC啟用","items":[{"name":"Windows系統啟用","href":"startup/windows.html","topicHref":"startup/windows.html"},{"name":"單機多站配置","href":"startup/multi-station.html","topicHref":"startup/multi-station.html"},{"name":"多主機授權設置","href":"startup/delegate-auth.html","topicHref":"startup/delegate-auth.html"},{"name":"教學視頻","href":"startup/tutorial.html","topicHref":"startup/tutorial.html"}]},{"name":"系統","items":[{"name":"檔案總管","href":"system/file-explorer.html","topicHref":"system/file-explorer.html"}]},{"name":"設備","items":[{"name":"錨點","href":"mech/anchor.html","topicHref":"mech/anchor.html"},{"name":"工具機建置","href":"equipment/build-machine-tool.html","topicHref":"equipment/build-machine-tool.html"},{"name":"冷卻液","href":"equipment/coolant.html","topicHref":"equipment/coolant.html"}]},{"name":"控制器","items":[{"name":"海德漢支援","href":"controllers/heidenhain-support.html","topicHref":"controllers/heidenhain-support.html"},{"name":"通用NC碼支援","href":"controllers/iso-nc-support.html","topicHref":"controllers/iso-nc-support.html"}]},{"name":"加工工具","items":[{"name":"銑刀","href":"milling-tool/cutter.html","topicHref":"milling-tool/cutter.html"},{"name":"APT工具","href":"milling-tool/apt.html","topicHref":"milling-tool/apt.html"},{"name":"刀片式刃雕","href":"milling-tool/insert-cutter/index.html","topicHref":"milling-tool/insert-cutter/index.html"},{"name":"徑向角度量測","href":"milling-tool/radial-angle-measurement.html","topicHref":"milling-tool/radial-angle-measurement.html"},{"name":"智慧刀把","href":"milling-tool/smart-tool-holder.html","topicHref":"milling-tool/smart-tool-holder.html"}]},{"name":"腳本命令","href":"script/index.html","topicHref":"script/index.html","items":[{"name":"文件任務","href":"script/Doc-Task/index.html","topicHref":"script/Doc-Task/index.html"},{"name":"執行NC檔案","href":"script/PlayNcFile/index.html","topicHref":"script/PlayNcFile/index.html"},{"name":"執行NC碼字串","href":"script/PlayNc/index.html","topicHref":"script/PlayNc/index.html"},{"name":"執行CSV檔案","href":"script/PlayCsvFile/play-csv-file.html","topicHref":"script/PlayCsvFile/play-csv-file.html"},{"name":"播放器控制","href":"script/PlayerControl/index.html","topicHref":"script/PlayerControl/index.html"},{"name":"事件處理","href":"script/Events/index.html","topicHref":"script/Events/index.html"},{"name":"屬性設定","href":"script/Properties/index.html","topicHref":"script/Properties/index.html"},{"name":"動作操作","href":"script/ActOperations/index.html","topicHref":"script/ActOperations/index.html"},{"name":"加工步變數","href":"script/StepVariables/index.html","topicHref":"script/StepVariables/index.html"},{"name":"訊息處理","href":"script/Messages/index.html","topicHref":"script/Messages/index.html"},{"name":"運行時管理","href":"script/RuntimeManagement/index.html","topicHref":"script/RuntimeManagement/index.html"},{"name":"碰撞檢測","href":"script/Collision/index.html","topicHref":"script/Collision/index.html"},{"name":"離料","href":"script/FlyPiece/index.html","topicHref":"script/FlyPiece/index.html"},{"name":"幾何差異","href":"script/GeomDiff/index.html","topicHref":"script/GeomDiff/index.html"},{"name":"映射","href":"script/Mapping/index.html","topicHref":"script/Mapping/index.html"},{"name":"銑削訓練","href":"script/MillingTraining/index.html","topicHref":"script/MillingTraining/index.html"},{"name":"載入切削參數","href":"script/LoadCuttingPara/index.html","topicHref":"script/LoadCuttingPara/index.html"},{"name":"物理仿真設定","href":"script/Physics/index.html","topicHref":"script/Physics/index.html"},{"name":"NC優化","href":"script/NcOptimization/index.html","topicHref":"script/NcOptimization/index.html"},{"name":"解析度","href":"script/Resolution/index.html","topicHref":"script/Resolution/index.html"},{"name":"運行時幾何","href":"script/RuntimeGeom/index.html","topicHref":"script/RuntimeGeom/index.html"},{"name":"輸出Shot檔案","href":"script/WriteShotFiles/index.html","topicHref":"script/WriteShotFiles/index.html"},{"name":"輸出Step檔案","href":"script/WriteStepFiles/index.html","topicHref":"script/WriteStepFiles/index.html"},{"name":"刀具與智慧刀把設置","href":"script/ToolSetup/index.html","topicHref":"script/ToolSetup/index.html"}]},{"name":"輸出","items":[{"name":"模擬步階輸出資訊","href":"output/simulation-step-output.html","topicHref":"output/simulation-step-output.html"}]},{"name":"優化","items":[{"name":"NC優化","href":"optimization/index.html","topicHref":"optimization/index.html"}]},{"name":"範例","href":"examples/index.html","topicHref":"examples/index.html","items":[{"name":"動力計訓練銑削係數","href":"examples/milling-training-dynamometer/index.html","topicHref":"examples/milling-training-dynamometer/index.html"},{"name":"串聯控制器資料及感測器資料","href":"examples/mapping-demo/index.html","topicHref":"examples/mapping-demo/index.html"}]},{"name":"理論與技術","items":[{"name":"銑削物理座標系","href":"theory-and-technique/milling-physics-coordinates.html","topicHref":"theory-and-technique/milling-physics-coordinates.html"},{"name":"評估製程可加工性","href":"availability/index.html","topicHref":"availability/index.html"},{"name":"刀具壽命與磨耗","href":"technique/wear.html","topicHref":"technique/wear.html"},{"name":"第一離隙角避讓","href":"technique/relief-face-avoidance/index.html","topicHref":"technique/relief-face-avoidance/index.html"},{"name":"仿真CPU使用率","href":"theory-and-technique/cpu-usage/index.html","topicHref":"theory-and-technique/cpu-usage/index.html"}]}]} diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json index 0393a1d..528a89e 100644 --- a/App/wwwroot/HiAPI-docsite/index.json +++ b/App/wwwroot/HiAPI-docsite/index.json @@ -357,7 +357,7 @@ "api/Hi.Common.Collections.ListUtil.html": { "href": "api/Hi.Common.Collections.ListUtil.html", "title": "Class ListUtil | HiAPI-C# 2025", - "summary": "Class ListUtil Namespace Hi.Common.Collections Assembly HiGeom.dll Provides utility methods for working with lists and collections. public static class ListUtil Inheritance object ListUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetCeilBySeek(IList, TKey, Func, out TItem, out int, int, SeekDirection) Gets the ceil item by seeking with the specified direction. public static SearchResult GetCeilBySeek(this IList src, TKey key, Func getKeyFunc, out TItem ceilValue, out int ceilIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. ceilValue TItem The output ceil value. ceilIndex int The output ceil index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. GetCeilIndexBySeek(IList, TKey, Func, out int, int, SeekDirection) Gets the ceil index by seeking with the specified direction. public static SearchResult GetCeilIndexBySeek(this IList src, TKey key, Func getKeyFunc, out int ceilIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. ceilIndex int The output ceil index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. Remarks The Free seek direction does not loss additional performance. The seek direction only effect the resulting value by the seekingStartIndex bound. GetCeilIndex(IList, ItemKey, Func, out int) Gets the ceiling index of an item in a sorted list based on a key comparison. public static SearchResult GetCeilIndex(this IList sortedItems, ItemKey key, Func comparingFunc, out int index) Parameters sortedItems IList The sorted list to search in. key ItemKey The key to search for. comparingFunc Func A function that compares an item to the key. index int When this method returns, contains the index of the ceiling item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters Item The type of items in the list. ItemKey The type of the key to search for. GetCeilIndex(IList, TKey, Func, out int) Gets the ceiling index of an item in a sorted list based on a key selector function. public static SearchResult GetCeilIndex(this IList sortedItems, TKey keyQuantity, Func getKeyQuantityFunc, out int index) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. keyQuantity TKey The key to search for. getKeyQuantityFunc Func A function that extracts the key from an item. index int When this method returns, contains the index of the ceiling item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetCeil(IList, TKey, Func, out Item) Gets the ceiling item in a sorted list based on a key selector function. public static SearchResult GetCeil(this IList sortedItems, TKey keyQuantity, Func getKeyQuantityFunc, out Item dst) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. keyQuantity TKey The key to search for. getKeyQuantityFunc Func A function that extracts the key from an item. dst Item When this method returns, contains the ceiling item if found; otherwise, the default value for the type. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetFloorBySeek(IList, TKey, Func, out TItem, out int, int, SeekDirection) Gets the floor item by seeking with the specified direction. public static SearchResult GetFloorBySeek(this IList src, TKey key, Func getKeyFunc, out TItem floorValue, out int floorIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. floorValue TItem The output floor value. floorIndex int The output floor index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. GetFloorIndexBySeek(IList, TKey, Func, out int, int, SeekDirection) Gets the floor index by seeking with the specified direction. public static SearchResult GetFloorIndexBySeek(this IList src, TKey key, Func getKeyFunc, out int floorIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. floorIndex int The output floor index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. Remarks The Free seek direction does not loss additional performance. The seek direction only effect the resulting value by the seekingStartIndex bound. GetFloorIndex(IList, ItemKey, Func, out int) Gets the floor index of an item in a sorted list based on a key comparison. public static SearchResult GetFloorIndex(this IList sortedItems, ItemKey key, Func comparingFunc, out int index) Parameters sortedItems IList The sorted list to search in. key ItemKey The key to search for. comparingFunc Func A function that compares an item to the key. index int When this method returns, contains the index of the floor item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters Item The type of items in the list. ItemKey The type of the key to search for. GetFloorIndex(IList, TKey, Func, out int) Gets the floor index of an item in a sorted list based on a key selector function. public static SearchResult GetFloorIndex(this IList sortedItems, TKey key, Func getKeyFunc, out int index) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. index int When this method returns, contains the index of the floor item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetFloor(IList, TKey, Func, out Item) Gets the floor item in a sorted list based on a key selector function. public static SearchResult GetFloor(this IList sortedItems, TKey keyQuantity, Func getKeyQuantityFunc, out Item dst) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. keyQuantity TKey The key to search for. getKeyQuantityFunc Func A function that extracts the key from an item. dst Item When this method returns, contains the floor item if found; otherwise, the default value for the type. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetIndexBasedEnumerable(IList) Creates an enumerable that provides access to all elements in a list by index. public static ListIndexBasedEnumerable GetIndexBasedEnumerable(this IList src) Parameters src IList The source list Returns ListIndexBasedEnumerable A ListIndexBasedEnumerable for the entire list Type Parameters TItem The type of elements in the list GetIndexBasedEnumerable(IList, int, int) Creates an enumerable that provides access to a range of elements in a list by index. public static ListIndexBasedEnumerable GetIndexBasedEnumerable(this IList src, int begin, int end) Parameters src IList The source list begin int The starting index (inclusive) end int The ending index (exclusive) Returns ListIndexBasedEnumerable A ListIndexBasedEnumerable for the specified range Type Parameters TItem The type of elements in the list GetIndexByBinarySearch(IList, TItem) Performs a binary search on the specified collection. public static int GetIndexByBinarySearch(this IList sortedItems, TItem value) Parameters sortedItems IList The list to be searched. value TItem The value to search for. Returns int Type Parameters TItem The type of the item. GetIndexByBinarySearch(IList, TItem, IComparer) Performs a binary search on the specified collection. public static int GetIndexByBinarySearch(this IList sortedItems, TItem value, IComparer comparer) Parameters sortedItems IList The list to be searched. value TItem The value to search for. comparer IComparer The comparer that is used to compare the value with the list items. Returns int Type Parameters TItem The type of the item. GetIndexByBinarySearch(IList, TSearch, Func) Performs a binary search on the specified collection. public static int GetIndexByBinarySearch(this IList sortedItems, TSearch value, Func comparer) Parameters sortedItems IList The list to be searched. value TSearch The value to search for. comparer Func The comparer that is used to compare the value with the list items. Returns int Type Parameters TItem The type of the item. TSearch The type of the searched item. GetInterpolatedBoundary(List, double, double, Func, out TItem, out TItem, out TItem) Gets interpolated boundary items from a list based on a key value and interval. public static void GetInterpolatedBoundary(this List scpList, double z, double zInterval, Func keyFunc, out TItem cur, out TItem floor, out TItem ceil) where TItem : IAdditionOperators, IMultiplyOperators Parameters scpList List The source list. z double The key value to find or interpolate at. zInterval double The interval to consider around the key value. keyFunc Func A function that extracts the key from an item. cur TItem When this method returns, contains the interpolated item at the key value. floor TItem When this method returns, contains the floor item. ceil TItem When this method returns, contains the ceiling item. Type Parameters TItem The type of items in the list, which must support addition and multiplication operators. GetInterpolatedValue(List, double, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a double key, using operators for addition and multiplication. public static TItem GetInterpolatedValue(this List sortedItems, double keyQuantity, Func getKeyQuantityFunc, ListUtil.OuterPolationMode outerPolationMode) where TItem : IAdditionOperators, IMultiplyOperators Parameters sortedItems List The sorted list to interpolate from. keyQuantity double The key to find or interpolate at. getKeyQuantityFunc Func A function that extracts the key from an item. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list, which must support addition and multiplication operators. GetInterpolatedValue(List, double, Func, Func, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a double key. public static TItem GetInterpolatedValue(this List sortedItems, double key, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc, ListUtil.OuterPolationMode outerPolationMode) Parameters sortedItems List The sorted list to interpolate from. key double The key to find or interpolate at. getKeyFunc Func A function that extracts the key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list. GetInterpolatedValue(List, TimeSpan, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a TimeSpan key, using operators for addition and multiplication. public static TItem GetInterpolatedValue(this List sortedItems, TimeSpan keyQuantity, Func getKeyQuantityFunc, ListUtil.OuterPolationMode outerPolationMode) where TItem : IAdditionOperators, IMultiplyOperators Parameters sortedItems List The sorted list to interpolate from. keyQuantity TimeSpan The TimeSpan key to find or interpolate at. getKeyQuantityFunc Func A function that extracts the TimeSpan key from an item. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list, which must support addition and multiplication operators. GetInterpolatedValue(List, TimeSpan, Func, Func, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a TimeSpan key. public static TItem GetInterpolatedValue(this List sortedItems, TimeSpan key, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc, ListUtil.OuterPolationMode outerPolationMode) Parameters sortedItems List The sorted list to interpolate from. key TimeSpan The TimeSpan key to find or interpolate at. getKeyFunc Func A function that extracts the TimeSpan key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list. GetInterpolatedValue(List, TKey, Func, Func, Func, Func, Func, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a key using custom comparison and arithmetic functions. public static TItem GetInterpolatedValue(this List sortedItems, TKey key, Func getKeyFunc, Func keyCompareFunc, Func keyMinusFunc, Func keyDivFunc, Func addingFunc, Func scalingFunc, ListUtil.OuterPolationMode outerPolationMode) Parameters sortedItems List The sorted list of items key TKey The key to search for getKeyFunc Func A function that extracts the key from an item keyCompareFunc Func A function that compares two keys keyMinusFunc Func A function that subtracts one key from another keyDivFunc Func A function that divides one key by another addingFunc Func A function that adds two items scalingFunc Func A function that scales an item by a factor outerPolationMode ListUtil.OuterPolationMode The mode for handling values outside the range Returns TItem The interpolated value Type Parameters TKey The type of the key TItem The type of elements in the list GetListByKeyBoundary(List, Func, TKey, bool, TKey, bool) Gets a subset of a sorted list based on key boundaries. public static List GetListByKeyBoundary(this List sortedItems, Func getKeyQuantityFunc, TKey begin, bool isIncludingBeginFloor, TKey end, bool isIncludingEndCeil) where TKey : IComparable Parameters sortedItems List The sorted list to filter. getKeyQuantityFunc Func A function that extracts the key from an item. begin TKey The beginning key of the range. isIncludingBeginFloor bool Whether to include the floor of the beginning key. end TKey The ending key of the range. isIncludingEndCeil bool Whether to include the ceiling of the ending key. Returns List A new list containing only the items within the specified key range. Type Parameters TKey The type of the key, which must be comparable. TItem The type of items in the list. GetNearestIndex(IList, TItemKey, Func, out int) Finds the index of the element in a sorted list that is nearest to the specified key. public static SearchResult GetNearestIndex(this IList src, TItemKey key, Func itemToKeyDistanceFunc, out int index) Parameters src IList The source list key TItemKey The key to search for itemToKeyDistanceFunc Func A function that calculates the distance between an item and the key index int When this method returns, contains the index of the nearest element if found; otherwise, -1 Returns SearchResult A BinarySearchResult indicating the result of the search Type Parameters TItem The type of elements in the list TItemKey The type of the key to search for GetNearestIndex(IList, TItemKey, Func, Func, out int) Finds the index of the element in a sorted list that is nearest to the specified key using custom comparison functions. public static SearchResult GetNearestIndex(this IList src, TItemKey key, Func itemCompareToKeyFunc, Func itemToKeyDistanceFunc, out int index) Parameters src IList The source list (must be in ascending order) key TItemKey The key to search for itemCompareToKeyFunc Func A function that compares an item to the key itemToKeyDistanceFunc Func A function that calculates the distance between an item and the key index int When this method returns, contains the index of the nearest element if found; otherwise, -1 Returns SearchResult A BinarySearchResult indicating the result of the search Type Parameters TItem The type of elements in the list TItemKey The type of the key to search for Exceptions InvalidProgramException Thrown when an unexpected search result occurs GetSubListWithInterpolatedHeadAndTail(List, double, double, Func, Func, Func) Creates a new list with interpolated head and tail items based on the specified double key range. public static List GetSubListWithInterpolatedHeadAndTail(this List src, double beginKey, double endKey, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. beginKey double The beginning key of the range. endKey double The ending key of the range. getKeyFunc Func A function that extracts the double key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with interpolated head and tail items. Type Parameters TItem The type of items in the list. GetSubListWithInterpolatedHeadAndTail(List, TimeSpan, TimeSpan, Func, Func, Func) Creates a new list with interpolated head and tail items based on the specified TimeSpan key range. public static List GetSubListWithInterpolatedHeadAndTail(this List src, TimeSpan beginKey, TimeSpan endKey, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. beginKey TimeSpan The beginning TimeSpan key of the range. endKey TimeSpan The ending TimeSpan key of the range. getKeyFunc Func A function that extracts the TimeSpan key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with interpolated head and tail items. Type Parameters TItem The type of items in the list. GetSubListWithInterpolatedHeadAndTail(List, TKey, TKey, Func, Func, Func, Func, Func, Func) Creates a new list with interpolated head and tail items based on the specified key range. public static List GetSubListWithInterpolatedHeadAndTail(this List src, TKey beginKey, TKey endKey, Func getKeyFunc, Func keyCompareFunc, Func keyMinusFunc, Func keyDivFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. beginKey TKey The beginning key of the range. endKey TKey The ending key of the range. getKeyFunc Func A function that extracts the key from an item. keyCompareFunc Func A function that compares two keys. keyMinusFunc Func A function that subtracts one key from another. keyDivFunc Func A function that divides one key by another to get a ratio. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with interpolated head and tail items. Type Parameters TKey The type of the key. TItem The type of items in the list. GetSubListWithInterpolatedTail(List, TimeSpan, Func, Func, Func) Creates a new list with an interpolated tail item based on the specified TimeSpan key. public static List GetSubListWithInterpolatedTail(this List src, TimeSpan endKey, Func getKeyFunc, Func addingFunc, Func scalingFunc) Parameters src List The source list. endKey TimeSpan The ending TimeSpan key for interpolation. getKeyFunc Func A function that extracts the TimeSpan key from an item. addingFunc Func A function that adds two items together. scalingFunc Func A function that scales an item by a factor. Returns List A new list with an interpolated tail item. Type Parameters TItem The type of items in the list. GetSubListWithInterpolatedTail(List, TKey, Func) Creates a new list with an interpolated tail item based on the specified key, using operators for both key and item operations. public static List GetSubListWithInterpolatedTail(this List src, TKey endKey, Func getKeyFunc) where TKey : IComparable, ISubtractionOperators, IDivisionOperators where TItem : IAdditionOperators, IMultiplyOperators Parameters src List The source list. endKey TKey The ending key for interpolation. getKeyFunc Func A function that extracts the key from an item. Returns List A new list with an interpolated tail item. Type Parameters TKey The type of the key, which must support comparison, subtraction, and division operators. TItem The type of items in the list, which must support addition and multiplication operators. GetSubListWithInterpolatedTail(List, TKey, Func, Func, Func, Func, Func, Func) Creates a new list with an interpolated tail item based on the specified key. public static List GetSubListWithInterpolatedTail(this List src, TKey endKey, Func getKeyFunc, Func keyCompareFunc, Func keyMinusFunc, Func keyDivFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. endKey TKey The ending key for interpolation. getKeyFunc Func A function that extracts the key from an item. keyCompareFunc Func A function that compares two keys. keyMinusFunc Func A function that subtracts one key from another. keyDivFunc Func A function that divides one key by another to get a ratio. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with an interpolated tail item. Type Parameters TKey The type of the key. TItem The type of items in the list. GetSubListWithInterpolatedTail(List, TKey, Func, Func, Func) Creates a new list with an interpolated tail item based on the specified key, using operators for key operations. public static List GetSubListWithInterpolatedTail(this List src, TKey endKey, Func getKeyFunc, Func addingFunc, Func scalingFunc) where TKey : IComparable, ISubtractionOperators, IDivisionOperators Parameters src List The source list. endKey TKey The ending key for interpolation. getKeyFunc Func A function that extracts the key from an item. addingFunc Func A function that adds two items together. scalingFunc Func A function that scales an item by a factor. Returns List A new list with an interpolated tail item. Type Parameters TKey The type of the key, which must support comparison, subtraction, and division operators. TItem The type of items in the list. GetSubList(IList, int, int) Gets a sub-list view of the specified list within the given index range. public static SubList GetSubList(this IList src, int beginIndex, int endIndex) Parameters src IList The source list. beginIndex int The starting index (inclusive). endIndex int The ending index (exclusive). Returns SubList A sub-list view of the specified range. Type Parameters TItem The type of items in the list. Swap(IList, int, int) Swaps two elements in a list at the specified indices. public static void Swap(this IList src, int indexA, int indexB) Parameters src IList The source list indexA int The index of the first element to swap indexB int The index of the second element to swap Type Parameters TItem The type of elements in the list TestFloorCeil() Tests the floor and ceiling functionality with sample data. public static void TestFloorCeil()" + "summary": "Class ListUtil Namespace Hi.Common.Collections Assembly HiGeom.dll Provides utility methods for working with lists and collections. public static class ListUtil Inheritance object ListUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetCeilBySeek(IList, TKey, Func, out TItem, out int, int, SeekDirection) Gets the ceil item by seeking with the specified direction. public static SearchResult GetCeilBySeek(this IList src, TKey key, Func getKeyFunc, out TItem ceilValue, out int ceilIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. ceilValue TItem The output ceil value. ceilIndex int The output ceil index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. GetCeilIndexBySeek(IList, TKey, Func, out int, int, SeekDirection) Gets the ceil index by seeking with the specified direction. public static SearchResult GetCeilIndexBySeek(this IList src, TKey key, Func getKeyFunc, out int ceilIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. ceilIndex int The output ceil index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. Remarks The Free seek direction does not loss additional performance. The seek direction only effect the resulting value by the seekingStartIndex bound. GetCeilIndex(IList, ItemKey, Func, out int) Gets the ceiling index of an item in a sorted list based on a key comparison. public static SearchResult GetCeilIndex(this IList sortedItems, ItemKey key, Func comparingFunc, out int index) Parameters sortedItems IList The sorted list to search in. key ItemKey The key to search for. comparingFunc Func A function that compares an item to the key. index int When this method returns, contains the index of the ceiling item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters Item The type of items in the list. ItemKey The type of the key to search for. GetCeilIndex(IList, TKey, Func, out int) Gets the ceiling index of an item in a sorted list based on a key selector function. public static SearchResult GetCeilIndex(this IList sortedItems, TKey keyQuantity, Func getKeyQuantityFunc, out int index) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. keyQuantity TKey The key to search for. getKeyQuantityFunc Func A function that extracts the key from an item. index int When this method returns, contains the index of the ceiling item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetCeil(IList, TKey, Func, out Item) Gets the ceiling item in a sorted list based on a key selector function. public static SearchResult GetCeil(this IList sortedItems, TKey keyQuantity, Func getKeyQuantityFunc, out Item dst) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. keyQuantity TKey The key to search for. getKeyQuantityFunc Func A function that extracts the key from an item. dst Item When this method returns, contains the ceiling item if found; otherwise, the default value for the type. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetFloorBySeek(IList, TKey, Func, out TItem, out int, int, SeekDirection) Gets the floor item by seeking with the specified direction. public static SearchResult GetFloorBySeek(this IList src, TKey key, Func getKeyFunc, out TItem floorValue, out int floorIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. floorValue TItem The output floor value. floorIndex int The output floor index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. GetFloorIndexBySeek(IList, TKey, Func, out int, int, SeekDirection) Gets the floor index by seeking with the specified direction. public static SearchResult GetFloorIndexBySeek(this IList src, TKey key, Func getKeyFunc, out int floorIndex, int seekingStartIndex, SeekDirection seekDirection = SeekDirection.Free) where TKey : IComparable Parameters src IList The source list. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. floorIndex int The output floor index. seekingStartIndex int The start index for seeking. seekDirection SeekDirection The seek direction. Returns SearchResult The search result. Type Parameters TItem The type of items in the list. TKey The type of the key. Remarks The Free seek direction does not loss additional performance. The seek direction only effect the resulting value by the seekingStartIndex bound. GetFloorIndex(IList, ItemKey, Func, out int) Gets the floor index of an item in a sorted list based on a key comparison. public static SearchResult GetFloorIndex(this IList sortedItems, ItemKey key, Func comparingFunc, out int index) Parameters sortedItems IList The sorted list to search in. key ItemKey The key to search for. comparingFunc Func A function that compares an item to the key. index int When this method returns, contains the index of the floor item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters Item The type of items in the list. ItemKey The type of the key to search for. GetFloorIndex(IList, TKey, Func, out int) Gets the floor index of an item in a sorted list based on a key selector function. public static SearchResult GetFloorIndex(this IList sortedItems, TKey key, Func getKeyFunc, out int index) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. key TKey The key to search for. getKeyFunc Func A function that extracts the key from an item. index int When this method returns, contains the index of the floor item if found; otherwise, -1. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetFloor(IList, TKey, Func, out Item) Gets the floor item in a sorted list based on a key selector function. public static SearchResult GetFloor(this IList sortedItems, TKey keyQuantity, Func getKeyQuantityFunc, out Item dst) where TKey : IComparable Parameters sortedItems IList The sorted list to search in. keyQuantity TKey The key to search for. getKeyQuantityFunc Func A function that extracts the key from an item. dst Item When this method returns, contains the floor item if found; otherwise, the default value for the type. Returns SearchResult A SearchResult indicating the result of the search. Type Parameters TKey The type of the key. Item The type of items in the list. GetIndexBasedEnumerable(IList) Creates an enumerable that provides access to all elements in a list by index. public static ListIndexBasedEnumerable GetIndexBasedEnumerable(this IList src) Parameters src IList The source list Returns ListIndexBasedEnumerable A ListIndexBasedEnumerable for the entire list Type Parameters TItem The type of elements in the list GetIndexBasedEnumerable(IList, int, int) Creates an enumerable that provides access to a range of elements in a list by index. public static ListIndexBasedEnumerable GetIndexBasedEnumerable(this IList src, int begin, int end) Parameters src IList The source list begin int The starting index (inclusive) end int The ending index (exclusive) Returns ListIndexBasedEnumerable A ListIndexBasedEnumerable for the specified range Type Parameters TItem The type of elements in the list GetIndexByBinarySearch(IList, TItem) Performs a binary search on the specified collection. public static int GetIndexByBinarySearch(this IList sortedItems, TItem value) Parameters sortedItems IList The list to be searched. value TItem The value to search for. Returns int Type Parameters TItem The type of the item. GetIndexByBinarySearch(IList, TItem, IComparer) Performs a binary search on the specified collection. public static int GetIndexByBinarySearch(this IList sortedItems, TItem value, IComparer comparer) Parameters sortedItems IList The list to be searched. value TItem The value to search for. comparer IComparer The comparer that is used to compare the value with the list items. Returns int Type Parameters TItem The type of the item. GetIndexByBinarySearch(IList, TSearch, Func) Performs a binary search on the specified collection. public static int GetIndexByBinarySearch(this IList sortedItems, TSearch value, Func comparer) Parameters sortedItems IList The list to be searched. value TSearch The value to search for. comparer Func The comparer that is used to compare the value with the list items. Returns int Type Parameters TItem The type of the item. TSearch The type of the searched item. GetInterpolatedBoundary(List, double, double, Func, out TItem, out TItem, out TItem) Gets interpolated boundary items from a list based on a key value and interval. public static void GetInterpolatedBoundary(this List scpList, double z, double zInterval, Func keyFunc, out TItem cur, out TItem floor, out TItem ceil) where TItem : IAdditionOperators, IMultiplyOperators Parameters scpList List The source list. z double The key value to find or interpolate at. zInterval double The interval to consider around the key value. keyFunc Func A function that extracts the key from an item. cur TItem When this method returns, contains the interpolated item at the key value. floor TItem When this method returns, contains the floor item. ceil TItem When this method returns, contains the ceiling item. Type Parameters TItem The type of items in the list, which must support addition and multiplication operators. GetInterpolatedValue(List, double, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a double key, using operators for addition and multiplication. public static TItem GetInterpolatedValue(this List sortedItems, double keyQuantity, Func getKeyQuantityFunc, ListUtil.OuterPolationMode outerPolationMode) where TItem : IAdditionOperators, IMultiplyOperators Parameters sortedItems List The sorted list to interpolate from. keyQuantity double The key to find or interpolate at. getKeyQuantityFunc Func A function that extracts the key from an item. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list, which must support addition and multiplication operators. GetInterpolatedValue(List, double, Func, Func, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a double key. public static TItem GetInterpolatedValue(this List sortedItems, double key, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc, ListUtil.OuterPolationMode outerPolationMode) Parameters sortedItems List The sorted list to interpolate from. key double The key to find or interpolate at. getKeyFunc Func A function that extracts the key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list. GetInterpolatedValue(List, TimeSpan, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a TimeSpan key, using operators for addition and multiplication. public static TItem GetInterpolatedValue(this List sortedItems, TimeSpan keyQuantity, Func getKeyQuantityFunc, ListUtil.OuterPolationMode outerPolationMode) where TItem : IAdditionOperators, IMultiplyOperators Parameters sortedItems List The sorted list to interpolate from. keyQuantity TimeSpan The TimeSpan key to find or interpolate at. getKeyQuantityFunc Func A function that extracts the TimeSpan key from an item. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list, which must support addition and multiplication operators. GetInterpolatedValue(List, TimeSpan, Func, Func, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a TimeSpan key. public static TItem GetInterpolatedValue(this List sortedItems, TimeSpan key, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc, ListUtil.OuterPolationMode outerPolationMode) Parameters sortedItems List The sorted list to interpolate from. key TimeSpan The TimeSpan key to find or interpolate at. getKeyFunc Func A function that extracts the TimeSpan key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. outerPolationMode ListUtil.OuterPolationMode The mode to use when the key is outside the range of the list. Returns TItem The interpolated value. Type Parameters TItem The type of items in the list. GetInterpolatedValue(List, TKey, Func, Func, Func, Func, Func, Func, OuterPolationMode) Gets an interpolated value from a sorted list based on a key using custom comparison and arithmetic functions. public static TItem GetInterpolatedValue(this List sortedItems, TKey key, Func getKeyFunc, Func keyCompareFunc, Func keyMinusFunc, Func keyDivFunc, Func addingFunc, Func scalingFunc, ListUtil.OuterPolationMode outerPolationMode) Parameters sortedItems List The sorted list of items key TKey The key to search for getKeyFunc Func A function that extracts the key from an item keyCompareFunc Func A function that compares two keys keyMinusFunc Func A function that subtracts one key from another keyDivFunc Func A function that divides one key by another addingFunc Func A function that adds two items scalingFunc Func A function that scales an item by a factor outerPolationMode ListUtil.OuterPolationMode The mode for handling values outside the range Returns TItem The interpolated value Type Parameters TKey The type of the key TItem The type of elements in the list GetListByKeyBoundary(List, Func, TKey, bool, TKey, bool) Gets a subset of a sorted list based on key boundaries. public static List GetListByKeyBoundary(this List sortedItems, Func getKeyQuantityFunc, TKey begin, bool isIncludingBeginFloor, TKey end, bool isIncludingEndCeil) where TKey : IComparable Parameters sortedItems List The sorted list to filter. getKeyQuantityFunc Func A function that extracts the key from an item. begin TKey The beginning key of the range. isIncludingBeginFloor bool Whether to include the floor of the beginning key. end TKey The ending key of the range. isIncludingEndCeil bool Whether to include the ceiling of the ending key. Returns List A new list containing only the items within the specified key range. return empty new list instead of null if no elements in the boundary. Type Parameters TKey The type of the key, which must be comparable. TItem The type of items in the list. GetNearestIndex(IList, TItemKey, Func, out int) Finds the index of the element in a sorted list that is nearest to the specified key. public static SearchResult GetNearestIndex(this IList src, TItemKey key, Func itemToKeyDistanceFunc, out int index) Parameters src IList The source list key TItemKey The key to search for itemToKeyDistanceFunc Func A function that calculates the distance between an item and the key index int When this method returns, contains the index of the nearest element if found; otherwise, -1 Returns SearchResult A BinarySearchResult indicating the result of the search Type Parameters TItem The type of elements in the list TItemKey The type of the key to search for GetNearestIndex(IList, TItemKey, Func, Func, out int) Finds the index of the element in a sorted list that is nearest to the specified key using custom comparison functions. public static SearchResult GetNearestIndex(this IList src, TItemKey key, Func itemCompareToKeyFunc, Func itemToKeyDistanceFunc, out int index) Parameters src IList The source list (must be in ascending order) key TItemKey The key to search for itemCompareToKeyFunc Func A function that compares an item to the key itemToKeyDistanceFunc Func A function that calculates the distance between an item and the key index int When this method returns, contains the index of the nearest element if found; otherwise, -1 Returns SearchResult A BinarySearchResult indicating the result of the search Type Parameters TItem The type of elements in the list TItemKey The type of the key to search for Exceptions InvalidProgramException Thrown when an unexpected search result occurs GetSubListWithInterpolatedHeadAndTail(List, double, double, Func, Func, Func) Creates a new list with interpolated head and tail items based on the specified double key range. public static List GetSubListWithInterpolatedHeadAndTail(this List src, double beginKey, double endKey, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. beginKey double The beginning key of the range. endKey double The ending key of the range. getKeyFunc Func A function that extracts the double key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with interpolated head and tail items. Type Parameters TItem The type of items in the list. GetSubListWithInterpolatedHeadAndTail(List, TimeSpan, TimeSpan, Func, Func, Func) Creates a new list with interpolated head and tail items based on the specified TimeSpan key range. public static List GetSubListWithInterpolatedHeadAndTail(this List src, TimeSpan beginKey, TimeSpan endKey, Func getKeyFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. beginKey TimeSpan The beginning TimeSpan key of the range. endKey TimeSpan The ending TimeSpan key of the range. getKeyFunc Func A function that extracts the TimeSpan key from an item. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with interpolated head and tail items. Type Parameters TItem The type of items in the list. GetSubListWithInterpolatedHeadAndTail(List, TKey, TKey, Func, Func, Func, Func, Func, Func) Creates a new list with interpolated head and tail items based on the specified key range. public static List GetSubListWithInterpolatedHeadAndTail(this List src, TKey beginKey, TKey endKey, Func getKeyFunc, Func keyCompareFunc, Func keyMinusFunc, Func keyDivFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. beginKey TKey The beginning key of the range. endKey TKey The ending key of the range. getKeyFunc Func A function that extracts the key from an item. keyCompareFunc Func A function that compares two keys. keyMinusFunc Func A function that subtracts one key from another. keyDivFunc Func A function that divides one key by another to get a ratio. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with interpolated head and tail items. Type Parameters TKey The type of the key. TItem The type of items in the list. GetSubListWithInterpolatedTail(List, TimeSpan, Func, Func, Func) Creates a new list with an interpolated tail item based on the specified TimeSpan key. public static List GetSubListWithInterpolatedTail(this List src, TimeSpan endKey, Func getKeyFunc, Func addingFunc, Func scalingFunc) Parameters src List The source list. endKey TimeSpan The ending TimeSpan key for interpolation. getKeyFunc Func A function that extracts the TimeSpan key from an item. addingFunc Func A function that adds two items together. scalingFunc Func A function that scales an item by a factor. Returns List A new list with an interpolated tail item. Type Parameters TItem The type of items in the list. GetSubListWithInterpolatedTail(List, TKey, Func) Creates a new list with an interpolated tail item based on the specified key, using operators for both key and item operations. public static List GetSubListWithInterpolatedTail(this List src, TKey endKey, Func getKeyFunc) where TKey : IComparable, ISubtractionOperators, IDivisionOperators where TItem : IAdditionOperators, IMultiplyOperators Parameters src List The source list. endKey TKey The ending key for interpolation. getKeyFunc Func A function that extracts the key from an item. Returns List A new list with an interpolated tail item. Type Parameters TKey The type of the key, which must support comparison, subtraction, and division operators. TItem The type of items in the list, which must support addition and multiplication operators. GetSubListWithInterpolatedTail(List, TKey, Func, Func, Func, Func, Func, Func) Creates a new list with an interpolated tail item based on the specified key. public static List GetSubListWithInterpolatedTail(this List src, TKey endKey, Func getKeyFunc, Func keyCompareFunc, Func keyMinusFunc, Func keyDivFunc, Func itemAddingFunc, Func itemScalingFunc) Parameters src List The source list. endKey TKey The ending key for interpolation. getKeyFunc Func A function that extracts the key from an item. keyCompareFunc Func A function that compares two keys. keyMinusFunc Func A function that subtracts one key from another. keyDivFunc Func A function that divides one key by another to get a ratio. itemAddingFunc Func A function that adds two items together. itemScalingFunc Func A function that scales an item by a factor. Returns List A new list with an interpolated tail item. Type Parameters TKey The type of the key. TItem The type of items in the list. GetSubListWithInterpolatedTail(List, TKey, Func, Func, Func) Creates a new list with an interpolated tail item based on the specified key, using operators for key operations. public static List GetSubListWithInterpolatedTail(this List src, TKey endKey, Func getKeyFunc, Func addingFunc, Func scalingFunc) where TKey : IComparable, ISubtractionOperators, IDivisionOperators Parameters src List The source list. endKey TKey The ending key for interpolation. getKeyFunc Func A function that extracts the key from an item. addingFunc Func A function that adds two items together. scalingFunc Func A function that scales an item by a factor. Returns List A new list with an interpolated tail item. Type Parameters TKey The type of the key, which must support comparison, subtraction, and division operators. TItem The type of items in the list. GetSubList(IList, int, int) Gets a sub-list view of the specified list within the given index range. public static SubList GetSubList(this IList src, int beginIndex, int endIndex) Parameters src IList The source list. beginIndex int The starting index (inclusive). endIndex int The ending index (exclusive). Returns SubList A sub-list view of the specified range. Type Parameters TItem The type of items in the list. Swap(IList, int, int) Swaps two elements in a list at the specified indices. public static void Swap(this IList src, int indexA, int indexB) Parameters src IList The source list indexA int The index of the first element to swap indexB int The index of the second element to swap Type Parameters TItem The type of elements in the list TestFloorCeil() Tests the floor and ceiling functionality with sample data. public static void TestFloorCeil()" }, "api/Hi.Common.Collections.SearchTargetMode.html": { "href": "api/Hi.Common.Collections.SearchTargetMode.html", @@ -5057,7 +5057,7 @@ "brief/dev-doc/release-note/index.html": { "href": "brief/dev-doc/release-note/index.html", "title": "Release Note | HiAPI-C# 2025", - "summary": "Release Note HiNc Packages Version 3.1.106 Rename mapping API for clearer naming: ReadCsvByTimeInterpolation → MapSingleByCsvFile (one-to-one mapping) MapByActualTime → MapSeriesByCsvFile (one-to-many 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 depth detection (ReliefFaceCollidingDepth_mm) 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.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 depth detection (ReliefFaceCollidingDepth_mm) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" }, "brief/dev-doc/system-requirements.html": { "href": "brief/dev-doc/system-requirements.html", @@ -5249,6 +5249,21 @@ "title": "冷卻液設定參考 | HiAPI-C# 2025", "summary": "冷卻液設定參考 氣冷熱傳係數 30 - 300 \\(W/m^2K\\) 油性冷卻液熱傳係數 100 - 500 \\(W/m^2K\\) 水性冷卻液熱傳係數 1000 - 3000 \\(W/m^2K\\)" }, + "brief/user-guide/zh-Hant/examples/index.html": { + "href": "brief/user-guide/zh-Hant/examples/index.html", + "title": "範例專案 | HiAPI-C# 2025", + "summary": "範例專案 本章節收錄各種應用情境的範例專案,供使用者參考學習。 動力計訓練銑削係數 串聯控制器資料及感測器資料至模擬數控路徑" + }, + "brief/user-guide/zh-Hant/examples/mapping-demo/index.html": { + "href": "brief/user-guide/zh-Hant/examples/mapping-demo/index.html", + "title": "範例專案:串聯控制器資料及感測器資料至模擬數控路徑並更新銑削係數 | HiAPI-C# 2025", + "summary": "範例專案:串聯控制器資料及感測器資料至模擬數控路徑並更新銑削係數 範例專案可於此下載: https://superhightech-gitea.webredirect.org/HiNC-Deploy/DemoMapping 本專案使用 MapSingleByCsvFile(API) 及 MapSeriesByCsvFile(API) 串聯控制器資料及感測器資料至虛擬環境,而後更新銑削係數。 相關文件 映射" + }, + "brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.html": { + "href": "brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.html", + "title": "範例專案:動力計訓練銑削係數 | HiAPI-C# 2025", + "summary": "範例專案:動力計訓練銑削係數 使用動力計訓練銑削係數的範例專案可於此下載: https://superhightech-gitea.webredirect.org/HiNC-Deploy/Demo-Para-Training-S50C-202501 此專案使用 Kistler 動力計量測資料,透過一對多映射-指定數控路徑及時間局部映射方式,訓練 S50C 材料的銑削係數。 Tip 加工路徑與切削條件可以根據現場情況自由更改。 相關文件 訓練與校正銑削係數 映射" + }, "brief/user-guide/zh-Hant/index.html": { "href": "brief/user-guide/zh-Hant/index.html", "title": "HiNC 使用說明 | HiAPI-C# 2025", @@ -5337,7 +5352,7 @@ "brief/user-guide/zh-Hant/script/Mapping/index.html": { "href": "brief/user-guide/zh-Hant/script/Mapping/index.html", "title": "資料映射 | HiAPI-C# 2025", - "summary": "資料映射 資料映射指,將外部資料對應於仿真路徑,使得仿真步(仿真步輸出資訊(Simulation Step Output))可以索引外部資料。 外部資料包含智慧刀把、動力計,可依時間線性映射至指定刀具路徑及加工區域。 映射資料可用於檢視加工狀態、訓練銑削係數、校正銑削係數。 資料映射的形式 依據資料大小、應用情境不同,資料映射有多種形式。 以資料量區分,仿真步對應外部資料可以一對一與一對多。 一對一映射 一對一映射指每個仿真步對應一個外部資料點,資料量與仿真步數量相同或相近。 一對一的資料映射方式: 執行CSV檔:適用控制器資料,每個步階對應一個CSV資料行 MapSingleByCsvFile(API):使用時間插值將CSV資料映射到加工步階 PlayCsvFile 執行CSV檔 可以與一對多的資料映射協同使用,詳見 執行CSV檔。 MapSingleByCsvFile MapSingleByCsvFile(API) 讀取CSV檔案並使用時間插值將資料映射到加工步階。每個仿真步對應一個外部資料點(透過時間插值計算)。 Note 指令格式 MapSingleByCsvFile(); Tip 指令範例 // 讀取CSV檔案並映射到步階 PlayNcFile(\"NC/file1.nc\"); MapSingleByCsvFile(\"Data/sensor.csv\"); Note 此方法使用時間插值方式將CSV資料映射到加工步階,適用於需要將外部感測器資料對應到仿真步階的場景。每個仿真步會對應一個透過時間插值計算的外部資料點。 一對多映射 一對多映射指每個仿真步對應多個外部資料點,外部資料量遠大於仿真步數量(通常數十倍以上)。 一對多的形式適用智慧刀把、加速規、測力計等高採樣率資料。 一對多的資料映射可以直接對應真實加工時間全局映射,也可以對指定數控路徑及時間局部映射。 對應真實加工時間全局映射 需使用執行CSV檔作為前置,以獲取真實加工時間,csv檔案中須包含ActualTime欄位(ActualTime(API))。然後使用MapSeriesByCsvFile(API)映射外部資料。 此方法為一對多映射,每個仿真步會對應多個外部資料點。 Note 指令格式 MapSeriesByCsvFile(<檔案名>); 指定數控路徑及時間局部映射 資料映射需設定:指定輸入資料、指定NC路徑。 此方法為一對多映射,每個仿真步會對應多個外部資料點。 資料映射圖例 指定輸入資料 Note 指令格式 AddTimeDataByFile(<映射名>, <輸入檔案路徑>, <映射起點時間>, <映射終點時間>); <映射名>為自訂之標記名稱,對應於指定NC路徑中的映射名。 時間資料格式為<時>:<分>:<秒>.<小數點後秒>;其餘資料格式為實數。 注意映射資料不會因撥放器重置而被清空。可以使用ClearTimeMappingData指令清空。 Note 指令格式 ClearTimeMappingData(); Tip 指令範例 ClearTimeMappingData(); AddTimeDataByFile( \"lineA\", \"Mapping/sensor1.csv\", \"18:25:51.7100\", \"18:26:12.9910\"); AddTimeDataByFile( \"lineB\", \"Mapping/sensor1.csv\", \"18:26:30.5750\", \"18:27:12.2880\"); PlayNcFile(\"NC/file1.nc\") 指定NC路徑 Note 指令格式 //範圍(多行)資料映射 BeginSelection(<映射名>, <起點映射錨點旗標>, <起點偏置物件>); EndSelection(<映射名>, <終點映射錨點旗標>, <終點偏置物件>); //單行資料映射 LineSelection(<映射名>, <起點映射錨點旗標>, <起點偏置物件>, <終點映射錨點旗標>, <終點偏置物件>); <映射名>為自訂之標記名稱,對應於指定輸入資料中的映射名。 可以使用BeginSelection與EndSelection作範圍(多行)資料映射: BeginSelection設置映射起點。 EndSelection設置映射終點。 或是使用LineSelection作單行資料映射。 <映射錨點旗標>可以使用: LineBegin 以該行運動起點為映射錨點。 LineEnd 以該行運動終點為映射錨點。 FirstTouch 以該行第一次接觸工件的位置為映射錨點。 LastTouch 以該行最後接觸工件的位置為映射錨點。 <偏置物件>是相對於錨點的偏移,可以使用: null 無偏移。 ShiftTime_s 單位秒。正值為往後時間;負值為往前時間。 ShiftDistance_mm 單位mm。正值為往後位移;負值為往前位移。 指定NC路徑命令需在NC碼註解中執行,前置;@符號。 Tip NC檔案範例 ... G00 G90 X-6. Y10. G17 G01 Z-1. F600. S50 M03 X13. F20 ;@LineSelection(\"lineA\", FirstTouch, ShiftTime_s(2), LineEnd, ShiftDistance_mm(-1)); X25. F10 ;@LineSelection(\"lineB\", FirstTouch, null, LastTouch, null); ... Tip NC檔案範例2 如果控制器不支援;符號作為註解,如FANUC控制器,則需將其引入註解範圍內。 ... G00 G90 X-6. Y10. G17 G01 Z-1. F600. S50 M03 X13. F20 (;@LineSelection(\"lineA\", FirstTouch, ShiftTime_s(2), LineEnd, ShiftDistance_mm(-1));) X25. F10 (;@LineSelection(\"lineB\", FirstTouch, null, LastTouch, null);) ... 選區結束映射設定 EnableMapOnSelectionEnd(API) 設定是否在選擇結束時連帶執行映射。 Note 指令格式 EnableMapOnSelectionEnd = true; // 或 false Tip 指令範例 // 啟用選區結束映射 EnableMapOnSelectionEnd = true; BeginSelection(\"region1\"); // ... NC 代碼 ... EndSelection(\"region1\"); // 連帶執行映射 // 停用選區結束映射 EnableMapOnSelectionEnd = false; BeginSelection(\"region2\"); // ... NC 代碼 ... EndSelection(\"region2\"); // 不連帶執行映射 Map(\"region2\"); // 手動執行映射 Note 預設值為 true。當設為 true 時,EndSelection 會連帶執行對應的 Map 操作。 感測器資料檔案格式 輸入檔案格式為csv,須包含時間資訊,其餘資訊可選擇包含或不包含。 csv檔案需有標題列,欄位標題需用特定指示詞標示。 部分欄位指示詞為方便性是多擇一。 時間: TimeTag Timetag Time t 動力計: X方向力: Fx Workpiece.Fx Y方向力: Fy Workpiece.Fy Z方向力: Fz Workpiece.Fz 智慧刀把: X方向力矩: Mx Holder.Mx Y方向力矩: My Holder.My Z方向力矩: Mz Holder.Mz 加速規(可選): Ax Ay Az 欄位可以包含其他外部資訊,如下例之CH1、CH2。 Tip 檔案範例 TimeTag,CH1,CH2,Mx,My,Mz 18:23:54.703,-0.00398,-0.00034,-0.02923,0.10733,0.00409 18:23:54.704,-0.00194,0.00285,0.04155,-0.04457,0.00448 ... 串接控制器資料及感測器資料至數控路徑 因為機台加減速,模擬加工時間與實際加工時間會累積誤差,時間拉長了對不上。所以在資料映射時透過錨點做線性投影。 模擬步資料及控制器資料皆含檔案號行號,故可依此設定兩者相應錨點 控制器資料及感測器資料皆含實際時間,故可依此設定兩者相應錨點 串接後可使模擬步索引感測器資料。 Note 為何使用兩層映射? 雖然可以直接使用 執行CSV檔 執行模擬,但控制器的採樣頻率有限,直接播放會導致模擬路徑失真。 透過系統解譯器解譯數控路徑(執行NC檔),再將控制器資料與感測器資料映射至模擬步,可獲得較精確的模擬路徑。 操作流程 依序使用兩指令串聯控制器資料及感測器資料至虛擬環境: 先使用 MapSingleByCsvFile(API) 將控制器資料映射至模擬數控路徑 控制器資料至少包含 FileNo、LineNo、ActualTime 該指令會依 FileNo 及 LineNo 將 ActualTime 及其他控制器資料插補至模擬步中 而後使用 MapSeriesByCsvFile(API) 將感測器資料映射至模擬數控路徑 感測器資料至少包含 ActualTime 該指令會依 ActualTime 將其他感測器資料插補至模擬步中 Tip 指令範例 // 1. 使用系統解譯器解譯數控路徑(獲得精確的模擬路徑) PlayNcFile(\"NC/machining.nc\"); // 2. 映射控制器資料(含FileNo, LineNo, ActualTime) MapSingleByCsvFile(\"Data/controller.csv\"); // 3. 映射感測器資料(含ActualTime及感測器數據) MapSeriesByCsvFile(\"Data/sensor.csv\");" + "summary": "資料映射 資料映射指,將外部資料對應於仿真路徑,使得仿真步(仿真步輸出資訊(Simulation Step Output))可以索引外部資料。 外部資料包含智慧刀把、動力計,可依時間線性映射至指定刀具路徑及加工區域。 映射資料可用於檢視加工狀態、訓練銑削係數、校正銑削係數。 資料映射的形式 依據資料大小、應用情境不同,資料映射有多種形式。 以資料量區分,仿真步對應外部資料可以一對一與一對多。 一對一映射 一對一映射指每個仿真步對應一個外部資料點,資料量與仿真步數量相同或相近。 一對一的資料映射方式: 執行CSV檔:適用控制器資料,每個步階對應一個CSV資料行 MapSingleByCsvFile(API):使用時間插值將CSV資料映射到加工步階 PlayCsvFile 執行CSV檔 可以與一對多的資料映射協同使用,詳見 執行CSV檔。 MapSingleByCsvFile MapSingleByCsvFile(API) 讀取CSV檔案並使用時間插值將資料映射到加工步階。每個仿真步對應一個外部資料點(透過時間插值計算)。 Note 指令格式 MapSingleByCsvFile(); Tip 指令範例 // 讀取CSV檔案並映射到步階 PlayNcFile(\"NC/file1.nc\"); MapSingleByCsvFile(\"Data/sensor.csv\"); Note 此方法使用時間插值方式將CSV資料映射到加工步階,適用於需要將外部感測器資料對應到仿真步階的場景。每個仿真步會對應一個透過時間插值計算的外部資料點。 一對多映射 一對多映射指每個仿真步對應多個外部資料點,外部資料量遠大於仿真步數量(通常數十倍以上)。 一對多的形式適用智慧刀把、加速規、測力計等高採樣率資料。 一對多的資料映射可以直接對應真實加工時間全局映射,也可以對指定數控路徑及時間局部映射。 對應真實加工時間全局映射 需使用執行CSV檔作為前置,以獲取真實加工時間,csv檔案中須包含ActualTime欄位(ActualTime(API))。然後使用MapSeriesByCsvFile(API)映射外部資料。 此方法為一對多映射,每個仿真步會對應多個外部資料點。 Note 指令格式 MapSeriesByCsvFile(<檔案名>); 指定數控路徑及時間局部映射 資料映射需設定:指定輸入資料、指定NC路徑。 此方法為一對多映射,每個仿真步會對應多個外部資料點。 資料映射圖例 指定輸入資料 Note 指令格式 AddTimeDataByFile(<映射名>, <輸入檔案路徑>, <映射起點時間>, <映射終點時間>); <映射名>為自訂之標記名稱,對應於指定NC路徑中的映射名。 時間資料格式為<時>:<分>:<秒>.<小數點後秒>;其餘資料格式為實數。 注意映射資料不會因撥放器重置而被清空。可以使用ClearTimeMappingData指令清空。 Note 指令格式 ClearTimeMappingData(); Tip 指令範例 ClearTimeMappingData(); AddTimeDataByFile( \"lineA\", \"Mapping/sensor1.csv\", \"18:25:51.7100\", \"18:26:12.9910\"); AddTimeDataByFile( \"lineB\", \"Mapping/sensor1.csv\", \"18:26:30.5750\", \"18:27:12.2880\"); PlayNcFile(\"NC/file1.nc\") 指定NC路徑 Note 指令格式 //範圍(多行)資料映射 BeginSelection(<映射名>, <起點映射錨點旗標>, <起點偏置物件>); EndSelection(<映射名>, <終點映射錨點旗標>, <終點偏置物件>); //單行資料映射 LineSelection(<映射名>, <起點映射錨點旗標>, <起點偏置物件>, <終點映射錨點旗標>, <終點偏置物件>); <映射名>為自訂之標記名稱,對應於指定輸入資料中的映射名。 可以使用BeginSelection與EndSelection作範圍(多行)資料映射: BeginSelection設置映射起點。 EndSelection設置映射終點。 或是使用LineSelection作單行資料映射。 <映射錨點旗標>可以使用: LineBegin 以該行運動起點為映射錨點。 LineEnd 以該行運動終點為映射錨點。 FirstTouch 以該行第一次接觸工件的位置為映射錨點。 LastTouch 以該行最後接觸工件的位置為映射錨點。 <偏置物件>是相對於錨點的偏移,可以使用: null 無偏移。 ShiftTime_s 單位秒。正值為往後時間;負值為往前時間。 ShiftDistance_mm 單位mm。正值為往後位移;負值為往前位移。 指定NC路徑命令需在NC碼註解中執行,前置;@符號。 Tip NC檔案範例 ... G00 G90 X-6. Y10. G17 G01 Z-1. F600. S50 M03 X13. F20 ;@LineSelection(\"lineA\", FirstTouch, ShiftTime_s(2), LineEnd, ShiftDistance_mm(-1)); X25. F10 ;@LineSelection(\"lineB\", FirstTouch, null, LastTouch, null); ... Tip NC檔案範例2 如果控制器不支援;符號作為註解,如FANUC控制器,則需將其引入註解範圍內。 ... G00 G90 X-6. Y10. G17 G01 Z-1. F600. S50 M03 X13. F20 (;@LineSelection(\"lineA\", FirstTouch, ShiftTime_s(2), LineEnd, ShiftDistance_mm(-1));) X25. F10 (;@LineSelection(\"lineB\", FirstTouch, null, LastTouch, null);) ... 選區結束映射設定 EnableMapOnSelectionEnd(API) 設定是否在選擇結束時連帶執行映射。 Note 指令格式 EnableMapOnSelectionEnd = true; // 或 false Tip 指令範例 // 啟用選區結束映射 EnableMapOnSelectionEnd = true; BeginSelection(\"region1\"); // ... NC 代碼 ... EndSelection(\"region1\"); // 連帶執行映射 // 停用選區結束映射 EnableMapOnSelectionEnd = false; BeginSelection(\"region2\"); // ... NC 代碼 ... EndSelection(\"region2\"); // 不連帶執行映射 Map(\"region2\"); // 手動執行映射 Note 預設值為 true。當設為 true 時,EndSelection 會連帶執行對應的 Map 操作。 感測器資料檔案格式 輸入檔案格式為csv,須包含時間資訊,其餘資訊可選擇包含或不包含。 csv檔案需有標題列,欄位標題需用特定指示詞標示。 部分欄位指示詞為方便性是多擇一。 時間: TimeTag Timetag Time t 動力計: X方向力: Fx Workpiece.Fx Y方向力: Fy Workpiece.Fy Z方向力: Fz Workpiece.Fz 智慧刀把: X方向力矩: Mx Holder.Mx Y方向力矩: My Holder.My Z方向力矩: Mz Holder.Mz 加速規(可選): Ax Ay Az 欄位可以包含其他外部資訊,如下例之CH1、CH2。 Tip 檔案範例 TimeTag,CH1,CH2,Mx,My,Mz 18:23:54.703,-0.00398,-0.00034,-0.02923,0.10733,0.00409 18:23:54.704,-0.00194,0.00285,0.04155,-0.04457,0.00448 ... 串接控制器資料及感測器資料至數控路徑 因為機台加減速,模擬加工時間與實際加工時間會累積誤差,時間拉長了對不上。所以在資料映射時透過錨點做線性投影。 模擬步資料及控制器資料皆含檔案號行號,故可依此設定兩者相應錨點 控制器資料及感測器資料皆含實際時間,故可依此設定兩者相應錨點 串接後可使模擬步索引感測器資料。 如示意圖: L = FileNo, LineNo 錨點 t = ActualTime 錨點 Note 為何使用兩層映射? 雖然可以直接使用 執行CSV檔 執行模擬,但控制器的採樣頻率有限,直接播放會導致模擬路徑失真。 透過系統解譯器解譯數控路徑(執行NC檔),再將控制器資料與感測器資料映射至模擬步,可獲得較精確的模擬路徑。 操作流程 依序使用兩指令串聯控制器資料及感測器資料至虛擬環境: 先使用 MapSingleByCsvFile(API) 將控制器資料映射至模擬數控路徑 控制器資料至少包含 FileNo、LineNo、ActualTime 該指令會依 FileNo 及 LineNo 將 ActualTime 及其他控制器資料插補至模擬步中 而後使用 MapSeriesByCsvFile(API) 將感測器資料映射至模擬數控路徑 感測器資料至少包含 ActualTime 該指令會依 ActualTime 將其他感測器資料插補至模擬步中 Tip 指令範例 // 1. 使用系統解譯器解譯數控路徑(獲得精確的模擬路徑) PlayNcFile(\"NC/machining.nc\"); // 2. 映射控制器資料(含FileNo, LineNo, ActualTime) MapSingleByCsvFile(\"Data/controller.csv\"); // 3. 映射感測器資料(含ActualTime及感測器數據) MapSeriesByCsvFile(\"Data/sensor.csv\"); 範例專案 串聯控制器資料及感測器資料至模擬數控路徑並更新銑削係數" }, "brief/user-guide/zh-Hant/script/Messages/index.html": { "href": "brief/user-guide/zh-Hant/script/Messages/index.html", @@ -5347,7 +5362,7 @@ "brief/user-guide/zh-Hant/script/MillingTraining/index.html": { "href": "brief/user-guide/zh-Hant/script/MillingTraining/index.html", "title": "訓練與校正銑削係數 | HiAPI-C# 2025", - "summary": "訓練與校正銑削係數 銑削係數為計算銑削力的必須參數。 訓練與校正銑削係數需先完成資料映射。 TrainMillingPara(API)訓練銑削係數,不需先設定工件銑削係數,輸出的新係數也與原工件銑削係數無關。 ReTrainMillingPara(API)校正銑削係數,需基於已設定之工件銑削係數,才可輸出校正後係數。校正時原係數的權重10%、從資訊映射而得的樣本權重90%。 Note 指令格式 //訓練銑削係數 TrainMillingPara(<樣本旗標>, <檔案輸出路徑>); //校正銑削係數 ReTrainMillingPara(<樣本旗標>, <檔案輸出路徑>); <樣本旗標> 為應用於訓練資料的資料種類,包含:Fx、Fy、Fz、Mx、My、Mz。 使用|號作聯集。 Tip 以動力計資料為例,輸出訓練銑削係數 ClearTimeMappingData(); AddTimeDataByFile( \"lineA\", \"Mapping/sensor1.csv\", \"18:25:51.7100\", \"18:26:12.9910\"); AddTimeDataByFile( \"lineB\", \"Mapping/sensor1.csv\", \"18:26:30.5750\", \"18:27:12.2880\"); PlayNcFile(\"NC/file1.nc\") TrainMillingPara(Fx|Fy|Fz, \"StainlessSteel.mp\"); Tip 以智慧刀把資料為例,輸出校正銑削係數 ClearTimeMappingData(); AddTimeDataByFile( \"lineA\", \"Mapping/sensor1.csv\", \"18:25:51.7100\", \"18:26:12.9910\"); AddTimeDataByFile( \"lineB\", \"Mapping/sensor1.csv\", \"18:26:30.5750\", \"18:27:12.2880\"); PlayNcFile(\"NC/file1.nc\") ReTrainMillingPara(Fz|Mx|My|Mz, \"StainlessSteel.mp\"); 訓練條件 路徑樣本 以穩定資料訓練佳 ,即資料波形有重複性維持至少兩轉。因系統演算法最低以一轉波形做訓練。 在非穩定情況,會因為模擬中的每刃進給固定、訓練資料不穩定,造成剪切力於總力占比降低,使得訓練出的犁切係數偏高。 樣本穩定的情況下,NC路徑沒有限制切削形狀,槽銑或側銑,任意形狀刀具皆可用來訓練及校正銑削係數。 以TrainMillingPara訓練銑削係數,資訊映射須包含至少一組不同每刃進給的路徑樣本。訓練資料的資料種類建議最少為(動力計)Fx|Fy|Fz或(智慧刀把)Fz|Mx|My|Mz。 如果資料種類少於前述,如Fx|Fy或Mx|My|Mz,則樣本的自由度太高,訓練出來的係數不能符合訓練樣本以外的路徑。 如果僅使用Mx|My|Mz,由於力矩資料為 \\(\\vec{r} \\times \\vec{F}\\),所以r方向資料會遺失,相當於少了一個自由度,難以訓練材料系數。 所以力矩資料須搭配Fz使用。 以ReTrainMillingPara校正銑削係數,沒有限制資料種類及每刃進給。 訓練品質指標 訓練完成後,系統會計算以下品質指標: 相關係數 (Correlation Coefficient, R) 相關係數 \\(R\\) 是整體訓練結果的單一數值,用於評估訓練後模擬值與量測值的線性相關程度,範圍為 \\(0\\) 到 \\(1\\),越接近 \\(1\\) 表示訓練結果越好。新刀的相關係數通常介於 0.95 至 0.999 之間。 訓練誤差比 (TrainingErrRatio) 訓練誤差比是在執行 TrainMillingPara(API) 或 ReTrainMillingPara(API) 後,動態註冊並設置到訓練區域內各步的步變數,用於評估該步的模擬與量測之間的誤差程度,數值越小表示該步的訓練品質越好。 \\[ \\text{TrainingErrRatio} = \\sqrt{\\frac{\\sum_{i} e_i^2}{\\sqrt{\\sum_{i} y_i^2 \\cdot \\sum_{i} \\hat{y}_i^2}}} \\] 其中: \\(e_i = y_i - \\hat{y}_i\\):第 \\(i\\) 個樣本的誤差 \\(y_i\\):量測值 \\(\\hat{y}_i\\):模擬預測值 此指標會嵌入到每個加工步驟的輸出資料中,可用於識別訓練品質較差的段落。 角度偏移 (AngleOffset) 角度偏移是在執行訓練函數後,動態註冊並設置到訓練區域內各步的步變數。\\(\\theta_{offset}\\) 表示該步量測資料與模擬資料之間的刀刃旋轉相位差。系統會自動對齊相位以獲得最佳訓練結果。 \\[ \\theta_{offset} = \\frac{2\\pi \\cdot i_{min}}{N_{div}} \\] 其中: \\(i_{min}\\):使預測誤差最小的角度索引 \\(N_{div}\\):一轉的角度分割數,即 MillingCycleDivisionNum(API) Tip 如果同一批訓練中各段落的 AngleOffset 差異過大,可能表示主軸旋轉突然放慢或放快或資料缺失,或系統無法準確分析樣本並導致不理想訓練的結果。 Tip 較大的 MillingCycleDivisionNum(API) 設定可以得到更準確的 AngleOffset 結果,進而訓練出更準確的銑削係數。 範例專案-動力計訓練銑削係數 使用動力計訓練銑削係數的範例專案可於此下載: https://superhightech-gitea.webredirect.org/HiNC-Deploy/Demo-Para-Training-S50C-202501 此專案使用 Kistler 動力計量測資料,透過一對多映射-指定數控路徑及時間局部映射方式,訓練 S50C 材料的銑削係數。 Tip 加工路徑與切削條件可以根據現場情況自由更改。" + "summary": "訓練與校正銑削係數 銑削係數為計算銑削力的必須參數。 訓練與校正銑削係數需先完成資料映射。 TrainMillingPara(API)訓練銑削係數,不需先設定工件銑削係數,輸出的新係數也與原工件銑削係數無關。 ReTrainMillingPara(API)校正銑削係數,需基於已設定之工件銑削係數,才可輸出校正後係數。校正時原係數的權重10%、從資訊映射而得的樣本權重90%。 Note 指令格式 //訓練銑削係數 TrainMillingPara(<樣本旗標>, <檔案輸出路徑>); //校正銑削係數 ReTrainMillingPara(<樣本旗標>, <檔案輸出路徑>); <樣本旗標> 為應用於訓練資料的資料種類,包含:Fx、Fy、Fz、Mx、My、Mz。 使用|號作聯集。 Tip 以動力計資料為例,輸出訓練銑削係數 ClearTimeMappingData(); AddTimeDataByFile( \"lineA\", \"Mapping/sensor1.csv\", \"18:25:51.7100\", \"18:26:12.9910\"); AddTimeDataByFile( \"lineB\", \"Mapping/sensor1.csv\", \"18:26:30.5750\", \"18:27:12.2880\"); PlayNcFile(\"NC/file1.nc\") TrainMillingPara(Fx|Fy|Fz, \"StainlessSteel.mp\"); Tip 以智慧刀把資料為例,輸出校正銑削係數 ClearTimeMappingData(); AddTimeDataByFile( \"lineA\", \"Mapping/sensor1.csv\", \"18:25:51.7100\", \"18:26:12.9910\"); AddTimeDataByFile( \"lineB\", \"Mapping/sensor1.csv\", \"18:26:30.5750\", \"18:27:12.2880\"); PlayNcFile(\"NC/file1.nc\") ReTrainMillingPara(Fz|Mx|My|Mz, \"StainlessSteel.mp\"); 訓練條件 路徑樣本 以穩定資料訓練佳 ,即資料波形有重複性維持至少兩轉。因系統演算法最低以一轉波形做訓練。 在非穩定情況,會因為模擬中的每刃進給固定、訓練資料不穩定,造成剪切力於總力占比降低,使得訓練出的犁切係數偏高。 樣本穩定的情況下,NC路徑沒有限制切削形狀,槽銑或側銑,任意形狀刀具皆可用來訓練及校正銑削係數。 以TrainMillingPara訓練銑削係數,資訊映射須包含至少一組不同每刃進給的路徑樣本。訓練資料的資料種類建議最少為(動力計)Fx|Fy|Fz或(智慧刀把)Fz|Mx|My|Mz。 如果資料種類少於前述,如Fx|Fy或Mx|My|Mz,則樣本的自由度太高,訓練出來的係數不能符合訓練樣本以外的路徑。 如果僅使用Mx|My|Mz,由於力矩資料為 \\(\\vec{r} \\times \\vec{F}\\),所以r方向資料會遺失,相當於少了一個自由度,難以訓練材料系數。 所以力矩資料須搭配Fz使用。 以ReTrainMillingPara校正銑削係數,沒有限制資料種類及每刃進給。 訓練品質指標 訓練完成後,系統會計算以下品質指標: 相關係數 (Correlation Coefficient, R) 相關係數 \\(R\\) 是整體訓練結果的單一數值,用於評估訓練後模擬值與量測值的線性相關程度,範圍為 \\(0\\) 到 \\(1\\),越接近 \\(1\\) 表示訓練結果越好。新刀的相關係數通常介於 0.95 至 0.999 之間。 訓練誤差比 (TrainingErrRatio) 訓練誤差比是在執行 TrainMillingPara(API) 或 ReTrainMillingPara(API) 後,動態註冊並設置到訓練區域內各步的步變數,用於評估該步的模擬與量測之間的誤差程度,數值越小表示該步的訓練品質越好。 \\[ \\text{TrainingErrRatio} = \\sqrt{\\frac{\\sum_{i} e_i^2}{\\sqrt{\\sum_{i} y_i^2 \\cdot \\sum_{i} \\hat{y}_i^2}}} \\] 其中: \\(e_i = y_i - \\hat{y}_i\\):第 \\(i\\) 個樣本的誤差 \\(y_i\\):量測值 \\(\\hat{y}_i\\):模擬預測值 此指標會嵌入到每個加工步驟的輸出資料中,可用於識別訓練品質較差的段落。 角度偏移 (AngleOffset) 角度偏移是在執行訓練函數後,動態註冊並設置到訓練區域內各步的步變數。\\(\\theta_{offset}\\) 表示該步量測資料與模擬資料之間的刀刃旋轉相位差。系統會自動對齊相位以獲得最佳訓練結果。 \\[ \\theta_{offset} = \\frac{2\\pi \\cdot i_{min}}{N_{div}} \\] 其中: \\(i_{min}\\):使預測誤差最小的角度索引 \\(N_{div}\\):一轉的角度分割數,即 MillingCycleDivisionNum(API) Tip 如果同一批訓練中各段落的 AngleOffset 差異過大,可能表示主軸旋轉突然放慢或放快或資料缺失,或系統無法準確分析樣本並導致不理想訓練的結果。 Tip 較大的 MillingCycleDivisionNum(API) 設定可以得到更準確的 AngleOffset 結果,進而訓練出更準確的銑削係數。 範例專案 動力計訓練銑削係數 串聯控制器資料及感測器資料至模擬數控路徑並更新銑削係數" }, "brief/user-guide/zh-Hant/script/NcOptimization/index.html": { "href": "brief/user-guide/zh-Hant/script/NcOptimization/index.html", diff --git a/App/wwwroot/HiAPI-docsite/manifest.json b/App/wwwroot/HiAPI-docsite/manifest.json index ed29bf1..e563538 100644 --- a/App/wwwroot/HiAPI-docsite/manifest.json +++ b/App/wwwroot/HiAPI-docsite/manifest.json @@ -14517,6 +14517,46 @@ }, "version": "" }, + { + "type": "Conceptual", + "source_relative_path": "brief/user-guide/zh-Hant/examples/index.md", + "output": { + ".html": { + "relative_path": "brief/user-guide/zh-Hant/examples/index.html" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "brief/user-guide/zh-Hant/examples/mapping-demo/index.md", + "output": { + ".html": { + "relative_path": "brief/user-guide/zh-Hant/examples/mapping-demo/index.html" + } + }, + "version": "" + }, + { + "type": "Resource", + "source_relative_path": "brief/user-guide/zh-Hant/examples/milling-training-dynamometer/demo-training-S50C.png", + "output": { + "resource": { + "relative_path": "brief/user-guide/zh-Hant/examples/milling-training-dynamometer/demo-training-S50C.png" + } + }, + "version": "" + }, + { + "type": "Conceptual", + "source_relative_path": "brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.md", + "output": { + ".html": { + "relative_path": "brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.html" + } + }, + "version": "" + }, { "type": "Conceptual", "source_relative_path": "brief/user-guide/zh-Hant/index.md", @@ -14827,6 +14867,26 @@ }, "version": "" }, + { + "type": "Resource", + "source_relative_path": "brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.jpg", + "output": { + "resource": { + "relative_path": "brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.jpg" + } + }, + "version": "" + }, + { + "type": "Resource", + "source_relative_path": "brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.png", + "output": { + "resource": { + "relative_path": "brief/user-guide/zh-Hant/script/Mapping/img/Series-Mapping.png" + } + }, + "version": "" + }, { "type": "Conceptual", "source_relative_path": "brief/user-guide/zh-Hant/script/Mapping/index.md", @@ -14857,16 +14917,6 @@ }, "version": "" }, - { - "type": "Resource", - "source_relative_path": "brief/user-guide/zh-Hant/script/MillingTraining/demo-training-S50C.png", - "output": { - "resource": { - "relative_path": "brief/user-guide/zh-Hant/script/MillingTraining/demo-training-S50C.png" - } - }, - "version": "" - }, { "type": "Conceptual", "source_relative_path": "brief/user-guide/zh-Hant/script/MillingTraining/index.md", @@ -14887,6 +14937,26 @@ }, "version": "" }, + { + "type": "Resource", + "source_relative_path": "brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.jpg", + "output": { + "resource": { + "relative_path": "brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.jpg" + } + }, + "version": "" + }, + { + "type": "Resource", + "source_relative_path": "brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.png", + "output": { + "resource": { + "relative_path": "brief/user-guide/zh-Hant/script/NcOptimization/OptExtendedDistance.png" + } + }, + "version": "" + }, { "type": "Conceptual", "source_relative_path": "brief/user-guide/zh-Hant/script/NcOptimization/index.md", diff --git a/App/wwwroot/HiAPI-docsite/xrefmap.yml b/App/wwwroot/HiAPI-docsite/xrefmap.yml index 78279d6..3f3135f 100644 --- a/App/wwwroot/HiAPI-docsite/xrefmap.yml +++ b/App/wwwroot/HiAPI-docsite/xrefmap.yml @@ -79,6 +79,15 @@ references: - uid: Doc-Task name: 腳本 href: brief/user-guide/zh-Hant/script/Doc-Task/index.html +- uid: Example-MappingDemo + name: 範例專案:串聯控制器資料及感測器資料至模擬數控路徑並更新銑削係數 + href: brief/user-guide/zh-Hant/examples/mapping-demo/index.html +- uid: Example-MillingTraining-Dynamometer + name: 範例專案:動力計訓練銑削係數 + href: brief/user-guide/zh-Hant/examples/milling-training-dynamometer/index.html +- uid: Examples + name: 範例專案 + href: brief/user-guide/zh-Hant/examples/index.html - uid: Hi.Cbtr name: Hi.Cbtr href: api/Hi.Cbtr.html diff --git a/App/zh-Hans/HiMech.resources.dll b/App/zh-Hans/HiMech.resources.dll index be6f626..20fca2b 100644 Binary files a/App/zh-Hans/HiMech.resources.dll and b/App/zh-Hans/HiMech.resources.dll differ diff --git a/App/zh-Hans/HiNc.resources.dll b/App/zh-Hans/HiNc.resources.dll index ccecc24..cc09a94 100644 Binary files a/App/zh-Hans/HiNc.resources.dll and b/App/zh-Hans/HiNc.resources.dll differ diff --git a/App/zh-Hant/HiGeom.resources.dll b/App/zh-Hant/HiGeom.resources.dll index a892830..f1fca6b 100644 Binary files a/App/zh-Hant/HiGeom.resources.dll and b/App/zh-Hant/HiGeom.resources.dll differ diff --git a/App/zh-Hant/HiMech.resources.dll b/App/zh-Hant/HiMech.resources.dll index b5049be..6429164 100644 Binary files a/App/zh-Hant/HiMech.resources.dll and b/App/zh-Hant/HiMech.resources.dll differ diff --git a/App/zh-Hant/HiNc.resources.dll b/App/zh-Hant/HiNc.resources.dll index 48d7e1e..6219b8f 100644 Binary files a/App/zh-Hant/HiNc.resources.dll and b/App/zh-Hant/HiNc.resources.dll differ