天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 54|回复: 0

objectARX动态块修改示例源码

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
[code]//////////////////////////////////////////////////////////////////////////
// 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;
    }
}[/code]

 

 

 

 

objectARX动态块修改示例源码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 10:26 , Processed in 0.129976 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表