From d7c7acb0184d2564df0af3fa403dd357f3335228 Mon Sep 17 00:00:00 2001 From: xin Date: Mon, 30 Jun 2025 13:51:45 +0800 Subject: [PATCH] =?UTF-8?q?windows=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .roo/mcp.json | 12 + doc/数据查看前端文档.md | 3 + .../clion-Debug-Visual Studio-log.txt | 4 +- .../.ninja_log | 2 +- .../clion-Release-Visual Studio-log.txt | 4 +- package-lock.json | 418 ++++++- package.json | 2 + src-tauri/aaa.iss | 12 - src-tauri/config.json | 2 +- src-tauri/iris_data_example.iris | Bin 0 -> 32366 bytes src-tauri/iris_is3lib.dll | Bin 35328 -> 35328 bytes src-tauri/src/irisdatamanager/mod.rs | 189 +++ src-tauri/src/main.rs | 34 +- src-tauri/src/myformatiris/mod.rs | 16 + src-tauri/src/myformatiris/read.rs | 343 +++++ src-tauri/src/myformatiris/structures.rs | 411 ++++++ src-tauri/src/myformatiris/write.rs | 222 ++++ src-tauri/tauri.conf.json | 2 +- src-tauri/updatelog.md | 20 + src/App.vue | 50 +- src/AppHyperSpectral.vue | 1 + src/DataView/APPDataview.vue | 98 ++ src/DataView/appGloblefunction.js | 12 + src/DataView/menuvue/menubar.vue | 204 +++ src/DataView/vuecomponents/GuiForDataShow.vue | 73 ++ .../vuecomponents/GuiForDivesInfo.vue | 74 ++ src/DataView/vuecomponents/GuiForPlotShow.vue | 425 +++++++ src/DataView/vuecomponents/GuiLeftSider.vue | 78 ++ src/DataView/vuecomponents/HelloWorld.vue | 40 + src/DataView/vuecomponents/MapContainer.vue | 78 ++ src/apphymain.js | 12 + src/components/menubar.vue | 6 +- src/components/menubox/SetCalibrateHH3.vue | 1112 +++++++++++++++++ src/components/menubox/SetWavelenthcoeff.vue | 12 +- src/components/menubox/help.vue | 83 +- src/components/menubox/updatelog.md | 0 src/main.js | 5 +- yarn.lock | 148 ++- 38 files changed, 4126 insertions(+), 81 deletions(-) create mode 100644 .roo/mcp.json create mode 100644 doc/数据查看前端文档.md delete mode 100644 src-tauri/aaa.iss create mode 100644 src-tauri/iris_data_example.iris create mode 100644 src-tauri/src/irisdatamanager/mod.rs create mode 100644 src-tauri/src/myformatiris/mod.rs create mode 100644 src-tauri/src/myformatiris/read.rs create mode 100644 src-tauri/src/myformatiris/structures.rs create mode 100644 src-tauri/src/myformatiris/write.rs create mode 100644 src-tauri/updatelog.md create mode 100644 src/DataView/APPDataview.vue create mode 100644 src/DataView/appGloblefunction.js create mode 100644 src/DataView/menuvue/menubar.vue create mode 100644 src/DataView/vuecomponents/GuiForDataShow.vue create mode 100644 src/DataView/vuecomponents/GuiForDivesInfo.vue create mode 100644 src/DataView/vuecomponents/GuiForPlotShow.vue create mode 100644 src/DataView/vuecomponents/GuiLeftSider.vue create mode 100644 src/DataView/vuecomponents/HelloWorld.vue create mode 100644 src/DataView/vuecomponents/MapContainer.vue create mode 100644 src/components/menubox/SetCalibrateHH3.vue delete mode 100644 src/components/menubox/updatelog.md diff --git a/.roo/mcp.json b/.roo/mcp.json new file mode 100644 index 0000000..0206dbc --- /dev/null +++ b/.roo/mcp.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "filesystem": { + "command": "npx", + "args": [ + "-y", + "@modelcontextprotocol/server-filesystem", + "./" + ] + } + } +} \ No newline at end of file diff --git a/doc/数据查看前端文档.md b/doc/数据查看前端文档.md new file mode 100644 index 0000000..89b2371 --- /dev/null +++ b/doc/数据查看前端文档.md @@ -0,0 +1,3 @@ + 1 函数 invoke("getoneirisfile",{path:"iris_data_example.iris"}) 返回一次数据 + +2 fs diff --git a/myis11/project/is3/cmake-build-debug-visual-studio/CMakeFiles/clion-Debug-Visual Studio-log.txt b/myis11/project/is3/cmake-build-debug-visual-studio/CMakeFiles/clion-Debug-Visual Studio-log.txt index b1eedf3..5b7e909 100644 --- a/myis11/project/is3/cmake-build-debug-visual-studio/CMakeFiles/clion-Debug-Visual Studio-log.txt +++ b/myis11/project/is3/cmake-build-debug-visual-studio/CMakeFiles/clion-Debug-Visual Studio-log.txt @@ -2,6 +2,6 @@ C:\Users\xin\AppData\Local\Programs\CLion\bin\cmake\win\x64\bin\cmake.exe -DCMAK -- FOUND CSerialPort, E:/01MyCode/vcpkg/vcpkgclion/installed/x64-windows/debug/lib/libcserialport.lib -- CSerialPort_INCLUDE_DIR: E:/01MyCode/vcpkg/vcpkgclion/installed/x64-windows/include -- CSerialPort_LIBRARY: E:/01MyCode/vcpkg/vcpkgclion/installed/x64-windows/debug/lib/libcserialport.lib --- Configuring done (1.2s) --- Generating done (0.4s) +-- Configuring done (0.5s) +-- Generating done (0.1s) -- Build files have been written to: D:/06Learn/rust/tarui/myfirst_tauri/myis11/project/is3/cmake-build-debug-visual-studio diff --git a/myis11/project/is3/cmake-build-release-visual-studio/.ninja_log b/myis11/project/is3/cmake-build-release-visual-studio/.ninja_log index 371abda..2aad029 100644 --- a/myis11/project/is3/cmake-build-release-visual-studio/.ninja_log +++ b/myis11/project/is3/cmake-build-release-visual-studio/.ninja_log @@ -3,7 +3,7 @@ 21 907 7659725145667238 CMakeFiles/iris_is3lib.dir/D_/06Learn/rust/tarui/myfirst_tauri/myis11/src/IRIS_IS3/IS3_INST.cpp.obj 3c5858a3264438b4 33 941 7659725145778173 CMakeFiles/is3test.dir/testmain.cpp.obj 905a72b1ea8bf22c 2 616 7669134105668608 CMakeFiles/iris_is3lib.dir/D_/06Learn/rust/tarui/myfirst_tauri/myis11/src/IRIS_IS3/SensorIS3.cpp.obj 96f167c4e5f0d851 -1 71 7677050246360766 build.ninja 7106bca1f4b570da +1 71 7725385590380927 build.ninja 7106bca1f4b570da 27 1400 7659725145725854 CMakeFiles/iris_is3lib.dir/D_/06Learn/rust/tarui/myfirst_tauri/myis11/src/IRIS_IS3/IS3Comon.cpp.obj 4364cfe7f408eeb7 4 94 7630155613477022 CMakeFiles/iris_is3lib.dir/D_/06Learn/rust/tarui/myfirst_tauri/myis11/src/thirdpart/iris_proto_tool/src/IRIS_Method.cpp.obj 366a7a8636d2dadc 617 1030 7669134111816719 iris_is3lib.dll c7564dfa3e9c17a2 diff --git a/myis11/project/is3/cmake-build-release-visual-studio/CMakeFiles/clion-Release-Visual Studio-log.txt b/myis11/project/is3/cmake-build-release-visual-studio/CMakeFiles/clion-Release-Visual Studio-log.txt index bdc3ab1..1b66e7a 100644 --- a/myis11/project/is3/cmake-build-release-visual-studio/CMakeFiles/clion-Release-Visual Studio-log.txt +++ b/myis11/project/is3/cmake-build-release-visual-studio/CMakeFiles/clion-Release-Visual Studio-log.txt @@ -2,6 +2,6 @@ C:\Users\xin\AppData\Local\Programs\CLion\bin\cmake\win\x64\bin\cmake.exe -DCMAK -- FOUND CSerialPort, E:/01MyCode/vcpkg/vcpkgclion/installed/x64-windows/lib/libcserialport.lib -- CSerialPort_INCLUDE_DIR: E:/01MyCode/vcpkg/vcpkgclion/installed/x64-windows/include -- CSerialPort_LIBRARY: E:/01MyCode/vcpkg/vcpkgclion/installed/x64-windows/lib/libcserialport.lib --- Configuring done (1.2s) --- Generating done (0.3s) +-- Configuring done (0.5s) +-- Generating done (0.1s) -- Build files have been written to: D:/06Learn/rust/tarui/myfirst_tauri/myis11/project/is3/cmake-build-release-visual-studio diff --git a/package-lock.json b/package-lock.json index 94d3ba5..c6bd5e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,12 +18,14 @@ "element-plus": "^2.4.4", "json-editor-vue3": "^1.1.1", "less": "^4.2.0", + "maptalks": "^1.1.3", "markdown-it": "^14.1.0", "mitt": "^3.0.1", "serialport": "^12.0.0", "vue": "^3.3.4", "vue-drag-resize": "^2.0.3", "vue-json-viewer": "^3.0.4", + "vue-markdown-render": "^2.2.1", "vue3-json-editor": "^1.1.5", "vue3-konami-code": "^1.0.0" }, @@ -631,6 +633,25 @@ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, + "node_modules/@maptalks/feature-filter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@maptalks/feature-filter/-/feature-filter-1.3.0.tgz", + "integrity": "sha512-O6GcFzPuCbz6bO4TNBnmP8VunS0GexTzZ4m36A4HbYQICY1cplpFgntX2fyB/TY3cZrFRGoeMePBeMZFMOOhcQ==" + }, + "node_modules/@maptalks/function-type": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@maptalks/function-type/-/function-type-1.4.1.tgz", + "integrity": "sha512-Z78FdI8mZ4vdcBqxlMDV6HP6WE/njZ9PhlM5JwbURxW1DnQK7R1GP+fubkGJPP6hVSv0Y52/dK8cZE/HuXVZ3A==", + "dependencies": { + "colorin": "^0.5.0" + } + }, + "node_modules/@maptalks/function-type/node_modules/colorin": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/colorin/-/colorin-0.5.0.tgz", + "integrity": "sha512-gN6fIMCehYUonAhbmm5+ZHeFunG75u77hI2tRlVndNthO6v0wZMV2G2FwYSi8Ws4b4lpFJK1ql2a/MlW9z/Vhg==", + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -746,7 +767,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -914,7 +934,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1723,10 +1742,11 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -1834,6 +1854,12 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/colorin": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/colorin/-/colorin-0.6.0.tgz", + "integrity": "sha512-huI54MwKNMP6eypurqzxGf7rvTA3pNWdXZopQbN7v3TDxXYWyyGQ3CtQndNZ2Z0Gy6HDWqA7sRYxbjRDO2FZMA==", + "license": "MIT" + }, "node_modules/compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", @@ -2234,6 +2260,12 @@ "node": ">= 0.6" } }, + "node_modules/frustum-intersects": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/frustum-intersects/-/frustum-intersects-0.1.0.tgz", + "integrity": "sha512-W0S6dmX5LJLtamimyuKhvbkpDTm5eVfMgk4X9yXNyWQ1zZ/cMm0PZoeX9Pm0tL302l+erQVrdfRGhV3ILfeTeQ==", + "license": "MIT" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2536,9 +2568,9 @@ } }, "node_modules/koa": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.0.tgz", - "integrity": "sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz", + "integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==", "license": "MIT", "dependencies": { "accepts": "^1.3.5", @@ -2644,6 +2676,12 @@ "source-map": "~0.6.0" } }, + "node_modules/lineclip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/lineclip/-/lineclip-1.1.5.tgz", + "integrity": "sha512-KlA/wRSjpKl7tS9iRUdlG72oQ7qZ1IlVbVgHwoO10TBR/4gQ86uhKow6nlzMAJJhjCWKto8OeoAzzIzKSmN25A==", + "license": "ISC" + }, "node_modules/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", @@ -2710,6 +2748,25 @@ "node": ">=6" } }, + "node_modules/maptalks": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/maptalks/-/maptalks-1.1.3.tgz", + "integrity": "sha512-swf+5/h7s9SyHgnz5Gnnocjq1TVBbmazZnP2iPN+bzbNTf0ExnjVCiqml9wuPHBcUW3LCzjLqzL6KCB0CVCv+g==", + "license": "BSD-3-Clause", + "dependencies": { + "@maptalks/feature-filter": "^1.3.0", + "@maptalks/function-type": "^1.4.1", + "colorin": "^0.6.0", + "frustum-intersects": "^0.1.0", + "lineclip": "^1.1.5", + "rbush": "^2.0.2", + "simplify-js": "^1.2.1" + }, + "optionalDependencies": { + "@rollup/rollup-darwin-x64": "^4.13.0", + "@rollup/rollup-linux-x64-gnu": "^4.13.0" + } + }, "node_modules/markdown-it": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", @@ -3095,6 +3152,21 @@ } ] }, + "node_modules/quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", + "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==", + "license": "ISC" + }, + "node_modules/rbush": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", + "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "license": "MIT", + "dependencies": { + "quickselect": "^1.0.1" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3298,6 +3370,12 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/simplify-js": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/simplify-js/-/simplify-js-1.2.4.tgz", + "integrity": "sha512-vITfSlwt7h/oyrU42R83mtzFpwYk3+mkH9bOHqq/Qw6n8rtR7aE3NZQ5fbcyCUVVmuMJR6ynsAhOfK2qoah8Jg==", + "license": "BSD-2-Clause" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3341,6 +3419,51 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -3481,15 +3604,18 @@ } }, "node_modules/vite": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz", - "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" @@ -3552,6 +3678,34 @@ } } }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/vue": { "version": "3.4.21", "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", @@ -3588,6 +3742,67 @@ "vue": "^3.2.2" } }, + "node_modules/vue-markdown-render": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vue-markdown-render/-/vue-markdown-render-2.2.1.tgz", + "integrity": "sha512-XkYnC0PMdbs6Vy6j/gZXSvCuOS0787Se5COwXlepRqiqPiunyCIeTPQAO2XnB4Yl04EOHXwLx5y6IuszMWSgyQ==", + "license": "MIT", + "dependencies": { + "markdown-it": "^13.0.2" + }, + "peerDependencies": { + "vue": "^3.3.4" + } + }, + "node_modules/vue-markdown-render/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/vue-markdown-render/node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "license": "MIT", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/vue-markdown-render/node_modules/markdown-it": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/vue-markdown-render/node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "license": "MIT" + }, + "node_modules/vue-markdown-render/node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "license": "MIT" + }, "node_modules/vue3-json-editor": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/vue3-json-editor/-/vue3-json-editor-1.1.5.tgz", @@ -3920,6 +4135,26 @@ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, + "@maptalks/feature-filter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@maptalks/feature-filter/-/feature-filter-1.3.0.tgz", + "integrity": "sha512-O6GcFzPuCbz6bO4TNBnmP8VunS0GexTzZ4m36A4HbYQICY1cplpFgntX2fyB/TY3cZrFRGoeMePBeMZFMOOhcQ==" + }, + "@maptalks/function-type": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@maptalks/function-type/-/function-type-1.4.1.tgz", + "integrity": "sha512-Z78FdI8mZ4vdcBqxlMDV6HP6WE/njZ9PhlM5JwbURxW1DnQK7R1GP+fubkGJPP6hVSv0Y52/dK8cZE/HuXVZ3A==", + "requires": { + "colorin": "^0.5.0" + }, + "dependencies": { + "colorin": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/colorin/-/colorin-0.5.0.tgz", + "integrity": "sha512-gN6fIMCehYUonAhbmm5+ZHeFunG75u77hI2tRlVndNthO6v0wZMV2G2FwYSi8Ws4b4lpFJK1ql2a/MlW9z/Vhg==" + } + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3987,7 +4222,6 @@ "version": "4.38.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", - "dev": true, "optional": true }, "@rollup/rollup-freebsd-arm64": { @@ -4071,7 +4305,6 @@ "version": "4.38.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", - "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { @@ -4557,9 +4790,9 @@ } }, "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -4649,6 +4882,11 @@ "simple-swizzle": "^0.2.2" } }, + "colorin": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/colorin/-/colorin-0.6.0.tgz", + "integrity": "sha512-huI54MwKNMP6eypurqzxGf7rvTA3pNWdXZopQbN7v3TDxXYWyyGQ3CtQndNZ2Z0Gy6HDWqA7sRYxbjRDO2FZMA==" + }, "compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", @@ -4939,6 +5177,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "frustum-intersects": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/frustum-intersects/-/frustum-intersects-0.1.0.tgz", + "integrity": "sha512-W0S6dmX5LJLtamimyuKhvbkpDTm5eVfMgk4X9yXNyWQ1zZ/cMm0PZoeX9Pm0tL302l+erQVrdfRGhV3ILfeTeQ==" + }, "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -5166,9 +5409,9 @@ } }, "koa": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.0.tgz", - "integrity": "sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz", + "integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==", "requires": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -5257,6 +5500,11 @@ "tslib": "^2.3.0" } }, + "lineclip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/lineclip/-/lineclip-1.1.5.tgz", + "integrity": "sha512-KlA/wRSjpKl7tS9iRUdlG72oQ7qZ1IlVbVgHwoO10TBR/4gQ86uhKow6nlzMAJJhjCWKto8OeoAzzIzKSmN25A==" + }, "linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", @@ -5309,6 +5557,22 @@ "semver": "^5.6.0" } }, + "maptalks": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/maptalks/-/maptalks-1.1.3.tgz", + "integrity": "sha512-swf+5/h7s9SyHgnz5Gnnocjq1TVBbmazZnP2iPN+bzbNTf0ExnjVCiqml9wuPHBcUW3LCzjLqzL6KCB0CVCv+g==", + "requires": { + "@maptalks/feature-filter": "^1.3.0", + "@maptalks/function-type": "^1.4.1", + "@rollup/rollup-darwin-x64": "^4.13.0", + "@rollup/rollup-linux-x64-gnu": "^4.13.0", + "colorin": "^0.6.0", + "frustum-intersects": "^0.1.0", + "lineclip": "^1.1.5", + "rbush": "^2.0.2", + "simplify-js": "^1.2.1" + } + }, "markdown-it": { "version": "14.1.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", @@ -5568,6 +5832,19 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", + "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" + }, + "rbush": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", + "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "requires": { + "quickselect": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -5711,6 +5988,11 @@ "is-arrayish": "^0.3.1" } }, + "simplify-js": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/simplify-js/-/simplify-js-1.2.4.tgz", + "integrity": "sha512-vITfSlwt7h/oyrU42R83mtzFpwYk3+mkH9bOHqq/Qw6n8rtR7aE3NZQ5fbcyCUVVmuMJR6ynsAhOfK2qoah8Jg==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5738,6 +6020,31 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "requires": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "dependencies": { + "fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5839,15 +6146,33 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vite": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz", - "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, "requires": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", "fsevents": "~2.3.3", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "dependencies": { + "fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } } }, "vue": { @@ -5875,6 +6200,51 @@ "clipboard": "^2.0.4" } }, + "vue-markdown-render": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vue-markdown-render/-/vue-markdown-render-2.2.1.tgz", + "integrity": "sha512-XkYnC0PMdbs6Vy6j/gZXSvCuOS0787Se5COwXlepRqiqPiunyCIeTPQAO2XnB4Yl04EOHXwLx5y6IuszMWSgyQ==", + "requires": { + "markdown-it": "^13.0.2" + }, + "dependencies": { + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + }, + "linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "markdown-it": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", + "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", + "requires": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + } + } + }, "vue3-json-editor": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/vue3-json-editor/-/vue3-json-editor-1.1.5.tgz", diff --git a/package.json b/package.json index 5087d90..622f16d 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,14 @@ "element-plus": "^2.4.4", "json-editor-vue3": "^1.1.1", "less": "^4.2.0", + "maptalks": "^1.1.3", "markdown-it": "^14.1.0", "mitt": "^3.0.1", "serialport": "^12.0.0", "vue": "^3.3.4", "vue-drag-resize": "^2.0.3", "vue-json-viewer": "^3.0.4", + "vue-markdown-render": "^2.2.1", "vue3-json-editor": "^1.1.5", "vue3-konami-code": "^1.0.0" }, diff --git a/src-tauri/aaa.iss b/src-tauri/aaa.iss deleted file mode 100644 index 2d0b7a5..0000000 --- a/src-tauri/aaa.iss +++ /dev/null @@ -1,12 +0,0 @@ -[Setup] -AppName=MyApp -AppVersion=1.0 -DefaultDirName={pf}\MyApp -OutputDir=. -OutputBaseFilename=MyAppInstaller - -[Files] -Source: "src-tauri/target/release/bundle/msi/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs - -[Run] -Filename: "{app}\path\to\vsruntime\installer.exe"; Parameters: "/quiet /norestart"; Flags: waituntilterminated \ No newline at end of file diff --git a/src-tauri/config.json b/src-tauri/config.json index 1cdb515..46fbff2 100644 --- a/src-tauri/config.json +++ b/src-tauri/config.json @@ -1 +1 @@ -{"pathofsave":null,"Filename":"testaa","caijiavgNumber":"1","useSG":false,"usehighpass":false,"Dispatcher":{"isenable":true,"begin":"06:25","end":"23:59"},"sensor_typeforset":"IS3"} \ No newline at end of file +{"pathofsave":"C:\\Program Files\\lucamtool","Filename":"testaa","caijiavgNumber":"1","useSG":false,"usehighpass":false,"Dispatcher":{"isenable":true,"begin":"06:25","end":"23:59"},"sensor_typeforset":"IS3"} \ No newline at end of file diff --git a/src-tauri/iris_data_example.iris b/src-tauri/iris_data_example.iris new file mode 100644 index 0000000000000000000000000000000000000000..fc7637c3ca7f1e16c41e9607e67162564d0187e7 GIT binary patch literal 32366 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 V0%Z!6DNv?BnF3`B{J*Ebe**GsA>jZ3 literal 0 HcmV?d00001 diff --git a/src-tauri/iris_is3lib.dll b/src-tauri/iris_is3lib.dll index bc2c8479bcccbb61a8bba4276874665468d813c4..e070ea132e8ec79df6b4976ecad02c69119d6096 100644 GIT binary patch delta 29 gcmZpe!qhN@X#)o%OY&*fjLkfZ8DS7sMR String { + //输出 输入参数 + //println!("Gain: {:?}", Gain); + // println!("direction: {:?}", direction); + // println!("Filepath: {:?}", devinfo); + // println!("DNData: {:?}", dndata); + // println!("Lampdata: {:?}", lampdata); + // println!("Devinfo: {:?}", devinfo); + let mut oneirisdata:OneIRISData = OneIRISData::new(); + let mut spectraldatagain: SpectralData= SpectralData::new(); + spectraldatagain.name= devinfo["name"].as_str().unwrap_or("Unknown").to_string()+&"_".to_string()+&devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string()+&"_gain".to_string(); + spectraldatagain.sensor_id= devinfo["name"].as_str().unwrap_or("Unknown").to_string()+&devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string(); + spectraldatagain.bands= devinfo["bands"].as_u64().unwrap_or(0) as u16; + spectraldatagain.pixel_size=8; + spectraldatagain.data_type=DATA_TYPE_FLOAT64; + spectraldatagain.fiber_id=direction as u8; + spectraldatagain.exposure=Gain["shutter_time"].as_u64().unwrap_or(0) as f64; + spectraldatagain.gain=Gain["sensor_gain"].as_f64().unwrap_or(1.0) as f32; + let datenow = chrono::Local::now(); + let nowtiem= TimeStruct { + + time_zone:50, + year:datenow.year() as u16, + month:datenow.month() as u8, + day:datenow.day() as u8, + hour:datenow.hour() as u8, + minute:datenow.minute() as u8, + second:datenow.second() as u8, + millisecond:datenow.timestamp_subsec_millis() as u16, + }; + spectraldatagain.collection_time=nowtiem.clone(); + spectraldatagain.ground_type=Target_Spectral_Type_CaliFile_Gain; + spectraldatagain.valid_flag=1; + let spectraldatavec:Vec=Gain["Data"].as_array().unwrap_or(&vec![]).iter() + .map(|x| x.as_f64().unwrap_or(0.0)) + .collect::>(); + spectraldatagain.Set_Spectral_Data(spectraldatavec, DATA_TYPE_FLOAT64); + println!("spectraldata.name: {:?}", spectraldatagain.name); + oneirisdata.spectral_data_section.push(spectraldatagain); + let mut spectraldata_dn: SpectralData= SpectralData::new(); + spectraldata_dn.name= devinfo["name"].as_str().unwrap_or("Unknown").to_string()+&"_".to_string()+&devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string()+&"_dn".to_string(); + spectraldata_dn.sensor_id= devinfo["name"].as_str().unwrap_or("Unknown").to_string()+&devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string(); + spectraldata_dn.bands= devinfo["bands"].as_u64().unwrap_or(0) as u16; + spectraldata_dn.pixel_size=8; + spectraldata_dn.fiber_id=direction as u8; + spectraldata_dn.exposure=dndata["shutter_time"].as_u64().unwrap_or(0) as f64; + spectraldata_dn.gain=dndata["gain"].as_f64().unwrap_or(1.0) as f32; + spectraldata_dn.data_type=DATA_TYPE_FLOAT64; + spectraldata_dn.collection_time=nowtiem.clone(); + spectraldata_dn.ground_type=Target_Spectral_Type_DN; + spectraldata_dn.valid_flag=1; + let spectraldatavec_dn:Vec=dndata["data"].as_array().unwrap_or(&vec![]).iter() + .map(|x| x.as_f64().unwrap_or(0.0)) + .collect::>(); + spectraldata_dn.Set_Spectral_Data(spectraldatavec_dn, DATA_TYPE_FLOAT64); + println!("spectraldata_dn.name: {:?}", spectraldata_dn.name); + oneirisdata.spectral_data_section.push(spectraldata_dn); + let mut spectraldata_lamp: SpectralData= SpectralData::new(); + let lampvalue= lampdata["value_lable"].as_str().unwrap_or("Unknown"); + let datalabel= lampdata["data_value"].as_str().unwrap_or("Unknown"); + spectraldata_lamp.name= devinfo["name"].as_str().unwrap_or("Unknown").to_string()+&"_".to_string()+&devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string()+&"_lamplable_".to_string()+&lampvalue.to_string()+&"_datalabel_".to_string()+&datalabel.to_string(); + spectraldata_lamp.sensor_id= devinfo["name"].as_str().unwrap_or("Unknown").to_string()+&devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string(); + let lampvalue_f64_vec= lampdata["data"].as_array().unwrap_or(&vec![]).iter() + .map(|x| x.as_f64().unwrap_or(0.0)) + .collect::>(); + spectraldata_lamp.Set_Spectral_Data(lampvalue_f64_vec, DATA_TYPE_FLOAT64); + spectraldata_lamp.ground_type=Target_LAMP_VALUE_SCALED; + oneirisdata.spectral_data_section.push(spectraldata_lamp); + + let spectraldata_devinfo= json!( + { + "info_type": "devinfo", // 0 for device info + "sensor_id": devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string(), + "wave_coeff": { + "a1": devinfo["bochangxishu"]["a1"].as_f64().unwrap_or(0.0), + "a2": devinfo["bochangxishu"]["a2"].as_f64().unwrap_or(0.0), + "a3": devinfo["bochangxishu"]["a3"].as_f64().unwrap_or(0.0), + "a4": devinfo["bochangxishu"]["a4"].as_f64().unwrap_or(0.0) + } + + } + ); + let environment_info= json!( + { + "info_type": "environment", // 1 for environment info + "date": format!("{}-{:02}-{:02} {:02}:{:02}:{:02}", + datenow.year(), + datenow.month(), + datenow.day(), + datenow.hour(), + datenow.minute(), + datenow.second() + ), + + + } + ); + /* + let spectraldata_devinfo= json!( + { + "info_type": "infolist", // 0 for device info + "info_number":3, + "info_list": [ + { + "info_type": "devinfo", // 0 for device info + "sensor_id": "is30002", + "bandnum": 2048, + "wave_coeff": { + "a1": 0.0, + "a2": 0.0, + "a3": 400, + "a4": 1.0 + } + }, + { + "info_type": "environment", // 1 for gain info + "date": "2000-01-00 00:00:00", + //下面可选 + "humidity":90.0, + "temperature":35.0 , + "gps":{ + "latitude":115.01, + "longitude": 39.01, + "altitude": 100.0 + }, + }, + { + "info_type": "devinfo", // 0 for device info + "sensor_id": "is20001", + "bandnum": 512, + "wave_coeff": { + "a1": 0, + "a2": 0.0, + "a3":390, + "a4": 4 + } + } + ] + + } + ); + */ + + // spectraldata_devinfo.sensor_id=devinfo["serialnumber"].as_str().unwrap_or("Unknown").to_string(); + // spectraldata_devinfo.wave_coeff[0]=devinfo["bochangxishu"]["a1"].as_f64().unwrap_or(0.0); + // spectraldata_devinfo.wave_coeff[1]=devinfo["bochangxishu"]["a2"].as_f64().unwrap_or(0.0); + // spectraldata_devinfo.wave_coeff[2]=devinfo["bochangxishu"]["a3"].as_f64().unwrap_or(0.0); + // spectraldata_devinfo.wave_coeff[3]=devinfo["bochangxishu"]["a4"].as_f64().unwrap_or(0.0); + + oneirisdata.spectral_info_section.push(spectraldata_devinfo); + oneirisdata.spectral_info_section.push(environment_info); + +// 修复后的代码 +let filesave_date = format!("{}_{:04}{:02}{:02}", + filepath, // 如果 filepath 是 String,这里会自动借用 + datenow.year(), + datenow.month(), + + datenow.day() +); +let filesavepath=filesave_date.clone()+".iris"; + + wirte_iris_data(&oneirisdata, &filesavepath); + + + + + + + + + + + + + "ok".to_string() + +} \ No newline at end of file diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 9f39639..8a2d993 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,6 +1,6 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] - +mod irisdatamanager; mod algorithm; mod mylog; mod serport; @@ -8,12 +8,13 @@ mod iris_spectral; mod irishypersptral; mod mydefine; mod comman1; +mod myformatiris; use comman1::*; use algorithm::interpolate_spline; use algorithm::sg_smooth; use mydefine::*; use iris_spectral::spectralbase::Senortype; - +use myformatiris::getoneirisfile; enum DevName { IRIS_IS11, IRIS_SENSOR(Senortype), @@ -21,6 +22,7 @@ enum DevName { } use lazy_static::lazy_static; +use tauri::api::dir; use std::sync::Mutex; //设置一个可修改的全局变量 lazy_static! { @@ -42,6 +44,30 @@ lazy_static! { //println!("{}",readdatafromport(1000)); String::from("Port set ok") } +/* let data = { + gain: Gain, + direction: direction, + filepath: Filepath, + DNData: DNData, + LampData: Lampdata, + Devinfo: Devinfo + } */ +#[tauri::command] +fn savecalibratefileIRIS(Gain:serde_json::Value,direction: bool, filepath: String, dndata: serde_json::Value, lampdata: serde_json::Value, devinfo: serde_json::Value) -> String { + //输出 输入参数 + // println!("Gain: {:?}", Gain); + // println!("direction: {:?}", direction); + // println!("Filepath: {:?}", devinfo); + // println!("DNData: {:?}", dndata); + // println!("Lampdata: {:?}", lampdata); + // println!("Devinfo: {:?}", devinfo); + + + + irisdatamanager::savecalibratefileIRIS(Gain, direction, filepath, dndata, lampdata, devinfo) + +} + #[tauri::command] fn savecalibratefile(gain: Vec, shutter: u32, direction: bool, filepath: String) -> String { @@ -213,6 +239,7 @@ fn main() { interpolate_spline, sg_smooth, savecalibratefile, + savecalibratefileIRIS, sendcalibratetodev, setdevtype, set_weave_coeff, @@ -220,7 +247,8 @@ fn main() { algorithm::gaussian_filter_high, algorithm::interpolate_spline_at_points, algorithm::find_peek, - algorithm::compute_weave_coeff + algorithm::compute_weave_coeff, + getoneirisfile ]) .setup(|app| { diff --git a/src-tauri/src/myformatiris/mod.rs b/src-tauri/src/myformatiris/mod.rs new file mode 100644 index 0000000..2420939 --- /dev/null +++ b/src-tauri/src/myformatiris/mod.rs @@ -0,0 +1,16 @@ +pub mod structures; +pub mod read; +pub mod write; + + +pub use structures::{TimeStruct, SpectralData, ImageInfo, OneIRISData}; +pub use structures::*; +pub use read::{read_time, read_spectral_data, read_image_info, read_iris_file}; +pub use write::*; + +#[tauri::command] +pub fn getoneirisfile(path:String)->OneIRISData{ + let returndata=read_iris_file(&path).unwrap(); + return returndata; + +} \ No newline at end of file diff --git a/src-tauri/src/myformatiris/read.rs b/src-tauri/src/myformatiris/read.rs new file mode 100644 index 0000000..0486173 --- /dev/null +++ b/src-tauri/src/myformatiris/read.rs @@ -0,0 +1,343 @@ +use std::io::{Read, Result, BufReader}; +use std::fs::File; +use std::convert::TryInto; +use super::structures::{TimeStruct, SpectralData, ImageInfo, OneIRISData}; +// use serde::de::value; +use serde_json::Value; +pub fn read_time(reader: &mut R) -> Result { + let mut buffer = [0u8; 10]; // Corrected buffer size to 10 bytes + reader.read_exact(&mut buffer)?; + + Ok(TimeStruct { + time_zone: buffer[0] as i8, + year: u16::from_le_bytes([buffer[1], buffer[2]]), + month: buffer[3], + day: buffer[4], + hour: buffer[5], + minute: buffer[6], + second: buffer[7], + millisecond: u16::from_le_bytes([buffer[8], buffer[9]]), // Indices 8 and 9 are correct for 10-byte buffer + }) +} + + + +pub fn read_image_info(reader: &mut R) -> Result { + let mut info = ImageInfo::new(); + + // Read data length + let mut len_buf = [0u8; 8]; + reader.read_exact(&mut len_buf)?; + info.data_length = u64::from_le_bytes(len_buf); + + // Read name (fixed size 100 bytes) + let mut name_buf = [0u8; 100]; + reader.read_exact(&mut name_buf)?; + info.name = String::from_utf8_lossy(&name_buf).trim_end_matches('\0').to_string(); + info.name = remove_after_null_split_once(info.name); + + // Read collection time + info.collection_time = read_time(reader)?; + + // Read info type + let mut type_buf = [0u8; 1]; + reader.read_exact(&mut type_buf)?; + info.info_type = type_buf[0]; + let imagedatlenth= info.data_length as u64- 100-10-1; // Adjusted to account for the size of TimeStruct and info_type + // Read image data + info.image_data.resize(imagedatlenth as usize, 0); + reader.read_exact(&mut info.image_data)?; + + Ok(info) +} + +pub fn read_iris_file(path: &str) -> Result { + let file = File::open(path)?; + let mut reader = BufReader::new(file); + + // Read and verify magic number + // let mut magic = [0u8; 4]; + // reader.read_exact(&mut magic)?; + // if magic != [0x49, 0x52, 0x49, 0x53] { // "IRIS" in ASCII + // return Err(std::io::Error::new( + // std::io::ErrorKind::InvalidData, + // "Not a valid IRIS file" + // )); + // } + + let mut iris_data = OneIRISData::new(); + + // // Read file version + // let mut version = [0u8; 2]; + // reader.read_exact(&mut version)?; + + // Read sections until EOF + loop { + let mut section_header = [0u8; 12]; // type (4) + length (8) + if reader.read_exact(&mut section_header).is_err() { + break; // EOF reached + } + + let section_type = u32::from_le_bytes(section_header[0..4].try_into().unwrap()); + let section_length = u64::from_le_bytes(section_header[4..12].try_into().unwrap()); + + match section_type { + 0x00FF00FF => { // Spectral data section + let count = read_section_count(&mut reader)?; + let mut data = Vec::with_capacity(count); + for _ in 0..count { + data.push(read_spectral_data(&mut reader)?); + } + iris_data.spectral_data_section = data; + }, + 0xFF00FF00 => { // Spectral info section + let count = read_section_count(&mut reader)?; + let mut data = Vec::with_capacity(count); + for _ in 0..count { + let mut tempbuffer = [0u8; 3]; // Adjust size as needed + reader.read_exact(&mut tempbuffer)?; + let lenth = u16::from_le_bytes([tempbuffer[0],tempbuffer[1]]) as usize; + let datatype= u8::from_le_bytes([tempbuffer[2]]); + let mut tempvector = vec![0u8; lenth]; + reader.read_exact(&mut tempvector)?; + // Convert to String + let json_string = String::from_utf8(tempvector).unwrap_or_default(); + let json_string = json_string.trim_end_matches('\0').to_string(); + //print!("JSON String: {}", json_string); + let json:Value = match serde_json::from_str(&json_string){ + Ok(json) => json, + Err(e) => { + eprintln!("Error parsing JSON: {}", e); + continue; // Skip this entry if parsing fails + } + }; // Handle parsing error gracefully + + //判断json["info_type"]是否存在 + if !json.get("info_type").is_some() { + eprintln!("JSON does not contain 'info_type': {}", json_string); + continue; // Skip this entry if "info_type" is missing + } + /* { + "info_type": "infolist", // 0 for device info + "info_number":3, + "info_list": [ + { + "info_type": "devinfo", // 0 for device info + "sensor_id": "is30002", + "bandnum": 2048, + "wave_coeff": { + "a1": 0.0, + "a2": 0.0, + "a3": 400, + "a4": 1.0 + } + }, + { + "info_type": "environment", // 1 for gain info + "date": "2000-01-00 00:00:00", + //下面可选 + "humidity":90.0, + "temperature":35.0 , + "gps":{ + "latitude":115.01, + "longitude": 39.01, + "altitude": 100.0 + }, + }, + { + "info_type": "devinfo", // 0 for device info + "sensor_id": "is20001", + "bandnum": 512, + "wave_coeff": { + "a1": 0, + "a2": 0.0, + "a3":390, + "a4": 4 + } + } + ] + + } */ + //如果info_type是infolist 则需要逐个解析 + if json.get("info_type").and_then(Value::as_str) == Some("infolist") { + let info_number = json.get("info_number").and_then(Value::as_u64).unwrap_or(0) as usize; + for i in 0 ..info_number{ + //将对应的info加入到data中 + if let Some(info) = json.get("info_list").and_then(|list| list.get(i)) { + data.push(info.clone()); + } + + + } + + continue; // Skip the rest of the loop for this entry + } + + + + data.push(json); + //println!("Parsed JSON: {:?}", json); + // let mut data_entry = SpectralInfo::new(); + // data_entry.sensor_id = json.get("SensorId").and_then(Value::as_str).unwrap_or_default().to_string(); + // data_entry.wave_coeff[0]=json["WaveCoeff"]["a1"].as_f64().unwrap_or(0.0); + // data_entry.wave_coeff[1]=json["WaveCoeff"]["a2"].as_f64().unwrap_or(0.0); + // data_entry.wave_coeff[2]=json["WaveCoeff"]["a3"].as_f64().unwrap_or(0.0); + // data_entry.wave_coeff[3]=json["WaveCoeff"]["a4"].as_f64().unwrap_or(0.0); + // data.push(data_entry); + // Parse JSON string + + + + + } + iris_data.spectral_info_section = data; + }, + 0xF0F0F0F0 => { // Other info section + if section_length == 0 { + iris_data.other_info_section = Vec::new(); // Handle empty section + continue; // Skip empty section + } + let count = read_section_count(&mut reader)?; + let mut data = Vec::with_capacity(count); + for _ in 0..count { + let mut tempbuffer = [0u8; 3]; // Adjust size as needed + reader.read_exact(&mut tempbuffer)?; + let lenth = u16::from_le_bytes([tempbuffer[0], tempbuffer[1]]) as usize; + let info_type = u8::from_le_bytes([tempbuffer[2]]); + let mut tempvector = vec![0u8; lenth]; + reader.read_exact(&mut tempvector)?; + // Convert to String + let json_string = String::from_utf8(tempvector).unwrap_or_default(); + let json_string = json_string.trim_end_matches('\0').to_string(); + //print!("JSON String: {}", json_string); + let json: Value = match serde_json::from_str(&json_string) { + Ok(json) => json, + Err(e) => { + eprintln!("Error parsing JSON: {}", e); + continue; // Skip this entry if parsing fails + } + }; // Handle parsing error gracefully + data.push(json); + + } + iris_data.other_info_section = data; + }, + 0x0F0F0F0F => { // Image info section + if section_length== 0 { + iris_data.image_info_section= Vec::new(); // Handle empty section + continue; // Skip empty section + + } + let count = read_section_count(&mut reader)?; + let mut data = Vec::with_capacity(count); + for _ in 0..count { + data.push(read_image_info(&mut reader)?); + } + iris_data.image_info_section = data; + }, + _ => { + // Skip unknown sections + let mut buf = vec![0u8; section_length as usize]; + reader.read_exact(&mut buf)?; + } + } + } + + Ok(iris_data) +} + +fn read_section_count(reader: &mut R) -> Result { + let mut count_buf = [0u8; 2]; + reader.read_exact(&mut count_buf)?; + Ok(u16::from_le_bytes(count_buf) as usize) +} + +// pub fn read_other_info(reader: &mut R) -> Result { +// let mut info = OtherInfo::new(); + +// // Read info type +// let mut type_buf = [0u8; 1]; +// reader.read_exact(&mut type_buf)?; +// info.info_type = type_buf[0]; + +// // Read data length +// let mut len_buf = [0u8; 8]; +// reader.read_exact(&mut len_buf)?; +// let data_len = u64::from_le_bytes(len_buf) as usize; + +// // Read data +// info.data.resize(data_len, 0); +// reader.read_exact(&mut info.data)?; + +// Ok(info) +// } +fn remove_after_null_split_once(s: String) -> String { + if let Some((before_null, _after_null)) = s.split_once('\0') { + // 返回 \0 之前的部分 + before_null.to_string() + } else { + // 如果没有找到 \0,就返回原始 String + s + } +} +pub fn read_spectral_data(reader: &mut R) -> Result { + let mut data = SpectralData::new(); + + // Read fixed-size fields + let mut name_buf = [0u8; 100]; + + reader.read_exact(&mut name_buf)?; + name_buf[99] = 0; // Ensure null termination + let temp= String::from_utf8_lossy(&name_buf); + data.name = temp.trim_end_matches('\0').to_string(); + data.name = remove_after_null_split_once(data.name); + + let mut sensor_buf = [0u8; 50]; + reader.read_exact(&mut sensor_buf)?; + data.sensor_id = String::from_utf8_lossy(&sensor_buf).trim_end_matches('\0').to_string(); + data.sensor_id = remove_after_null_split_once(data.sensor_id); + let mut uint8_buf = [0u8; 1]; + + reader.read_exact(&mut uint8_buf)?; + data.fiber_id = uint8_buf[0]; + + + data.collection_time = read_time(reader)?; + + + let mut float_buf = [0u8; 8]; + reader.read_exact(&mut float_buf)?; + data.exposure = f64::from_le_bytes(float_buf); + + let mut float_buf = [0u8; 4]; + reader.read_exact(&mut float_buf)?; + data.gain = f32::from_le_bytes(float_buf); + + let mut byte_buf = [0u8; 1]; + reader.read_exact(&mut byte_buf)?; + data.data_type = byte_buf[0]; + + reader.read_exact(&mut byte_buf)?; + data.pixel_size = byte_buf[0]; + + reader.read_exact(&mut byte_buf)?; + data.ground_type = byte_buf[0]; + + let mut short_buf = [0u8; 2]; + reader.read_exact(&mut short_buf)?; + data.bands = u16::from_le_bytes(short_buf); + + reader.read_exact(&mut byte_buf)?; + data.valid_flag = byte_buf[0]; + let data_len=data.pixel_size as usize * data.bands as usize; + // Read the length of the spectral_data vector + // let mut len_buf = [0u8; 8]; + // reader.read_exact(&mut len_buf)?; + // let data_len = u64::from_le_bytes(len_buf) as usize; + + // Read the spectral_data vector + data.spectral_data.resize(data_len, 0); + reader.read_exact(&mut data.spectral_data)?; + + Ok(data) +} \ No newline at end of file diff --git a/src-tauri/src/myformatiris/structures.rs b/src-tauri/src/myformatiris/structures.rs new file mode 100644 index 0000000..584e4f2 --- /dev/null +++ b/src-tauri/src/myformatiris/structures.rs @@ -0,0 +1,411 @@ + +pub const DATA_TYPE_UINT8: u8 = 0x10; +pub const DATA_TYPE_INT16: u8 = 0x11; +pub const DATA_TYPE_UINT16: u8 = 0x12; +pub const DATA_TYPE_INT32: u8 = 0x13; +pub const DATA_TYPE_UINT32: u8 = 0x14; +pub const DATA_TYPE_FLOAT32: u8 = 0x20; +pub const DATA_TYPE_FLOAT64: u8 = 0x21; + +/* 0 dn 1 rad 2 ref 3 irad 4 califile 5 flat_ref 6 dark_dn 7 flat_dn */ + +pub const Target_Spectral_Type_DN:u8 = 0x00; +pub const Target_Spectral_Type_Rad:u8 = 0x01; +pub const Target_Spectral_Type_Ref:u8 = 0x02; +pub const Target_Spectral_Type_IRad:u8 = 0x03; +pub const Target_Spectral_Type_CaliFile_Gain:u8 = 0x04; +pub const Target_Spectral_Type_FlatRef:u8 = 0x05; +pub const Target_Spectral_Type_DarkDN:u8 = 0x06; +pub const Target_Spectral_Type_FlatDN:u8 = 0x07; +pub const Target_LAMP_VALUE_SCALED:u8 = 0x08; + +use serde::Serialize; +use serde_json::json; + + + +#[derive(serde::Serialize,Debug, Clone, PartialEq)] +pub struct TimeStruct { + pub time_zone: i8, + pub year: u16, + pub month: u8, + pub day: u8, + pub hour: u8, + pub minute: u8, + pub second: u8, + pub millisecond: u16, +} + +impl TimeStruct { + pub fn new() -> Self { + TimeStruct { + time_zone: 0, + year: 0, + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + } + } +} + +#[derive(serde::Serialize,Debug, Clone, PartialEq)] +pub struct SpectralData { + pub name: String, + pub sensor_id: String, + pub fiber_id: u8, + pub collection_time: TimeStruct, + pub exposure: f64, + pub gain: f32, + pub data_type: u8, + pub pixel_size: u8, + pub ground_type: u8, + pub bands: u16, + pub valid_flag: u8, + pub spectral_data: Vec, +} + +impl SpectralData { + pub fn new() -> Self { + SpectralData { + name: String::new(), + sensor_id: String::new(), + fiber_id:0, + collection_time: TimeStruct::new(), + exposure: 0.0, + gain: 0.0, + data_type: 0, + pixel_size: 0, + ground_type: 0, + bands: 0, + valid_flag: 0, + spectral_data: Vec::new(), + } + } + + pub fn Get_Spectral_Data(&self)-> Vec { + let mut retrun_data: Vec = Vec::new(); + let datatype = self.data_type; + let bands = self.bands as usize; + match datatype { + DATA_TYPE_UINT8 => { + // uint8 + for i in 0..bands { + retrun_data.push(self.spectral_data[i] as f64); + } + + + + + } + DATA_TYPE_INT16 => { + // int16 + self.spectral_data.chunks(2).for_each(|chunk| { + if chunk.len() == 2 { + let value = i16::from_le_bytes([chunk[0], chunk[1]]); + retrun_data.push(value as f64); + } + }); + + } + DATA_TYPE_UINT16 => { + // uint16 + self.spectral_data.chunks(2).for_each(|chunk| { + if chunk.len() == 2 { + let value = u16::from_le_bytes([chunk[0], chunk[1]]); + retrun_data.push(value as f64); + } + }); + + } + DATA_TYPE_INT32 => { + // int32 + + + self.spectral_data.chunks(4).for_each(|chunk| { + if chunk.len() == 4 { + let value = i32::from_le_bytes([ + chunk[0], + chunk[1], + chunk[2], + chunk[3], + ]); + retrun_data.push(value as f64); + } + }); + + } + DATA_TYPE_UINT32 => { + // uint32 + for i in (0..self.spectral_data.len()).step_by(4) { + let value = u32::from_le_bytes([ + self.spectral_data[i], + self.spectral_data[i + 1], + self.spectral_data[i + 2], + self.spectral_data[i + 3], + ]); + retrun_data.push(value as f64); + } + } + DATA_TYPE_FLOAT32 => { + // float32 + for i in (0..self.spectral_data.len()).step_by(4) { + let value = f32::from_le_bytes([ + self.spectral_data[i], + self.spectral_data[i + 1], + self.spectral_data[i + 2], + self.spectral_data[i + 3], + ]); + retrun_data.push(value as f64); + } + } + DATA_TYPE_FLOAT64 => { + // float64 + for i in (0..self.spectral_data.len()).step_by(8) { + let value = f64::from_le_bytes([ + self.spectral_data[i], + self.spectral_data[i + 1], + self.spectral_data[i + 2], + self.spectral_data[i + 3], + self.spectral_data[i + 4], + self.spectral_data[i + 5], + self.spectral_data[i + 6], + self.spectral_data[i + 7], + ]); + retrun_data.push(value); + } + } + _ => { + // Unsupported data type + panic!("Unsupported data type: {}", datatype); + } + } + + + + retrun_data + + + } + pub fn Set_Spectral_Data(&mut self, data: Vec,datatype: u8) { + self.data_type = datatype; + self.bands = data.len() as u16; + self.spectral_data.clear(); + + // let datatype = self.data_type; + let bands = self.bands as usize; + match datatype { + DATA_TYPE_UINT8 => { + // uint8 + self.pixel_size = 1; + self.spectral_data.clear(); + for i in 0..bands { + if i < data.len() { + self.spectral_data.push(data[i] as u8); + } else { + self.spectral_data.push(0); + } + } + } + DATA_TYPE_INT16 => { + // int16 + self.pixel_size = 2; + self.spectral_data.clear(); + for i in 0..bands { + if i < data.len() { + let value = data[i] as i16; + self.spectral_data.extend_from_slice(&value.to_le_bytes()); + } else { + self.spectral_data.extend_from_slice(&[0, 0]); + } + } + } + DATA_TYPE_UINT16 => { + // uint16 + self.pixel_size = 2; + self.spectral_data.clear(); + for i in 0..bands { + if i < data.len() { + let value = data[i] as u16; + self.spectral_data.extend_from_slice(&value.to_le_bytes()); + } else { + self.spectral_data.extend_from_slice(&[0, 0]); + } + } + } + DATA_TYPE_INT32 => { + // int32 + self.pixel_size = 4; + self.spectral_data.clear(); + for i in 0..bands { + if i < data.len() { + let value = data[i] as i32; + self.spectral_data.extend_from_slice(&value.to_le_bytes()); + } else { + self.spectral_data.extend_from_slice(&[0, 0, 0, 0]); + } + } + } + DATA_TYPE_UINT32 => { + // uint32 + self.pixel_size = 4; + self.spectral_data.clear(); + for i in 0..bands { + if i < data.len() { + let value = data[i] as u32; + self.spectral_data.extend_from_slice(&value.to_le_bytes()); + } else { + self.spectral_data.extend_from_slice(&[0, 0, 0, 0]); + } + } + } + DATA_TYPE_FLOAT32 => { + // float32 + self.pixel_size = 4; + self.spectral_data.clear(); + for i in 0..bands { + if i < data.len() { + let value = data[i] as f32; + self.spectral_data.extend_from_slice(&value.to_le_bytes()); + } else { + self.spectral_data.extend_from_slice(&[0, 0, 0, 0]); + } + } + } + DATA_TYPE_FLOAT64 => { + // float64 + self.pixel_size = 8; + self.spectral_data.clear(); + for i in 0..bands { + if i < data.len() { + let value = data[i]; + self.spectral_data.extend_from_slice(&value.to_le_bytes()); + } else { + self.spectral_data.extend_from_slice(&[0, 0, 0, 0, 0, 0, 0, 0]); + } + } + } + _ => { + // Unsupported data type + panic!("Unsupported data type: {}", datatype); + } + } + + } +} + +// #[derive(Debug, Clone, PartialEq)] +// pub struct OtherInfo { +// pub info_type: u8, +// pub data: Vec, // Assuming the data is variable length +// } + +// impl OtherInfo { +// pub fn new() -> Self { +// OtherInfo { +// info_type: 0, +// data: Vec::new(), +// } +// } +// } +#[derive(serde::Serialize, Debug, Clone, PartialEq)] +pub struct OneIRISData { + pub spectral_data_section: Vec, + pub spectral_info_section: Vec, // Using serde_json::Value for flexibility + pub other_info_section: Vec, + pub image_info_section: Vec, +} + +impl OneIRISData { + pub fn new() -> Self { + OneIRISData { + spectral_data_section: Vec::new(), + spectral_info_section: Vec::new(), + other_info_section: Vec::new(), + image_info_section: Vec::new(), + } + } +} + +// #[derive(Debug, Clone, PartialEq)] +// pub struct SpectralInfo { +// pub sensor_id: String, +// pub wave_coeff: [f64; 4], + +// } + +// impl SpectralInfo { +// pub fn new() -> Self { +// SpectralInfo { +// sensor_id: String::new(), +// wave_coeff: [0.0; 4], +// } +// } +// } + +#[derive(serde::Serialize,Debug, Clone, PartialEq)] +pub struct ImageInfo { + pub data_length: u64, + pub name: String, + pub collection_time: TimeStruct, + pub info_type: u8, + pub image_data: Vec, // Assuming the data is variable length +} + +impl ImageInfo { + pub fn new() -> Self { + ImageInfo { + data_length: 0, + name: String::new(), + collection_time: TimeStruct::new(), + info_type: 0, + image_data: Vec::new(), + } + } +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_time_struct() { + let time = TimeStruct::new(); + assert_eq!(time.time_zone, 0); + assert_eq!(time.year, 0); + assert_eq!(time.month, 1); + } + + #[test] + fn test_spectral_data() { + let data = SpectralData::new(); + assert_eq!(data.name, ""); + assert_eq!(data.bands, 0); + assert!(data.spectral_data.is_empty()); + } + + // #[test] + // fn test_spectral_info() { + // let info = SpectralInfo::new(); + // assert_eq!(info.sensor_id, ""); + // assert_eq!(info.wave_coeff, [0.0; 4]); + // } + + // #[test] + // fn test_other_info() { + // let info = OtherInfo::new(); + // assert_eq!(info.info_type, 0); + // assert!(info.data.is_empty()); + // } + + #[test] + fn test_image_info() { + let info = ImageInfo::new(); + assert_eq!(info.data_length, 0); + assert_eq!(info.name, ""); + assert!(info.image_data.is_empty()); + } +} \ No newline at end of file diff --git a/src-tauri/src/myformatiris/write.rs b/src-tauri/src/myformatiris/write.rs new file mode 100644 index 0000000..20d0eb7 --- /dev/null +++ b/src-tauri/src/myformatiris/write.rs @@ -0,0 +1,222 @@ +use std::fs::File; +use std::io::{self, Write, Result}; +use std::vec; +use serde_json::json; + +// use crate::write; + +use super::structures::{TimeStruct, SpectralData, ImageInfo,OneIRISData}; + +// Internal writer functions remain the same +fn write_time(time: &TimeStruct, writer: &mut W) -> Result<()> { + writer.write_all(&[time.time_zone as u8])?; + writer.write_all(&time.year.to_le_bytes())?; + writer.write_all(&[time.month])?; + writer.write_all(&[time.day])?; + writer.write_all(&[time.hour])?; + writer.write_all(&[time.minute])?; + writer.write_all(&[time.second])?; + writer.write_all(&time.millisecond.to_le_bytes())?; + Ok(()) +} + + +pub fn write_image_info(info: &ImageInfo, writer: &mut W) -> Result<()> { + // Write data length + writer.write_all(&info.data_length.to_le_bytes())?; + + // Write name (fixed size 100 bytes) + let mut name_buf = [0u8; 100]; + let name_bytes = info.name.as_bytes(); + name_buf[..info.name.len().min(99)].copy_from_slice(name_bytes[0..name_bytes.len().min(99)].as_ref()); + writer.write_all(&name_buf)?; + + // Write collection time + write_time(&info.collection_time, writer)?; + + // Write info type + writer.write_all(&[info.info_type])?; + + // Write image data + writer.write_all(&info.image_data)?; + + Ok(()) +} + + + +pub fn write_spectral_data(data: &SpectralData, writer: &mut W) -> Result<()> { + // Write fixed-size fields + let mut name_buf = [0u8; 100]; + + let namebyte= data.name.as_bytes(); + name_buf[..data.name.len().min(99)].copy_from_slice(namebyte[0..namebyte.len().min(99)].as_ref()); + writer.write_all(&name_buf)?; + + let mut sensor_buf = [0u8; 50]; + let sensor_id_bytes = data.sensor_id.as_bytes(); + sensor_buf[..data.sensor_id.len().min(49)].copy_from_slice(sensor_id_bytes[0..sensor_id_bytes.len().min(49)].as_ref()); + writer.write_all(&sensor_buf)?; + writer.write_all(&[data.fiber_id])?; + + write_time(&data.collection_time, writer)?; + writer.write_all(&data.exposure.to_le_bytes())?; + writer.write_all(&data.gain.to_le_bytes())?; + writer.write_all(&[data.data_type])?; + writer.write_all(&[data.pixel_size])?; + writer.write_all(&[data.ground_type])?; + writer.write_all(&data.bands.to_le_bytes())?; + writer.write_all(&[data.valid_flag])?; + + // // Write the length of the spectral_data vector + // writer.write_all(&(data.spectral_data.len() as u64).to_le_bytes())?; + // Write the spectral_data vector + writer.write_all(&data.spectral_data)?; + + Ok(()) +} +pub fn caculate_spectral_data_length(data: &Vec) -> u64 { + let mut lenth:u64 = 0; + //加上u16的长度 + lenth += 2; // bands + //加上u8的长度 + // let numberofspectral=data.len(); + for datatemp in data { + lenth += 100; // name + lenth += 50; // sensor_id + lenth += 1 ; // fiber_id + lenth += 10; // time_zone + lenth += 8; // exposure + lenth += 4; // gain + lenth += 1; // data_type + lenth += 1; // pixel_size + lenth += 1; // ground_type + lenth += 2; // bands + lenth += 1; // valid_flag + lenth += datatemp.spectral_data.len() as u64; + + } + lenth + +} +pub fn caculate_image_info_length(data: &Vec) -> u64 { + let mut lenth: u64 = 0; + if data.is_empty() { + return lenth; + } + lenth +=2; + for info in data { + lenth += 8; // data_length + lenth += 100; // name + lenth += 10; // time_zone + lenth += 1; // info_type + lenth += info.image_data.len() as u64; // image_data length + } + lenth +} + + +pub fn cacluate_other_info_length(data: &Vec) -> (Vec, u64) { + let mut lenth: u64 = 0; + let mut vecback= Vec::new(); + if data.is_empty() { + return (vecback, lenth); + } + // for info in data { + // lenth+=1; // info_type + // lenth+=8; // data length + // lenth += info.data.len() as u64; // data length + // vecback.push(info.info_type); + // vecback.extend_from_slice(&(info.data.len() as u64).to_le_bytes()); + // vecback.extend_from_slice(&info.data); + // } + (vecback, lenth) +} + +pub fn caculate_spectral_info_length(data: &Vec) -> (Vec, u64) { + let mut lenth: u64 = 0; + let mut vecback= Vec::new(); + if data.is_empty() { + return (vecback, lenth); + } + + + + lenth+=2; // sensor_id + let lenthofinfo=data.len() as u16; + vecback.extend_from_slice(&lenthofinfo.to_le_bytes()); // Number of spectral info entries + + + for info in data { + lenth+=2; + lenth+=1; + let mut lenthofthisinfo:u16=0; + let json=info; + let json_string = serde_json::to_string(&json).unwrap(); + let json_bytes = json_string.as_bytes(); + lenthofthisinfo= json_bytes.len() as u16+1; + lenth += lenthofthisinfo as u64 ; + + // 将长度转换为字节并添加到 vecback + vecback.extend_from_slice(&lenthofthisinfo.to_le_bytes()); + vecback.push(0x00); // json 标识 + vecback.extend_from_slice(json_bytes); + vecback.push(0x00); // 添加一个字节的0x00 + } + (vecback, lenth) + +} +pub fn wirte_iris_data(data:&OneIRISData,filepath:&str) -> Result<()> { + let mut file = File::create(filepath)?; + //写入光谱数据header + let SPectralData_Flag:u32=0x00FF00FF; + file.write_all(&SPectralData_Flag.to_le_bytes())?; + let mut sectionlenth: u64 = caculate_spectral_data_length(&data.spectral_data_section); + file.write_all(&(sectionlenth).to_le_bytes())?; // Section length + let numberofspectral=data.spectral_data_section.len() as u16; + file.write_all(&numberofspectral.to_le_bytes())?; // Number of spectral data entries + // Write spectral data section + for spectral_data in &data.spectral_data_section { + write_spectral_data(spectral_data, &mut file)?; + } + + // Write section length + + // Write spectral info section + let spectral_info_flag: u32 = 0xFF00FF00; + + + let (spectral_info_vec, spectral_info_length) = caculate_spectral_info_length(&data.spectral_info_section); + file.write_all(&spectral_info_flag.to_le_bytes())?; // Spectral info 区块标识 + file.write_all(&spectral_info_length.to_le_bytes())?; // Section length + if spectral_info_length != 0 { + file.write_all(&spectral_info_vec)?; // Write the spectral info section data + + } + + let other_info_flag: u32 = 0xF0F0F0F0; + let (other_info_vec, other_info_length) = cacluate_other_info_length(&data.other_info_section); + file.write_all(&other_info_flag.to_le_bytes())?; // Other info 区块标识 + file.write_all(&other_info_length.to_le_bytes())?; // Section length + if other_info_length != 0 { + file.write_all(&other_info_vec)?; // Write the other info section data + } + + + + let image_info_flag: u32 = 0x0F0F0F0F; + file.write_all(&image_info_flag.to_le_bytes())?; // Image info 区块标识 + let image_info_length = caculate_image_info_length(&data.image_info_section); + file.write_all(&image_info_length.to_le_bytes())?; // Section length + if image_info_length != 0 { + let numberofimageinfo = data.image_info_section.len() as u16; + file.write_all(&numberofimageinfo.to_le_bytes())?; // Write the image info section data + // Write image info section + for image_info in &data.image_info_section { + write_image_info(image_info, &mut file)?; + } + } + + + Ok(()) +} \ No newline at end of file diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 6e6f575..f8ea312 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -10,7 +10,7 @@ "package": { "productName": "SpectralPlot", - "version": "0.6.62" + "version": "0.6.66" }, "tauri": { diff --git a/src-tauri/updatelog.md b/src-tauri/updatelog.md new file mode 100644 index 0000000..ccdb3e7 --- /dev/null +++ b/src-tauri/updatelog.md @@ -0,0 +1,20 @@ +# IRIS SpectralPlot 更新日志 + +--- + +## 公司信息 + +* **公司名称**:北京依锐思遥感技术有限公司 +* **官方网站**:[http://www.iris-rs.cn](http://www.iris-rs.cn) +* **联系邮箱**:renlixin@iris-rs.cn + +--- + +## 更新日志 + +* **v0.6.58** 增加了IS3的支持。 +* **v0.6.59** 将连续保存功能分割为“连续(不保存)”和“连续保存”两个独立功能。 +* **v0.6.60** 增加了IS3快门的控制功能。 +* **v0.6.62** 修正了保存逻辑,并修复了波长倒置的问题。 +* **v0.6.65** 增加了HH3定标功能。 +* **v0.6.66** 增加了HH3波长定标所需的波长参数,并将寻峰最小值调整为3000。 diff --git a/src/App.vue b/src/App.vue index ba7f522..efab979 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,26 +1,48 @@ - diff --git a/src/AppHyperSpectral.vue b/src/AppHyperSpectral.vue index 664c4fc..1a79e67 100644 --- a/src/AppHyperSpectral.vue +++ b/src/AppHyperSpectral.vue @@ -119,6 +119,7 @@ export default {