创建一个块定义,并添加实体插入到指定位置

这里实现的是在当前图纸中创建一个新的块定义,并且向该块定义中添加实体,将实体插入到当前图纸中,例子如下:

    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();

上面的列子完成的就是新建块定义,并添加实体,插入块定义的基本操作,具体操作还需要依据具体的需求。

原文地址:https://www.cnblogs.com/pengjun-shanghai/p/4913299.html