cvpilot-tool/apps/desktop/electron/ipcEvent/alg/util.ts
2024-10-09 17:11:41 +08:00

159 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import fs from "fs";
import path from "path";
import ExcelJS from "exceljs";
/**
* 读取指定路径下的所有.stl文件
* @param dirPath 要搜索的目录路径
* @returns 返回包含所有.stl文件名的数组
*/
export const findSTLFiles = (dirPath: string): Promise<string[]> => {
return new Promise((resolve) => {
// 检查路径是否存在
if (!fs.existsSync(dirPath)) {
resolve([]); // 路径不存在时返回空数组
return;
}
// 异步读取目录内容
fs.readdir(dirPath, (err, files) => {
if (err) {
resolve([]); // 读取错误时返回空数组
} else {
// 过滤出.stl文件
const stlFiles = files.filter(
(file) => path.extname(file).toLowerCase() === ".stl"
);
resolve(stlFiles);
}
});
});
};
/**
* json存excel
*/
export const createExcelFile = async (savePath: string, measurement) => {
// 创建一个新的工作簿
const workbook = new ExcelJS.Workbook();
// 添加一个工作表
const worksheet = workbook.addWorksheet("My Sheet");
// const columns = [
// { header: "左室流出道", key: "LVOT_plane", width: 10 },
// { header: "瓦氏窦", key: "SOV_plane", width: 10 },
// { header: "窦管交接", key: "STJ_plane", width: 10 },
// { header: "瓣环平面", key: "annulus_plane", width: 10 },
// { header: "瓣环上4cm平面", key: "cor_mid_plane", width: 10 },
// { header: "升主动脉最宽处", key: "actual_aorta_plane", width: 10 },
// ];
// 添加列标题
worksheet.columns = [
{ key: "1", header: "瓣环平面周长", width: 10 },
{ key: "2", header: "瓣环平面周长导出径", width: 10 },
{ key: "3", header: "瓣环平面面积", width: 10 },
{ key: "4", header: "瓣环平面面积导出径", width: 10 },
{ key: "5", header: "瓣环平面长径", width: 10 },
{ key: "6", header: "瓣环平面短径", width: 10 },
{ key: "7", header: "瓣环平面平均径", width: 10 },
//
{ key: "8", header: "窦管交界周长", width: 10 },
{ key: "9", header: "窦管交界周长导出径", width: 10 },
{ key: "10", header: "窦管交界面积", width: 10 },
{ key: "11", header: "窦管交界面积导出径", width: 10 },
{ key: "12", header: "窦管交界长径", width: 10 },
{ key: "13", header: "窦管交界短径", width: 10 },
{ key: "14", header: "窦管交界平均径", width: 10 },
//
{ key: "15", header: "左室流出道周长", width: 10 },
{ key: "16", header: "左室流出道周长导出径", width: 10 },
{ key: "17", header: "左室流出道面积", width: 10 },
{ key: "18", header: "左室流出道面积导出径", width: 10 },
{ key: "19", header: "左室流出道长径", width: 10 },
{ key: "20", header: "左室流出道短径", width: 10 },
{ key: "21", header: "左室流出道平均径", width: 10 },
//
{ key: "22", header: "升主动脉瓣环上4cm周长", width: 10 },
{ key: "23", header: "升主动脉瓣环上4cm周长导出径", width: 10 },
{ key: "24", header: "升主动脉瓣环上4cm面积", width: 10 },
{ key: "25", header: "升主动脉瓣环上4cm面积导出径", width: 10 },
{ key: "26", header: "升主动脉瓣环上4cm长径", width: 10 },
{ key: "27", header: "升主动脉瓣环上4cm短径", width: 10 },
{ key: "28", header: "升主动脉瓣环上4cm平均径", width: 10 },
//
{ key: "29", header: "升主动脉瓣环上4cm周长", width: 10 },
{ key: "30", header: "升主动脉瓣环上4cm周长导出径", width: 10 },
{ key: "31", header: "升主动脉瓣环上4cm面积", width: 10 },
{ key: "32", header: "升主动脉瓣环上4cm面积导出径", width: 10 },
{ key: "33", header: "升主动脉瓣环上4cm长径", width: 10 },
{ key: "34", header: "升主动脉瓣环上4cm短径", width: 10 },
{ key: "35", header: "升主动脉瓣环上4cm平均径", width: 10 },
//
{ key: "36", header: "左侧冠脉开口高度", width: 10 },
{ key: "37", header: "右侧冠脉开口高度", width: 10 },
{ key: "38", header: "钙化信息", width: 10 },
{ key: "39", header: "主动脉夹角", width: 10 },
];
const annulus_plane = measurement["annulus_plane"];
const STJ_plane = measurement["STJ_plane"];
const LVOT_plane = measurement["LVOT_plane"];
const nominal_aorta_plane = measurement["nominal_aorta_plane"];
const SOV_plane = measurement["SOV_plane"];
const calcification_analysis =
measurement["calcification_analysis"]["HU_statistic"];
worksheet.addRow({
1: annulus_plane["perimeter"],
2: annulus_plane["PED"],
3: annulus_plane["area"],
4: annulus_plane["AED"],
5: annulus_plane["max_dist"],
6: annulus_plane["min_dist"],
7: annulus_plane["average_dist"],
//
8: STJ_plane["perimeter"],
9: STJ_plane["PED"],
10: STJ_plane["area"],
11: STJ_plane["AED"],
12: STJ_plane["max_dist"],
13: STJ_plane["min_dist"],
14: STJ_plane["average_dist"],
//
15: LVOT_plane["perimeter"],
16: LVOT_plane["PED"],
17: LVOT_plane["area"],
18: LVOT_plane["AED"],
19: LVOT_plane["max_dist"],
20: LVOT_plane["min_dist"],
21: LVOT_plane["average_dist"],
//
22: nominal_aorta_plane["perimeter"],
23: nominal_aorta_plane["PED"],
24: nominal_aorta_plane["area"],
25: nominal_aorta_plane["AED"],
26: nominal_aorta_plane["max_dist"],
27: nominal_aorta_plane["min_dist"],
28: nominal_aorta_plane["average_dist"],
//
29: SOV_plane["perimeter"],
30: SOV_plane["PED"],
31: SOV_plane["area"],
32: SOV_plane["AED"],
33: SOV_plane["max_dist"],
34: SOV_plane["min_dist"],
35: SOV_plane["average_dist"],
//
38: calcification_analysis.map((i) => `HU${i.key}:${i.value}`).join(";"),
39: annulus_plane["horizontal_angle"],
});
// 设置样式
worksheet.getRow(1).font = { bold: true };
console.log("生成测量excel");
// 保存到文件
await workbook.xlsx.writeFile(path.join(savePath));
};