设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 206|回复: 0

arx 动态块

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2020-12-22 10:11 | 显示全部楼层 |阅读模式
    在ARX中对于动态块的一些操作的接口是AcDbDynBlockReference类。这个类可以获取动态块的自定义属性名和属性值,判断当前块参照是否是动态块,并设置指定属性的值修改动态块。

    构造对象
    AcDbDynBlockReference类有两种构造函数:

        AcDbDynBlockReference(ZcDbObjectId blockRefId);
        AcDbDynBlockReference(ZcDbBlockReference* pRef);
    第一个直接传入块参照的id即可创建AcDbDynBlockReference对象,便可对该块参照进行数据获取和修改。
    第二个传入的是块参照的指针,如果该指针是以读打开的,该AcDbDynBlockReference对象只能进行数据读取,不能修改该块参照。

    isDynamicBlock
    该函数判断块参照是否是动态块。

    块表记录指针
    AcDbDynBlockReference对象可以得到该块参照的块表记录id(块定义Id),动态块的块定义与普通块不同,它拥有多个块定义,当你通过修改动态块的自定义属性参数,该块参照会自动创建一个新的匿名块定义。而最原始的块定义是不能修改该块参照的自定义属性。
    dynamicBlockTableRecord函数得到块参照最原始的块定义id,也就是你最初创建的块定义。
    anonymousBlockTableRecord函数得到当前块参照的块定义id。

    得到动态块参照的自定义属性
    std::map<CString, CString>  GetCustomParam(const AcDbObjectId& idBlkRef)
    {
            std::map<CString, CString> mapName;
           
            AcDbDynBlockReferencePropertyArray DynBlkRefPropArray;        //动态块参照属性数组
            AcDbDynBlockReference DynBlkRef(idBlkRef);                        //动态块参照对象
            DynBlkRef.getBlockProperties(DynBlkRefPropArray);
            AcDbDynBlockReferenceProperty DynBlockReferenceProp;        //动态块参照属性
           
            for (int i = 0; i < DynBlkRefPropArray.length(); i++)
            {
                    DynBlockReferenceProp = DynBlkRefPropArray.at(i);

                    bool bShow = DynBlockReferenceProp.show();                        //是否在面板中显示
                    auto type = DynBlockReferenceProp.propertyType();        //属性类型
                    CString strName = DynBlockReferenceProp.propertyName().kwszPtr();        //属性名
                    if (true == bShow)
                    {
                           
                            CString strValue;
                            AcDbEvalVariant value = DynBlockReferenceProp.value();//值
                            if (DwgDataType::kDwgText == type)
                            {
                                    strValue = value.resval.rstring;
                            }
                            else if (DwgDataType::kDwgReal == type)
                            {
                                    strValue.Format(_T("%.2f"), value.resval.rreal);
                            }
                            mapName[strName] = strValue;
                    }
            }
            return mapName;
    }


    其中,AcDbDynBlockReferenceProperty::value函数只能得到该属性当前设置的值。
    对于在这里插入图片描述这种情况,可以使用AcDbDynBlockReferenceProperty::getAllowedValues函数。

    设置块参照的自定义属性
    bool SetCustomParam(const AcDbObjectId& idBlkRef,const std::map<CString, CString>& mapParam)
    {
            AcDbDynBlockReferencePropertyArray DynBlkRefPropArray;        //动态块参照属性数组
            AcDbDynBlockReference DynBlkRef(idBlkRef);                        //动态块参照对象
            DynBlkRef.getBlockProperties(DynBlkRefPropArray);
            AcDbDynBlockReferenceProperty DynBlockReferenceProp;        //动态块参照属性

            std::map<CString, CString>::const_iterator iter;
            for (iter = mapParam.begin(); iter != mapParam.end(); ++iter)
            {
                    CString strKey = iter->first;
                    CString strValue = iter->second;
                    for (int i = 0; i < DynBlkRefPropArray.length(); i++)
                    {
                            DynBlockReferenceProp = DynBlkRefPropArray.at(i);

                            bool bShow = DynBlockReferenceProp.show();                        //是否在面板中显示
                            if (false == bShow && DynBlockReferenceProp.readOnly() == true)
                                    continue;
                            CString strName = DynBlockReferenceProp.propertyName().kwszPtr();        //属性名
                            if (strName != strKey)
                                    continue;
                            auto type = DynBlockReferenceProp.propertyType();        //属性类型
                            if (DwgDataType::kDwgText == type)
                            {
                                    AcDbEvalVariant value(strValue);
                                    DynBlockReferenceProp.setValue(value);
                            }
                            else if (DwgDataType::kDwgReal == type)
                            {
                                    AcDbEvalVariant value(_wtof(strValue));
                                    DynBlockReferenceProp.setValue(value);
                            }
                    }
            }

            return true;
    }
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛