图块的创建范例
void CreateBlock(){
AcDbBlockTable* pBlkTbl = NULL;//CAD中图块的表格
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForWrite);
//从当前工作数据库中获取图块表,并将其设置为可写入的
AcDbBlockTableRecord* pBlkRcd = new AcDbBlockTableRecord();
//创建一个新的图块定义
ACHAR blkName;//存储图块的名称
if (acedGetString(Adesk::kFalse, 采用RXST("\n请输入图块名称:"), blkName) != RTNORM)
{ //获取失败(例如用户取消输入),则关闭图块表和删除图块定义,并返回
pBlkTbl->close();
delete pBlkRcd;
return;
}
pBlkRcd->setName(blkName);//设置图块的名称
AcDbObjectId blkDefId;//存储图块定义的ID
pBlkTbl->add(blkDefId, pBlkRcd);//将新的图块定义添加到图块表中
pBlkTbl->close();//关闭图块表
//以下定义了三个实体对象:一条线(pLine)、另一条线(pLine2)和一个圆(pCir)。这些对象代表了图块的实体
AcGePoint3d ptStart(-10, 0, 0), ptEnd(10, 0, 0);
AcDbLine* pLine = new AcDbLine(ptStart, ptEnd);
ptStart.set(0, -10, 0);
ptEnd.set(0, 10, 0);
AcDbLine* pLine2 = new AcDbLine(ptStart, ptEnd);
AcDbCircle* pCir = new AcDbCircle(AcGePoint3d::kOrigin, AcGeVector3d(0, 0, 1), 6);
//使用appendAcDbEntity函数将这三个实体添加到图块定义中。注意,这里使用了entId,它应该是相同的ID,表示这些实体都属于同一个图块定义。
AcDbObjectId entId;
pBlkRcd->appendAcDbEntity(entId, pLine);
pBlkRcd->appendAcDbEntity(entId, pLine2);
pBlkRcd->appendAcDbEntity(entId, pCir);
//关闭这些实体对象和图块定义。
pLine->close();
pLine2->close();
pCir->close();
pBlkRcd->close();
}
页:
[1]