zoukankan      html  css  js  c++  java
  • cad.net 动态块名 .IsDynamicBlock出错 eInvalidObjectId错误.

    .IsDynamicBlock 是用来判断是否是动态块的...

    但是它有问题..当频繁使用的时候会出现报错..

    但是你要获取 动态块名称 的时候,直接读就好了...不需要判断它是不是动态块的....

            /// <summary>
            /// id有效,未被删除
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public static bool IsOk(this ObjectId id)
            {
                return !id.IsNull && id.IsValid && !id.IsErased && !id.IsEffectivelyErased && id.IsResident;
            }
            /// <summary>
            /// 获取真实块名
            /// </summary>
            /// <param name="brRec">块参照</param>
            /// <returns>成功返回:块的真实名称,失败返回:null</returns>
            public static string GetBlockName(this BlockReference brRec)
            {
                //eInvalidObjectId 重复空格执行上次报这个错误,应该在所有GetObject位置写.Dispose();
                string blockName = "";//存储块名 
    
                // brRec.IsDynamicBlock 如果是动态块这句会报错
                //块的Z比例是0就会令动态块变成普通块,那么导致判断动态块失效    
                //打开动态块表记录,获取动态块名也可以获取普通块的名
                if (brRec.DynamicBlockTableRecord.IsOk())
                {
                    var btRec = brRec.DynamicBlockTableRecord.GetObject(OpenMode.ForRead) as BlockTableRecord;
                    blockName = btRec.Name;
                    btRec.Dispose();
                }
                return blockName;
            }

    但是如果要构造选择集,那么把过滤器写成以下形式就好了.这可以令普通块和动态块都受惠~

    如果你仍然会报 eInvalidObjectId 错误(我在频繁重复空格执行上次命令时候报这个错误)

    这个时候应该在所有GetObject开启的东西最后 .Dispose();

    测试版本Acad20008

  • 相关阅读:
    Windows 10下CUDA及cuDNN的安装 —— Pytorch
    Centos7 python3环境搭建 兼容python2.7
    VMware中Linux虚拟机与Windows主机共享文件夹
    基于阿里云服务器的网站搭建 新手教程
    CVE-2017-11882 漏洞分析总结 新手漏洞分析详细教程
    Linux基本命令 和 Regex 正则表达式
    Shell 编程 基础用法
    Perl 编程 基础用法
    Python3 网络通信 网络聊天室 文件传输
    Ant Design of Angular
  • 原文地址:https://www.cnblogs.com/JJBox/p/12371467.html
Copyright © 2011-2022 走看看