这里实现的是在当前图纸中创建一个新的块定义,并且向该块定义中添加实体,将实体插入到当前图纸中,例子如下:
CString blockName = _T("adf");//这里为要创建的块定义名称 AcDbBlockTable *pBlkTab; acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlkTab, ZcDb::kForWrite); if (pBlkTab->has(blockName))//判断该块定义是否已经存在 { AfxMessageBox(_T("该块定义已经存在!已创建一个新的块定义,名称为:") + blockName + m_sAntennaSys); blockName += m_sAntennaSys; } AcDbBlockTableRecord *pBlkTabRcd; pBlkTabRcd = new AcDbBlockTableRecord(); pBlkTabRcd->setName(blockName); AcDbObjectId blockId; pBlkTab->add(blockId, pBlkTabRcd); pBlkTab->close(); //插入点的选取 AcGePoint3d ptInsert; GetPoint(ptInsert, _T("输入adf插入点。")); //向该块定义中添加实体 AcDbBlockReference *pBlkRef = new AcDbBlockReference(pInsert, idJiantou);//前一个参数为插入点,后一个为实体id pBlkRef->setRotation(dAngle);//设置偏转角 CBlockUtil::SetScaleFactor(pBlkRef, dScale); pBlkTabRcd->appendZcDbEntity(pBlkRef); pBlkRef->close(); //将该块插入带当前图纸中 AcDbBlockReference *pBlkTabRef = new AcDbBlockReference(ptInsert, blockId);//blockId为该块定义的id CDwgDatabaseUtil::PostToModelSpace(pBlkTabRef);//该函数为插入实体到当前模型空间中的一般函数,这里不给出 pBlkTabRcd->close(); pBlkTabRef->close();
上面的列子完成的就是新建块定义,并添加实体,插入块定义的基本操作,具体操作还需要依据具体的需求。