|
- void CreateBlock()
- {
- AcDbBlockTable* pBlkTbl = NULL;//CAD中图块的表格
- acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForWrite);
- //从当前工作数据库中获取图块表,并将其设置为可写入的
- AcDbBlockTableRecord* pBlkRcd = new AcDbBlockTableRecord();
- //创建一个新的图块定义
- ACHAR blkName[40];//存储图块的名称
- 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();
- }
复制代码 |
|