Skip to content
On this page

文字样式表

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

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

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

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

添加文字样式

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

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

ts
import { McApp } from "mxcad"

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

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

ts
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() ,得到所有文字样式数据。

ts
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() 方法删除对象。

ts
import { MxCpp } from "mxcad"

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

提示

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

修改文字样式

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

ts
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