zoukankan      html  css  js  c++  java
  • 向当前模型空间中插入带属性的块定义

    //其中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();
    }

  • 相关阅读:
    查看单据项目文本对应的参数信息
    下载EPM包详细运行日志
    ABAP 字符串换行符处理
    PyCharm编辑HTML文件时输入{%不能自动补全
    Ubuntu 18.04安装MongoDB 4.0
    ubuntu18.04(bionic) 配置阿里数据源
    【Python】迭代器
    【python】多任务(2. 进程)
    【python】多任务(1. 线程)
    【python】文件下载---基础版
  • 原文地址:https://www.cnblogs.com/pengjun-shanghai/p/4788159.html
Copyright © 2011-2022 走看看