Skip to content
On this page

线型表

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

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

点击 线型样式表 McDbLinetypeTable()线型表记录对象 McDbLinetypeTableRecord()数据库实例 McDbDatabase() 查看详细属性和方法说明。

ts
import { MxCpp} from "mxcad"
// 得到当前控件
const mxcad = MxCpp.getCurrentMxCAD();
// 拿到当前线型样式表
const lineTypeTable = mxcad.getDatabase().getLinetypeTable();

添加线型

我们可以直接调用 mxcad 实例对象中的 addLinetype() 方法或 addLinetypeEx() 方法添加线型样式,再设置 drawLinetype 属性将添加的线型样式设置为当前绘制线型样式。

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

ts
import { McApp } from "mxcad"

const mxcad = McApp.getCurrentMxCAD()
//定义虚线数据据,"MyLineType"是线型名,"6,-8"是虚线的一个单位定义,6是实线长,-8是空格长。
mxcad.addLinetype("MyLineType", "6,-10");

mxcad.addLinetypeEx("TestMyLine", '.5,-.2,["HW",STANDARD,S=.1,R=0.0,X=-0.1,Y=-.05],-.2',"");
//设计当前线型为"MyLineType"
mxcad.drawLinetype = "MyLineType";

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

ts
import { McCmColor, MxCpp, McDbLinetypeTableRecord, McDb } from "mxcad"

const mxcad = MxCpp.getCurrentMxCAD();
// 拿到当前线型样式表
let linetypeTable = mxcad.getDatabase().getLinetypeTable();
let newLinetypeRecord = new McDbLinetypeTableRecord();
newLinetypeRecord.numDashes = 0.2
newLinetypeRecord.name = "TestMyLine"
if (linetypeTable.add(newLinetypeRecord).isValid()) {
console.log("add ok");
}

遍历所有线型

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

ts
import { MxCpp } from "mxcad"

let mxcad = MxCpp.getCurrentMxCAD();
let linetypeTable = mxcad.getDatabase().getLinetypeTable();
let aryId = linetypeTable.getAllRecordId();
aryId.forEach((id) => {
    let linetypeRec = id.getMcDbLinetypeTableRecord();
    if (linetypeRec === null) return;
    console.log(linetypeRec);
    console.log("linetypeRec.name:" + linetypeRec.name);
});

删除线型

我们得到目标线型表记录对象 McDbLinetypeTableRecord() 后可调用该对象实例的 erase() 方法删除对象。

ts
import { MxCpp } from "mxcad"

let linetypeTable = MxCpp.getCurrentMxCAD().getDatabase().getLinetypeTable()
let linetypeId = linetypeTable.get("目标线型样式名")
linetypeId.erase()
// 更新显示
mxcad.updateDisplay()

修改线型

mxcad 中修改线型的基础操作为删除原有线型,再重新添加定义线型,最后将目标对象新型 设置为新增的线型。下面以让用户在CAD图上选择一个文字对象,然后操作对象所应用线型样式为例:

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

let mxcad = MxCpp.getCurrentMxCAD();
// 把当图上,已经存的"TestMyLine"线型删除,为了mxcad.addLinetypeEx重新添加定义线型.
let linetypeRecord = mxcad.database.getLinetypeTable().get("TestMyLine");
if(!linetypeRecord.isErase()){
linetypeRecord.erase();
}
let lintype = mxcad.addLinetypeEx("TestMyLine", '.5,-.2,["HW",STANDARD,S=.1,R=0.0,X=-0.1,Y=-.05],-.2',"");
if(!lintype.isValid() )return;

let getEnt = new MxCADUiPrEntity();
let entId = await getEnt.go();
let ent = entId.getMcDbEntity();
if(!ent) return;
ent.linetypeId = lintype;