找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1165|回复: 0

[分享] Tag name and value from a Non-COM Enum property

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-7-22 19:02:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Tag name and value from a Non-COM Enum propertyBy Balaji Ramamoorthy
Here is a blog post by my colleague Adam on displaying a list of values for a property using the Non-COM Property system. When the user changes the property value in the combo-box, it might be required for the plug-in to know the tag name and value of the selected item in the combo-box. Here is a sample code that retrieves the "AcRxEnumTag" from the "AcRxValue" and displays this information.

void PrintPropertyValue(AcDbEntity *pEntity, ACHAR* pPropertyName)
{
    AcRxMemberIterator * iter
        = AcRxMemberQueryEngine::theEngine()->newMemberIterator(pEntity);  
    if(iter == NULL)
        return;

    AcRxProperty * prop = AcRxProperty::cast(iter->find(pPropertyName));
    if (prop != NULL)
    {
        Acad::ErrorStatus err = Acad::eOk;
        AcRxValue value;

        if ((err = prop->getValue(pEntity, value)) == Acad::eOk)
        {
            // Value type name
            acutPrintf(
                        ACRX_T("\nValue Type Name : %s"),
                        value.type().name()
                      );

            // Value
            ACHAR * szValue = NULL;
            int buffSize = value.toString(NULL, 0);
            if (buffSize > 0)
            {
                buffSize++;
                szValue = new ACHAR[buffSize];
                value.toString(szValue, buffSize);
            }
            acutPrintf (
                        ACRX_T("\nValue : %s"),
                        (szValue == NULL) ? _T("none") : szValue
                       );
            if (szValue)
                delete szValue;

            // Enum Tag name (only for enum properties)
            const MyEnum *val = rxvalue_cast<MyEnum>(&value);
            if (val != NULL)
            {
                const AcRxEnumTag *pEnumTag = value.getEnumTag();
                if(pEnumTag != NULL)
                {
                    acutPrintf(
                                ACRX_T("\nTag : %s"),
                                pEnumTag->name()
                              );
                    // OR
                    /*acutPrintf(
                                ACRX_T("\nTag : %s"),
                                pEnumTag->localName()
                                );*/
                }
            }
        }
        else
        {
            acutPrintf(ACRX_T("Error Code = %d"), err);
        }
    }
    delete iter;
}



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 09:13 , Processed in 0.272785 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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