返回介绍

指南

MxCAD API 文档

3. 文字样式表

发布于 2024-07-31 21:40:00 字数 9306 浏览 0 评论 0 收藏 0

文字样式表

在DWG数据库中,文字样式存放在文字样式表 McDbTextStyleTable() 中,文字样式表中每一条记录称为文字样式表记录对象 McDbTextStyleTableRecord() 。每一个文字样式表记录对象都对应着一种文字样式,可以设置文字样式属性:字体文件名,大字体文件名,新建文本高度,新建文本宽度缩放比例,文字倾斜角度,TrueType字体数据等。其中,文字样式是随图纸保存,不同的图纸使用的文字样式都可能会不一样。DWG数据库默认总是有一个"Standard"文字样式,该文字样式不能被删除。

我们可以通过调用 mxcad 中的 MxCpp.getCurrentMxCAD() 得到当前的控件, 然后调用控件实例的 getDatabase() 方法得到数据库实例 McDbDatabase() ,在该数据库实例中调用 getTextStyleTable() 方法我们就能获取到文字样式表 McDbTextStyleTable() 。

点击 文字样式表 McDbTextStyleTable()文字样式表记录对象 McDbTextStyleTableRecord()数据库实例 McDbDatabase() 查看详细属性和方法说明。

import { MxCpp} from "mxcad"
// 得到当前控件
const mxcad = MxCpp.getCurrentMxCAD();
// 拿到当前文字样式表
const textSyleTable = mxcad.getDatabase().getTextStyleTable();

添加文字样式

我们可以直接调用 mxcad 实例对象中的 addTextStyle() 方法添加文字样式,再设置 drawTextStyle 属性将添加的文字样式设置为当前绘制文字样式。

点击 McObject.addTextStyle() 查看详细属性和方法说明。

import { McApp } from "mxcad"

const mxcad = McApp.getCurrentMxCAD()
mxcad.addTextStyle("MyLineTypeTextStyle", "txt.shx", "hztxt.shx", 1);
mxcad.drawLayer = "MyLineTypeTextStyle"

此外,我们还可以通过得到当前数据库中的文字样式表 McDbTextStyleTable() ,然后向样式表中添加一个文字样式表记录对象McDbTextStyleTableRecord() 。

import { McCmColor, MxCpp, McDbTextStyleTableRecord, McDb } from "mxcad"

const mxcad = MxCpp.getCurrentMxCAD();
// 拿到当前文字样式表
const textSyleTable = mxcad.getDatabase().getTextStyleTable();
let newTextStyleRecord = new McDbTextStyleTableRecord();
newTextStyleRecord.fileName = "txt.shx";
newTextStyleRecord.bigFontFileName = "hztxt.shx";
newTextStyleRecord.textSize = 10;
newTextStyleRecord.name = sMyTextStyle;
newTextStyleRecord.xScale = 0.7;
if (textSyleTable.add(newTextStyleRecord).isValid()) {
console.log("add ok");
}

遍历所有文字样式

我们可以通过调用文字样式表 McDbTextStyleTable() 中的 getAllRecordId() 方法获取所有文字样式的id,再调用 getMcDbTextStyleTableRecord() 方法返回文字样式表记录对象 McDbTextStyleTableRecord() ,得到所有文字样式数据。

import { MxCpp } from "mxcad"

let mxcad = MxCpp.getCurrentMxCAD();
let textSyleTable = mxcad.getDatabase().getTextStyleTable();
let aryId = textSyleTable.getAllRecordId();
aryId.forEach((id) => {
    let textSyleRec = id.getMcDbTextStyleTableRecord();
    if (textSyleRec === null) return;
    console.log(textSyleRec);
    console.log("textSyleRec.fileName:" + textSyleRec.fileName);
    console.log("textSyleRec.name:" + textSyleRec.name);
});

删除文字样式

我们得到目标文字样式表记录对象 McDbTextStyleTableRecord() 后可调用该对象实例的 erase() 方法删除对象。

import { MxCpp } from "mxcad"

let textSyleTable = MxCpp.getCurrentMxCAD().getDatabase().getTextStyleTable()
let textStyleId = textSyleTable.get("目标文字样式名")
textStyleId.erase()
// 更新显示
mxcad.updateDisplay()

:::tip 提示 在删除文字样式前,最好判断图上有没有文字对象正在使用该文字样式。 :::

修改文字样式

mxcad 中修改文字样式的基础操作为得到文字样式表,然后根据文字样式名或文字样式ID得到文字样式表记录对象,设置文字样式表记录对象对应属性值。下面以让用户在CAD图上选择一个文字对象,然后操作对象所应用文字样式为例:

import { MxCADSelectionSet, MxCADUiPrPoint, MxCADResbuf } from "mxcad"

const ss = new MxCADSelectionSet();
const getPoint = new MxCADUiPrPoint()
const filter = new MxCADResbuf();
// 添加对象类型,选择集只选择文字类型的对象
filter.AddMcDbEntityTypes("TEXT,MTEXT");
getPoint.setMessage("请选择目标对象")
const point = await getPoint.go()
if (!point) return;
const index = ss.pointSelect(point.x, point.y,filter)
const ent = ss.item(index).getMcDbEntity()
if(!ent) return
let textStyleId = ent.textStyleId
let textStyleRec = textStyleId.getMcDbTextStyleTableRecord()
console.log(textStyleRec)
// 修改文字样式的字体高度
textStyleRec.textSize = 10
// 修改文字宽度缩放比例
textStyleRec.xScale = 0.7
// 修改文字倾斜角度
textStyleRec.obliquingAngle = 0.3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文