vue2-tunnel-lining
Version:
A Vue2 component for tunnel lining design with MxCAD integration
148 lines (112 loc) • 6.97 kB
text/typescript
// import { McDbMText, MxCpp, McDb, McGePoint3d } from 'mxcad'
// import { LinData } from './LinData';
// export class LinNote {
// /**
// * 写衬砌断面中的说明文字
// * @param pt 基点
// * @param data 数据
// * @param set 设置
// */
// public static Note(set: any): void {
// try {
// // 说明文字起点
// const pt = new McGePoint3d(set.ChenQi.LT.ptBase1.x + 65, set.ChenQi.LT.ptBase1.y - 180, 0)
// let strNotes1 = "说明: \\P 1. 本图尺寸除注明者外均以厘米计。";
// let strNotes2 = ` 2. 本图适用于${"V级围岩浅埋偏压、断层破碎段地段"},衬砌钢筋布置见“${"贰隧()"}”图。`;
// if (LinData.Fwi === 0) {
// strNotes2 = ` 2. 本图适用于${"适应段落"}。`;
// }
// let strNotes3 = "";
// if (LinData.railStyle === "有砟") {
// strNotes3 = ` 3. 本图按有砟轨道碎石道床结构设计,内轨顶面至道碴底面的高度在隧道中线处为${(10 * LinData.H_ngToLjm).toString()}cm。`;
// } else {
// strNotes3 = ` 3. 本图按无砟轨道结构设计,内轨顶面至无砟轨道底面高度为${(10 * LinData.H_ngToLjm).toString()}cm。`;
// }
// let strNotes4 = "4. 建筑材料"//` 4. 建筑材料: \\P 喷混凝土:${"C30早高强喷混凝土"};钢筋网:HPB300钢筋,直径!${LinData.Fwi.toFixed(0)}; \\P 锚杆:拱部采用^22组合中空锚杆;边墙采用$22砂浆锚杆或全螺纹砂浆锚杆; \\P 拱部及边墙:${”
// //};仰拱:${ "C35钢筋混凝土" } ;仰拱填充:C20混凝土; \\P 沟槽身:C25混凝土;水沟盖板及电缆槽盖板:C35钢筋混凝土。`;
// let strNotes5 = " 5. 本图未示初期支护预留变形量,图中锚杆布置为示意。";
// strNotes5 = " 5. 本图未示初期支护预留变形量。";
// let strNotes6 = ` 6. 水沟、电缆槽及盖板设计详见“${ set.Yyth.Sgdlcgbth }”图。`;
// let strNotes7 = ` 7. 拱墙分界以拱部${LinData.AngleGb.toString()}°划分,具体详见“${set.Yyth.Xjtth}”图,隧道底板顶面设置2 % 的横向排水坡。`;
// let strNotes8 = " 8. 图中未详尽处见有关规范、规定及设计图。";
// if (LinData.railStyle === "无砟") {
// strNotes7 = ` 7. 拱墙分界以拱部${LinData.AngleGb.toString()}%% D划分,具体详见“${set.Yyth.Xjtth}”图,隧道中线左右各140cm范围外底板顶面设置2 % 的横向排水坡。`;
// }
// const strNotes = `${strNotes1} \\P${strNotes2} \\P${strNotes3} \\P${strNotes4} \\P${strNotes5} \\P${strNotes6} \\P${strNotes7} \\P${strNotes8} `;
// // const strNotes = `${strNotes1} \\P${strNotes2} \\P${strNotes3} \\P${strNotes4} \\P${strNotes5} `;
// const mText = new McDbMText();// 构造新多行文本对象
// mText.textHeight = 4.5;// 设置文本高度
// mText.attachment = McDb.AttachmentPoint.kMiddleLeft;// 设置文本对齐方式
// mText.contents = strNotes; // 设置文本内容
// mText.location = pt; // 设置文本位置
// MxCpp.getCurrentMxCAD().drawEntity(mText); // 绘制多行文本
// } catch (error) {
// console.log("错误代码 1501", "提示");
// }
// }
// }
import { McDbMText, MxCpp, McDb, McGePoint3d } from "mxcad";
import { LinData } from "./LinData";
export type NotePos =
| { mode: "offset"; dx: number; dy: number } // 以 set.ChenQi.LT.ptBase1 为基点的偏移
| { mode: "absolute"; x: number; y: number }; // 绝对坐标
export interface NoteOptions {
pos?: NotePos; // 位置控制
textHeight?: number; // 文高,默认 4.5
}
export class LinNote {
/**
* 写衬砌断面中的说明文字
* @param set 配置
* @param options 可选:位置/文字大小
*/
public static Note(set: any, options: NoteOptions = {}): void {
try {
const {
pos = { mode: "offset", dx: 65, dy: -180 },
textHeight = 4.5,
} = options;
const pt = this.resolvePosition(set, pos);
let strNotes1 = "说明: \\P 1. 本图尺寸除注明者外均以厘米计。";
let strNotes2 = ` 2. 本图适用于${"V级围岩浅埋偏压、断层破碎段地段"},衬砌钢筋布置见“${"贰隧()"}”图。`;
if (LinData.Fwi === 0) {
strNotes2 = ` 2. 本图适用于${"适应段落"}。`;
}
let strNotes3 = "";
if (LinData.railStyle === "有砟") {
strNotes3 = ` 3. 本图按有砟轨道碎石道床结构设计,内轨顶面至道碴底面的高度在隧道中线处为${(
10 * LinData.H_ngToLjm
).toString()}cm。`;
} else {
strNotes3 = ` 3. 本图按无砟轨道结构设计,内轨顶面至无砟轨道底面高度为${(
10 * LinData.H_ngToLjm
).toString()}cm。`;
}
// 这里你原来只写了“建筑材料”,后续可把完整描述再拼回来
let strNotes4 = " 4. 建筑材料:";
let strNotes5 = " 5. 本图未示初期支护预留变形量。";
let strNotes6 = ` 6. 水沟、电缆槽及盖板设计详见“${set.Yyth.Sgdlcgbth}”图。`;
let strNotes7 = ` 7. 拱墙分界以拱部${LinData.AngleGb.toString()}°划分,具体详见“${set.Yyth.Xjtth}”图,隧道底板顶面设置2 % 的横向排水坡。`;
if (LinData.railStyle === "无砟") {
strNotes7 = ` 7. 拱墙分界以拱部${LinData.AngleGb.toString()}°划分,具体详见“${set.Yyth.Xjtth}”图,隧道中线左右各140cm范围外底板顶面设置2 % 的横向排水坡。`;
}
let strNotes8 = " 8. 图中未详尽处见有关规范、规定及设计图。";
const strNotes = `${strNotes1} \\P${strNotes2} \\P${strNotes3} \\P${strNotes4} \\P${strNotes5} \\P${strNotes6} \\P${strNotes7} \\P${strNotes8} `;
const mText = new McDbMText();
mText.textHeight = textHeight;
mText.attachment = McDb.AttachmentPoint.kMiddleLeft;
mText.contents = strNotes;
mText.location = pt;
MxCpp.getCurrentMxCAD().drawEntity(mText);
} catch (error) {
console.log("错误代码 1501", error);
}
}
private static resolvePosition(set: any, pos: NotePos): McGePoint3d {
if (pos.mode === "absolute") {
return new McGePoint3d(pos.x, pos.y, 0);
}
const base = set.ChenQi.LT.ptBase1;
return new McGePoint3d(base.x + pos.dx, base.y + pos.dy, 0);
}
}