Advertisement

How to access and modify a DynamicBlockReference in ARX

阅读量:

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言

  • 一、一级标题

    • 二级标题
      • 三级标题
        • 四级标题
      • 五级标题
        • 六级标题
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:以下是官方博客例子浅析

先加入相关的头文件和库文件。


提示:以下是本篇文章正文内容,下面案例可供参考

一、一级标题

二级标题

三级标题

四级标题
五级标题
六级标题

示例:How to access and modify a DynamicBlockReference in ARX。

代码如下(示例):

复制代码
    //添加头文件和库CAD2010及其以上新增
    //
    // 08/14/2012
    // By Philippe Leefsma
    // How to access and modify a DynamicBlockReference property in ARX and .Net?
    static void xlMyGroupTest98()
    {
    ads_name ename;
    ads_point pt;
    if (acedEntSel(L"\nSelect a dynamic block reference: ", ename, pt) != RTNORM)
    {
        acutPrintf(L"\nError selecting entity.");
        return;
    }
    AcDbObjectId eId;
    acdbGetObjectId(eId, ename);
    AcDbEntity* pEnt = NULL;
    if (acdbOpenObject(pEnt, eId, AcDb::kForRead) != Acad::eOk)
    {
        acutPrintf(L"\nError opening entity.");
        if (pEnt)
            pEnt->close();
        return;
    }
    if (pEnt->isA() != AcDbBlockReference::desc())
    {
        acutPrintf(L"\nMust select a block insert.");
        pEnt->close();
        return;
    }
    AcDbBlockReference *pBlkRef = AcDbBlockReference::cast(pEnt);
    // initialise a AcDbDynBlockReference from the object id of the blockreference
    AcDbDynBlockReference* pDynBlkRef = new AcDbDynBlockReference(pBlkRef->objectId());
    //Don't forget to close the blockreference here, otherwise you wont be able to modify properties
    pEnt->close();
    if (pDynBlkRef)
    {
        AcDbDynBlockReferencePropertyArray blkPropAry;
        pDynBlkRef->getBlockProperties(blkPropAry);
        Acad::ErrorStatus err;
        AcDbDynBlockReferenceProperty blkProp;
        for (long lIndex1 = 0L; lIndex1 < blkPropAry.length(); ++lIndex1)
        {
            blkProp = blkPropAry[lIndex1];
            //look for the relevant property
            if (wcscmp(blkProp.propertyName().kACharPtr(), L"Visibility") != 0) continue;
            //Get allowed values for property
            AcDbEvalVariantArray evalAry;
            if ((err = blkProp.getAllowedValues(evalAry)) == Acad::eOk)
            {
                if (evalAry.length() >= 1)
                {
                    AcDbEvalVariant eval = evalAry[1];
                    if (!blkProp.readOnly())
                    {
                        if ((err = blkProp.setValue(eval)) != Acad::eOk)
                        {
                            acutPrintf(L"\nError setting property value...");
                        }
                    }
                }
            }
        }
        //Don't forget to delete this reference, otherwise you will have problems.
        delete pDynBlkRef;
    }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

函数主体

复制代码
    //数据可以是后台数据库,但是一定是保存了的数据库,不能是临时数据库
    
    
    
      
      
    
    代码解读

测试代码

复制代码
    //如果使用当前数据库,一定要保存文件否则会出错,
    //当前数据库有自动保存操作,即使不操作,如果不保存,也会出错。
      
    
    
      
      
      
    
    代码解读

总结

提示:下面对全文进行总结:
举个例子来说, 今天所讲解的内容即为这些函数与方法的主要内容, 并且进行了较为详细的阐述。

全部评论 (0)

还没有任何评论哟~