Skip to content

标注样式表

在DWG数据库中,标注样式存放在标注样式表 McDbDimStyleTable() 中,标注样式表中每一条记录称为标注样式记录对象 McDbDimStyleTableRecord() 。每一个标注样式记录对象都对应着一种标注样式,其中标注样式是随图纸保存,不同的图纸使用的标注样式都可能会不一样。

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

点击 标注样式表 McDbDimStyleTable()标注样式记录对象 McDbDimStyleTableRecord()数据库实例 McDbDatabase() 查看详细属性和方法说明。

标注样式的设置的变量与AutoCAD中的标注样式变量一致,用户可以根据自己对标注样式修改的需求查找相关设置的变量值和变量名后调用 mxcad 提供的设置API修改创建新的标注样式。

点击标注样式系统变量查询标注样式变量数据表详情。

ts
import { MxCpp} from "mxcad"
// 得到当前控件
const mxcad = MxCpp.getCurrentMxCAD();
// 拿到当前标注样式表
const dimStyleTable = mxcad.getDatabase().getDimStyleTable();

当前标注样式

当前标注样式是用户向DWG数据库添加一个标注对象时,使用的默认标注样式。我们可以通过调用数据库实例 McDbDatabase()对象中的 getCurrentlyDimStyleId() 方法获取当前标注样式的id。根据标注样式id我们就可以通过McObjectId.getMcDbDimStyleTableRecord()获取到其对应的标注样式记录对象,进而获取到当前标注样式的名字。

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

ts
import { MxCpp } from "mxcad"

const mxcad = MxCpp.getCurrentMxCAD();
const dimStyleId = mxcad.getDatabase().getCurrentlyDimStyleId();
console.log("当前标注样式id", dimStyleId);

const dimStyleName = dimStyleId.getMcDbDimStyleTableRecord().name;
console.log("当前标注样式名", dimStyleName);

添加标注样式

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

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

ts
import { MxCpp } from "mxcad"

let mxcad = MxCpp.getCurrentMxCAD();
//清空当前显示内容
mxcad.newFile();
//设置标注样式内标注文字的样式
let textId = mxcad.addTextStyle("我的标注字体", "complex.shx", "gbcbig.shx", 1);
//创建新标注样式
mxcad.addDimStyle("MyDimStyle", "41,0.18,141,0.09,40,200", "77,1,271,3", '3,"DN%%c<>"', `340,${textId.id}`);
// 设置当前标注样式
mxcad.drawDimStyle = "MyDimStyle"

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

ts
import { McDbAlignedDimension,McDbDimStyleTableRecord, MxCpp, McGePoint3d } from "mxcad";
const mxcad = MxCpp.getCurrentMxCAD();
const dimStyleTable = mxcad.getDatabase().getDimStyleTable()
let newRecord = new McDbDimStyleTableRecord();
// 设置标注样式名称
newRecord.name = 'myTestDimStyle';
// 设置整型数据
newRecord.setDimVarInt(77,1);
newRecord.setDimVarInt(271,3);
// 设置双精度数据
newRecord.setDimVarDouble(78,8);
newRecord.setDimVarDouble(41,0.18);
newRecord.setDimVarDouble(141,0.09);
newRecord.setDimVarDouble(40,200);
// 设置字符串类型数据
newRecord.setDimVarString(3,"DN%%c<>");
// 添加标注样式到标注样式表中
const id = dimStyleTable.add(newRecord);
// 调用新的标注样式绘制标注
const mDimension = new McDbAlignedDimension()
mDimension.xLine1Point = new McGePoint3d(-1800, 800);
mDimension.xLine2Point = new McGePoint3d(1800, 800);
mDimension.dimLinePoint = new McGePoint3d(800, 500);
mDimension.dimensionStyle = id;
mxcad.drawEntity(mDimension)

遍历所有标注样式

我们可以通过调用标注样式表 McDbDimStyleTable() 中的 getAllRecordId() 方法获取所有标注样式的id,再调用 getMcDbLinetypeTableRecord() 方法返回线型表记录对象 McDbLinetypeTableRecord() ,得到所有线型样式数据。

ts
import { MxCpp } from "mxcad"

// 得到当前cad对象
let mxcad = MxCpp.getCurrentMxCAD();
// 获取标注样式表
let dimTypeTable = mxcad.getDatabase().getDimStyleTable();
// 获取标注样式表中的所有记录对象id
let aryId = dimTypeTable.getAllRecordId();
// 遍历标注样式记录对象id
aryId.forEach((id) => {
    let dimTypeRec = id.getMcDbDimStyleTableRecord();
    if (dimTypeRec === null) return;
    console.log(dimTypeRec);
    console.log("标注样式名:" + dimTypeRec.name);
});

删除标注样式

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

ts
import { MxCpp } from "mxcad";

// 获取当前mxcad对象
const mxcad = MxCpp.getCurrentMxCAD();
// 获取标注样式表
let dimStyleTable = mxcad.getDatabase().getDimStyleTable()
let dimStyleId = dimStyleTable.get("目标标注样式名");
if(dimStyleId.isValid()) dimStyleId.erase();
// 更新显示
mxcad.updateDisplay()

修改标注样式

mxcad 中修改标注的标注样式,可以直接删除原有的标注样式,再重新添加定义标注样式,最后将目标对象标注样式设置为新增的标注样式,也可以直接在原有的标注样式的基础上修改标注样式表记录对象的相关设置。下面以让用户在CAD图上选择一个标注对象,然后操作标注对象所应用都标注样式为例:

ts
import { MxCADUiPrEntity,MxCpp } from "mxcad";

const mxcad = MxCpp.getCurrentMxCAD()
// 选择对象
let selEntity = new MxCADUiPrEntity();
selEntity.setMessage("选择对象");
let id = await selEntity.go();
if (!id.isValid()) return;

// 获取对象
let ent = id.getMcDbEntity();
if (ent === null) return; 
// 修改标注样式
id.getMcDbDimension().setDimVarInt(176,122);
id.getMcDbDimension().setDimVarInt(177,122);
id.getMcDbDimension().setDimVarInt(178,122);

mxcad.updateDisplay()