UNPKG

vue2-tunnel-lining

Version:

A Vue2 component for tunnel lining design with MxCAD integration

486 lines (379 loc) 22.6 kB
import { McObjectId, MxCpp, McDb, McGePoint3d, McDbPolyline, McDbLine } from "mxcad"; import { MxCADUiPrPoint } from "mxcad" import { LinData } from './LinData'; import { LinDataHelper } from './LInDataHelper'; import { Setting } from '../../Setting/Setting'; import { MxFun } from "mxdraw"; import { CxwDraw } from "../../TunnelCADFns/CxwDraw"; import { Maths } from "../../TunnelCADFns/Maths"; // import { Linings } from "./Linings"; import { Cad } from "./Cad"; export class LinMark { public static Dim(set: Setting, SPEED: number){ LinMark.DimLeader(set) LinMark.DimTcPd_Dx_Fzkd(set, SPEED); LinMark.DimLine(set, SPEED); LinMark.DimCenter(set); LinMark.DimAngle(set); LinMark.DimRadius(set); } //got error private static DimLeader(set) { try { console.log("DimLeader Start:"); const idCol: McObjectId[] = []; const ptFirst2 = set.ChenQi.LT.DicFirst.get("ptFirst2"); const ptFirst3 = set.ChenQi.LT.DicFirst.get("ptFirst3"); const ptFirst4 = set.ChenQi.LT.DicFirst.get("ptFirst4"); const ptSecond2 = set.ChenQi.LT.DicSecond.get("ptSecond2"); const ptSecond3 = set.ChenQi.LT.DicSecond.get("ptSecond3"); const ptSecond4 = set.ChenQi.LT.DicSecond.get("ptSecond4"); console.log("ptFirst3:", ptFirst3); console.log("ptSecond4:", ptSecond4); console.log("ptFirst2", ptFirst2); console.log("ptSecond3:", ptSecond3); console.log("ptFirst4:", ptFirst4); const pt3dLeader: McGePoint3d[] = []; const ptLeader1 = CxwDraw.polarPoint(LinData.O3, (275 / 180) * Math.PI, LinData.RadiusFirst3); const ptLeader2 = CxwDraw.polarPoint(LinData.O3, (275 / 180) * Math.PI, LinData.RadiusFirst3 - 10); const ptLeader3 = CxwDraw.polarPoint(LinData.O3, (274 / 180) * Math.PI, LinData.RadiusFirst3 - 10); const ptLeader4 = CxwDraw.polarPoint(LinData.O3, (276 / 180) * Math.PI, LinData.RadiusFirst3 - 11); const ptLeader5 = CxwDraw.polarPoint(LinData.O3, (275 / 180) * Math.PI, LinData.RadiusFirst3 - 11); const ptLeader6 = CxwDraw.polarPoint(LinData.O3, (275 / 180) * Math.PI, LinData.RadiusFirst3 - 13); pt3dLeader.push(ptLeader6, ptLeader2, ptLeader3, ptLeader4, ptLeader5, ptLeader1); idCol.push(...(CxwDraw.addLeader2(pt3dLeader, false) || [])); idCol.push(...(CxwDraw.addLeader3(CxwDraw.polarPoint(LinData.O2_z, Math.PI, LinData.RadiusSecond2), LinData.O2_z, false) || [])); idCol.push(...(CxwDraw.addLeader3(ptFirst3, LinData.O1, false) || [])); idCol.push(...(CxwDraw.addLeader3(ptSecond4, LinData.O2_z, false) || [])); idCol.push(...(CxwDraw.addLeader3(ptFirst2, LinData.O1, false) || [])); idCol.push(...(CxwDraw.addLeader3(ptSecond3, LinData.O1, false) || [])); idCol.push(...(CxwDraw.addLeader3(ptFirst4, LinData.O3, false) || [])); // const dashedLine = CxwDraw.addLine(LinData.O1, LinData.O2_y, 7, "Dashed", 0.3 / 1); if (dashedLine) idCol.push(dashedLine); // const extraLeader = CxwDraw.addLeader3( set?.ChenQi?.LT?.ptEnd右, LinData.O2_y, false); const chenQi = set && set.ChenQi; const lt = chenQi && chenQi.LT; const ptEnd右 = lt && lt.ptEnd右; const extraLeader = CxwDraw.addLeader3(ptEnd右, LinData.O2_y, false); if (extraLeader) idCol.push(...extraLeader); set.ChenQi.LT.DicIdCol["DimLeader"] = idCol; } catch (err) { // alert("错误代码 1203 - 提示"); console.log("错误代码 1203 - 提示:", err); } } private static DimTcPd_Dx_Fzkd(set: Setting, SPEED: number){ try { const idCol: McObjectId[] = []; const ptP1 = new McGePoint3d(-LinData.b1_y + 1, -(LinData.H_ngToLjm - 1), 0); const ptP2 = CxwDraw.polarPoint(ptP1, 0, 10); const ptText1 = new McGePoint3d(-LinData.b1_z + 3, -(LinData.H_ngToLjm - 1), 0); const ptP3 = new McGePoint3d(LinData.b1_y - 1, -(LinData.H_ngToLjm - 1), 0); const ptP4 = CxwDraw.polarPoint(ptP3, Math.PI, 10); const ptText2 = new McGePoint3d(LinData.b1_y - 9, -(LinData.H_ngToLjm - 1), 0); if (SPEED > 0) { idCol.push(...CxwDraw.addLeader3WithoutCircle(set.ChenQi.LT.ptEnd左, LinData.O2_z, false)); idCol.push(...CxwDraw.addLeader3WithoutCircle(ptP3, ptP4, false)); idCol.push(CxwDraw.addText5(ptText2, "0.02", 3.5, 0, 0.7)); idCol.push(...CxwDraw.addLeader3WithoutCircle(ptP1, ptP2, false)); idCol.push(CxwDraw.addText5(ptText1, "0.02", 3.5, 0, 0.7)); } else { idCol.push(...CxwDraw.addLeader3WithoutCircle(ptP2, ptP1, false)); idCol.push(CxwDraw.addText5(ptText1, "0.02", 3.5, 0, 0.7)); } set.ChenQi.LT.DicIdCol["MarkTcPd"] = idCol; } catch (err) { // alert("错误代码 1204 - 提示"); } } private static DimLine(set: Setting, SPEED: number){ try { const idCol: McObjectId[] = []; const ptTrench_z1 = new McGePoint3d(-LinData.b1_z, 0, 0); const ptTrench_y1 = new McGePoint3d(LinData.b1_y, 0, 0); const ptOrigin = new McGePoint3d(0, 0, 0); const ptMaxlengthZ = CxwDraw.polarPoint(LinData.O2_z, Math.PI, LinData.RadiusFourth2); const ptMaxlengthY = CxwDraw.polarPoint(LinData.O2_y, 0, LinData.RadiusFourth2); const ptY1 = CxwDraw.polarPoint(LinData.O3, (3 * Math.PI) / 2, LinData.RadiusFourth3); const ptY2 = CxwDraw.polarPoint(LinData.O3, (3 * Math.PI) / 2, LinData.RadiusSecond3); const ptY3 = CxwDraw.polarPoint(LinData.O3, (3 * Math.PI) / 2, LinData.RadiusFirst3); const ptD1 = CxwDraw.polarPoint(LinData.O1, Math.PI / 2, LinData.RadiusFirst1); const ptD2 = CxwDraw.polarPoint(LinData.O1, Math.PI / 2, LinData.RadiusSecond1); const ptD3 = CxwDraw.polarPoint(LinData.O1, Math.PI / 2, LinData.RadiusThird1); const ptD4 = CxwDraw.polarPoint(LinData.O1, Math.PI / 2, LinData.RadiusFourth1); const ptP1 = new McGePoint3d(-LinData.b1_z + 1, -(LinData.H_ngToLjm - 1), 0); const ptThird1 = set.ChenQi.LT.DicThird_Ylbx_Gq.get("ptThird1"); const ptThird6 = set.ChenQi.LT.DicThird_Ylbx_Gq.get("ptThird6"); const ptFor7 = set.ChenQi.LT.DicForth_Gq.get("ptForth7"); const ptFor2 = set.ChenQi.LT.DicForth_Gq.get("ptForth2"); console.log("ptThird1:", ptThird1); console.log("ptThird6:", ptThird6); console.log("ptFor7:", ptFor7); console.log("ptFor2:", ptFor2); // Dim annotations idCol.push(CxwDraw.addDimRotated5(Math.PI, ptTrench_y1, ptOrigin, CxwDraw.polarPoint(ptTrench_y1, Math.PI / 2, 4.5), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI, set.ChenQi.LT.ptEnd右, ptTrench_y1, CxwDraw.polarPoint(ptTrench_y1, Math.PI / 2, 4.5), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, ptOrigin, LinData.O1, CxwDraw.polarPoint(LinData.O1, Math.PI, 4.5), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI, LinData.O1, LinData.O2_z, CxwDraw.polarPoint(LinData.O2_z, Math.PI / 2, 13), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, ptOrigin, LinData.O2_y, CxwDraw.polarPoint(LinData.O2_y, Math.PI, 1), 10)); idCol.push(CxwDraw.addDimRotated6(Math.PI / 2, ptY2, ptY3, CxwDraw.polarPoint(ptY2, 0, 90), new McGePoint3d(ptY2.x + 87, ptY2.y + LinData.d2 / 2, 0), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, ptY3, set.ChenQi.LT.ptEnd右, CxwDraw.polarPoint(ptY3, 0, 90), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, set.ChenQi.LT.ptEnd右, ptD1, CxwDraw.polarPoint(ptY3, 0, 90), 10)); idCol.push(CxwDraw.addDimRotated6(Math.PI / 2, ptD1, ptD2, CxwDraw.polarPoint(ptD1, 0, 90), new McGePoint3d(ptD1.x + 87, ptD1.y + LinData.d1 / 2, 0), 10)); idCol.push(CxwDraw.addDimRotated6(Math.PI / 2, ptD3, ptD4, CxwDraw.polarPoint(ptD3, 0, 90), new McGePoint3d(ptD4.x + 87, ptD4.y + 3, 0), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, ptY1, ptD4, CxwDraw.polarPoint(ptY1, 0, 100), 10)); idCol.push(CxwDraw.addDimRotated6(Math.PI, ptFor7, ptMaxlengthZ, CxwDraw.polarPoint(ptFor7, (3 * Math.PI) / 2, 6), new McGePoint3d((ptMaxlengthZ.x + ptFor7.x) / 2, ptFor7.y - 4, 0), 10)); idCol.push(CxwDraw.addDimRotated6(Math.PI, ptFor7, ptThird6, CxwDraw.polarPoint(ptFor7, (3 * Math.PI) / 2, 6), new McGePoint3d(ptThird6.x + 2.5, ptFor7.y - 4, 0), 10)); idCol.push(CxwDraw.addDimRotated6(Math.PI, ptFor2, ptMaxlengthY, CxwDraw.polarPoint(ptFor2, (3 * Math.PI) / 2, 6), new McGePoint3d((ptMaxlengthY.x + ptFor2.x) / 2, ptFor2.y - 4, 0), 10)); idCol.push(CxwDraw.addDimRotated6(Math.PI, ptFor2, ptThird1, CxwDraw.polarPoint(ptFor2, (3 * Math.PI) / 2, 6), new McGePoint3d(ptThird1.x - 2.5, ptFor2.y - 4, 0), 10)); // if (SPEED > 0) { idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, ptOrigin, new McGePoint3d(0, -LinData.H_ngToLjm, 0), CxwDraw.polarPoint(ptOrigin, Math.PI, 4.5), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI, ptTrench_z1, ptOrigin, CxwDraw.polarPoint(ptTrench_z1, Math.PI / 2, 4.5), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, ptMaxlengthZ, CxwDraw.polarPoint(ptMaxlengthZ, (3 * Math.PI) / 2, LinData.H_zkToZb), CxwDraw.polarPoint(ptMaxlengthZ, Math.PI, 3), 10)); const leftEnd = set.ChenQi.LT.ptEnd左; const leftTrench = new McGePoint3d(-LinData.b1_z - (LinData.Z1c1g.b侧壁厚 + LinData.Z1c1g.b侧壁盖板搭接宽 + LinData.Z1c1g.B_水沟宽), -(LinData.H_sgdToGb - LinData.H_ngToGb), 0); idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, leftEnd, leftTrench, CxwDraw.polarPoint(leftEnd, Math.PI, 2), 10)); idCol.push(CxwDraw.addDimRotated5(Math.PI, leftEnd, ptTrench_z1, CxwDraw.polarPoint(leftEnd, Math.PI / 2, 4.5), 10)); } else { idCol.push(CxwDraw.addDimRotated5(Math.PI, set.ChenQi.LT.ptEnd左, ptOrigin, CxwDraw.polarPoint(ptOrigin, Math.PI / 2, 4.5), 10)); } idCol.push(CxwDraw.addDimRotated5(Math.PI, ptMaxlengthZ, ptMaxlengthY, CxwDraw.polarPoint(LinData.O3, (3 * Math.PI) / 2, LinData.RadiusFourth3 + 10), 10)); if (LinData.m2 !== 0) { idCol.push(CxwDraw.addDimRotated5(Math.PI / 2, ptY1, ptY2, CxwDraw.polarPoint(ptY1, 0, 90), 10)); } set.ChenQi.LT.DicIdCol["DimLine"] = idCol; } catch (err) { // alert("错误代码 1201 - 提示"); console.log("错误代码 1201 - 提示:", err); } } private static async DimCenter(set: Setting){ try { const idCol: McObjectId[] = []; idCol.push(...await Cad.centerPoint(LinData.O1)); idCol.push(...await Cad.centerPoint(LinData.O2_z)); idCol.push(...await Cad.centerPoint(LinData.O2_y)); idCol.push(...await Cad.centerPoint(LinData.O3)); // Add center labels idCol.push(CxwDraw.addText6( new McGePoint3d(LinData.O2_y.x, LinData.O2_y.y - 4, 0), "O[2]", 3.5, 0, 0.7, 0 )); idCol.push(CxwDraw.addText6(LinData.O2_z, "O[2]", 3.5, 0, 0.7, 0)); idCol.push(CxwDraw.addText6(LinData.O1, "O[1]", 3.5, 0, 0.7, 0)); idCol.push(CxwDraw.addText6(LinData.O3, "O[3]", 3.5, 0, 0.7, 0)); // Store result set.ChenQi.LT.DicIdCol["DimCenter"] = idCol; } catch (err) { // alert("错误代码 1204 - 提示"); } } private static DimAngle(set: Setting) { try { const idCol: McObjectId[] = []; const ptD1 = CxwDraw.polarPoint(LinData.O1, Math.PI / 2, LinData.RadiusFirst1); const ptFirst2 = set.ChenQi.LT.DicFirst.get("ptFirst2"); const ptFirst3 = set.ChenQi.LT.DicFirst.get("ptFirst3"); const ptFirst4 = set.ChenQi.LT.DicFirst.get("ptFirst4"); const ptFirst1 = set.ChenQi.LT.DicFirst.get("100ptFirst1"); const origin = McGePoint3d.kOrigin; // Angular dimensions (3-point) idCol.push(CxwDraw.add3PLineAngular( LinData.O1, new McGePoint3d(ptFirst3.x, ptFirst3.y, 0), ptD1, 12, origin, "", true )); idCol.push(CxwDraw.add3PLineAngular( LinData.O1, ptD1, new McGePoint3d(ptFirst2.x, ptFirst2.y, 0), 12, origin, "", true )); if (!set.ChenQi.Cqdm.Wlkxq) { // If not tangential, draw largest angular dimension idCol.push(CxwDraw.add3PLineAngular( LinData.O2_z, new McGePoint3d(ptFirst4.x, ptFirst4.y, 0), new McGePoint3d(ptFirst3.x, ptFirst3.y, 0), 12, origin, "", true )); idCol.push(...(CxwDraw.addLeader3(ptFirst4, LinData.O2_z, false) || [])); } idCol.push(CxwDraw.add3PLineAngular( LinData.O3, new McGePoint3d(ptFirst4.x, ptFirst4.y, 0), ptFirst1, LinData.RadiusFirst3 - 5, origin, "", true )); // ✅ Assign the array of McObjectId set.ChenQi.LT.DicIdCol["DimAngle"] = idCol; } catch (err) { // alert("错误代码 1202 - 提示"); console.log("错误代码 1202 - 提示:", err); } } private static async DimRadius(set: Setting): Promise<void> {//have error try { const idCol: McObjectId[] = []; const ptFirst1 = set.ChenQi.LT.DicFirst.get("ptFirst1"); const ptFirst2 = set.ChenQi.LT.DicFirst.get("ptFirst2"); const ptFirst3 = set.ChenQi.LT.DicFirst.get("ptFirst3"); const ptFirst4 = set.ChenQi.LT.DicFirst.get("ptFirst4"); const ptMaxlengthZ = CxwDraw.polarPoint(LinData.O2_z, Math.PI, LinData.RadiusFourth2); const ptLeader1 = CxwDraw.polarPoint(LinData.O3, (275 / 180) * Math.PI, LinData.RadiusFirst3); const dipAngle1 = CxwDraw.getDipAngle(ptFirst4, LinData.O2_z); const dipAngle2 = CxwDraw.getDipAngle(set.ChenQi.LT.ptEnd左, LinData.O2_z); const dipAngle3 = CxwDraw.getDipAngle(ptFirst3, LinData.O2_z); const dipAngle4 = CxwDraw.getDipAngle(LinData.O2_y, ptFirst2); const dipAngle5 = CxwDraw.getDipAngle(LinData.O2_y, set.ChenQi.LT.ptEnd右); const r2 = (10 * LinData.RadiusFirst2).toFixed(0); const R2 = (10 * LinData.RadiusSecond2).toFixed(0); const r1 = (10 * LinData.RadiusFirst1).toFixed(0); const R1 = (10 * LinData.RadiusSecond1).toFixed(0); const r3 = (10 * LinData.RadiusFirst3).toFixed(0); idCol.push(await CxwDraw.addText6P( CxwDraw.polarPoint(CxwDraw.pointOnline(ptFirst3, LinData.O2_z, 0.15), dipAngle3 + Math.PI / 2, 1), `r[2]=${r2}`, 3.5, 0, 0.7, dipAngle3 )); idCol.push(await CxwDraw.addText6P( CxwDraw.polarPoint(CxwDraw.pointOnline(ptFirst3, LinData.O2_z, 0.15), dipAngle3 - Math.PI / 2, 3.5), `R[2]=${R2}`, 3.5, 0, 0.7, dipAngle3 )); idCol.push(await CxwDraw.addText6P( CxwDraw.polarPoint(CxwDraw.pointOnline(ptFirst2, LinData.O2_y, 0.3), dipAngle4 + Math.PI / 2, 1.0), `r[1]=${r1}`, 3.5, 0, 0.7, dipAngle4 )); idCol.push(await CxwDraw.addText6P( CxwDraw.polarPoint(CxwDraw.pointOnline(ptFirst2, LinData.O2_y, 0.3), dipAngle4 - Math.PI / 2, 3.5), `R[1]=${R1}`, 3.5, 0, 0.7, dipAngle4 )); idCol.push(await CxwDraw.addText6P( CxwDraw.polarPoint(CxwDraw.pointOnline(ptLeader1, LinData.O3, 0.15), (275 / 180) * Math.PI + Math.PI / 2, 1.0), `r[3]=${r3}`, 3.5, 0, 0.7, (275 / 180) * Math.PI )); set.ChenQi.LT.DicIdCol["DimRadius"] = idCol; } catch (err) { // alert("错误代码 1205 - 提示"); } } public static drawDimRectangle(){ const mxcad = MxCpp.getCurrentMxCAD(); // === Outer Rectangle Position === const x = -100; const y = -250; const width = 650; const height = 400; // === Inner Rectangle Offset & Position === const offset = 5; const innerX = x + offset; const innerY = y + offset; const innerWidth = width - 2 * offset; const innerHeight = height - 2 * offset; // === Draw Outer Rectangle (default color, thin) === const outer = new McDbPolyline(); outer.isClosed = true; outer.constantWidth = 0.1; // Very thin line outer.addVertexAt(new McGePoint3d(x, y, 0)); outer.addVertexAt(new McGePoint3d(x + width, y, 0)); outer.addVertexAt(new McGePoint3d(x + width, y + height, 0)); outer.addVertexAt(new McGePoint3d(x, y + height, 0)); mxcad.drawEntity(outer); // === Draw Inner Rectangle (purple, thin) === const inner = new McDbPolyline(); inner.isClosed = true; inner.constantWidth = 0.1; // Same thin line inner.addVertexAt(new McGePoint3d(innerX, innerY, 0)); inner.addVertexAt(new McGePoint3d(innerX + innerWidth, innerY, 0)); inner.addVertexAt(new McGePoint3d(innerX + innerWidth, innerY + innerHeight, 0)); inner.addVertexAt(new McGePoint3d(innerX, innerY + innerHeight, 0)); inner.colorIndex = 6; // Purple color index mxcad.drawEntity(inner); } public static async drawDmbs(set: Setting) { try { console.log("===== drawDmbs 开始执行 ====="); // 1. 增强参数验证 - 添加默认值处理 if (!LinData.O1 || !(LinData.O1 instanceof McGePoint3d)) { console.warn("LinData.O1 无效,使用默认原点"); LinData.O1 = new McGePoint3d(0, 0, 0); } const radiusFirst = typeof LinData.RadiusFirst1 === "number" ? LinData.RadiusFirst1 : 100; const d1Value = typeof LinData.d1 === "number" ? LinData.d1 : 20; const radius = radiusFirst + d1Value / 2; // 2. 处理未定义的 Tssz 和 YlbxMode // const chenQiTssz = set.ChenQi?.Tssz || {}; const chenQi = set && set.ChenQi; const chenQiTssz = (chenQi && chenQi.Tssz) || {}; const ylbxMode = typeof chenQiTssz.YlbxMode === "number" ? chenQiTssz.YlbxMode : -1; // 3. 确保 LT 和 Height_Ht 存在 // const lt = set.ChenQi?.LT || {}; const lt = (chenQi && chenQi.LT) || {}; const textHeight = typeof lt.Height_Ht === "number" && lt.Height_Ht > 0 ? lt.Height_Ht : 10; const idCol: McObjectId[] = []; // 4. 基准点计算 const ptTextBiaoshi1 = CxwDraw.polarPoint( LinData.O1, Math.PI / 3, radius ); // 添加详细的坐标日志 console.log("基准点坐标详情:", `X=${ptTextBiaoshi1.x.toFixed(2)}, ` + `Y=${ptTextBiaoshi1.y.toFixed(2)}, ` + `Z=${ptTextBiaoshi1.z.toFixed(2)}`); console.log("YlbxMode 值:", ylbxMode); console.log("添加原点(0,0)到基准点的测试线"); // 6. 分支处理 // if (ylbxMode === -1) { // console.log("使用标准衬砌标示"); // const ids = Linings.drawLiningMark( // ptTextBiaoshi1, // Math.PI / 4, // 50, // 20, // textHeight // ); // Cad.joinIdCol(idCol, ids); // } else { // console.log("使用预留变形标示"); // const ids = Linings.drawLiningMarkWithReserve( // ptTextBiaoshi1, // Math.PI / 4, // 50, // 20, // textHeight // ); // Cad.joinIdCol(idCol, ids); // } // 7. 安全保存结果 if (!set.ChenQi) set.ChenQi = {}; if (!set.ChenQi.LT) set.ChenQi.LT = { DicIdCol: {} }; if (!set.ChenQi.LT.DicIdCol) set.ChenQi.LT.DicIdCol = {}; set.ChenQi.LT.DicIdCol["Dmbs"] = idCol; console.log("生成对象数量:", idCol.length); // 8. 添加成功提示 console.log("所有图形对象已生成"); } catch (err) { console.error("错误代码 1103:", err); alert("衬砌标示绘制失败: " + (err instanceof Error ? err.message : String(err))); } finally { console.log("===== drawDmbs 执行结束 ====="); } } }