• 向当前模型空间中插入带属性的块定义


    //其中blockName为插入的块表的名称, ptInsert为块表指定的插入点

    void InsertBlkToSpace(CString blockName, AcGePoint3d ptInsert)
    {
    //获得当前的数据库的块表
    AcDbBlockTable *pBlkTab;
    acdbHostApplicationServices()->workingDatabase()
    ->getBlockTable(pBlkTab, ZcDb::kForWrite);

    //判断插入的块定义是否存在
    if (!pBlkTab->has(blockName))
    {
    acutPrintf(_T(" 当前图纸中不包含此块表!"));
    pBlkTab->close();
    return;
    }
    //获得用户指定的块表记录
    AcDbObjectId blkDefId;
    pBlkTab->getAt(blockName, blkDefId);

    //创建一个块参照对象
    AcDbBlockReference *pBlkRef = new AcDbBlockReference(ptInsert, blkDefId);

    //将块参照插入到模型空间中
    AcDbBlockTableRecord *pBlkTabRcd;
    pBlkTab->getAt(ACDB_MODEL_SPACE, pBlkTabRcd, ZcDb::kForWrite);
    pBlkTab->close();
    AcDbObjectId objId;
    pBlkTabRcd->appendZcDbEntity(objId, pBlkRef);

    //判断指定的块表记录是否包含属性
    AcDbBlockTableRecord *pBlkDefRcd;
    acdbOpenObject(pBlkDefRcd, blkDefId, ZcDb::kForRead);
    if (pBlkDefRcd->hasAttributeDefinitions())
    {
    //创建一个遍历器用来遍历所有的属性
    AcDbBlockTableRecordIterator *pItr;
    pBlkDefRcd->newIterator(pItr);
    AcDbEntity *pEnt;

    //遍历块定义属性
    for (pItr->start(); !pItr->done(); pItr->step())
    {
    pItr->getEntity(pEnt, ZcDb::kForWrite);

    //检查是否是属性定义
    AcDbAttributeDefinition *pAttDef;
    pAttDef = AcDbAttributeDefinition::cast(pEnt);
    if (pAttDef != NULL)
    {
    AcDbAttribute *pAtt = new AcDbAttribute();
    //从属性定义获取属性对象的对象特征
    pAtt->setPropertiesFrom(pAttDef);
    //设置属性对象的其他特征
    pAtt->setInvisible(pAttDef->isInvisible());//属性是否不可见
    //设置属性对象插入点,根据块参照的插入点做相应的位移操作
    AcGePoint3d basePt = pAttDef->position();
    basePt += pBlkRef->position().asVector();
    pAtt->setPosition(basePt);
    pAtt->setHeight(pAttDef->height());//设置高
    pAtt->setRotation(pAttDef->rotation());//设置旋转角度

    //获取属性对象的Tag、 Prompt和TestString
    TCHAR *str;
    str = pAttDef->tag();
    pAtt->setTag(str);
    free(str);
    pAtt->setFieldLength(pAttDef->fieldLength());
    str = pAttDef->textString();
    pAtt->setTextString(str);
    free(str);

    //向块参照中追加属性对象
    pBlkRef->appendAttribute(pAtt);
    pAtt->close();
    }
    pEnt->close();
    }
    delete pItr;
    }
    //关闭数据库
    pBlkRef->close();
    pBlkDefRcd->close();
    pBlkTabRcd->close();
    }

  • 相关阅读:
    20145202 《信息安全系统设计基础》课程总结
    20145234黄斐《网络对抗技术》实验六-信息搜集与漏洞扫描
    20145234黄斐《Java程序设计》实验二—Java面向对象程序设计
    20145234黄斐《Java程序设计》第九周
    20145234黄斐《网络对抗技术》实验五,MSF基础应用
    20145234黄斐《Java程序设计》第八周
    20145234黄斐《Java程序设计》实验一—Java开发环境的熟悉(Linux + Eclipse)
    20145234黄斐《Java程序设计》第七周
    20145234黄斐《网络对抗技术》实验四,恶意代码分析
    20145234黄斐《java程序设计》第六周
  • 原文地址:https://www.cnblogs.com/pengjun-shanghai/p/4788159.html
Copyright © 2020-2023  润新知