5. 块定义(AttributeDefinition)

本文介绍如何在CAD中插入块定义并获取块定义的属性定义列表。通过扩展FileInfo类实现文件的有效性和类型验证,并利用.NET Framework及ObjectArx API完成块定义的插入。此外,还涉及了如何获取块定义中的所有属性定义。

愿你出走半生,归来仍是少年! 

环境:.NET FrameWork4.5、ObjectArx 2016 64bit、Entity Framework 6. 

目录

 1. 插入块定义

 2. 块定义的属性定义列表获取


        在CAD中针对点的符号化通常使用块参照进行表达,在CAD中对应Insert实体,在开发中对应的类为BlockReference。在插入Insert实体前,通常需要在CAD的dwg文件中插入块定义对象。在CAD的操作界面中也可以看见当前文件中包含了哪些块定义。

        在CAD的块表中包含多条块记录,一个块定义其实就是一条记录。所以针对块定义的操作其实也就是针对块表的操作。

 1. 插入块定义

        此处插入块定义的方法是做了一个基于System.IO.FileInfo的扩展方法,通过FileInfo对象可以比较方便的在插入块定义前进行文件存在的判断以及文件类型的判断,这样能保证插入的文件存在且文件肯定为dwg文件。

/// <summary>
        /// 将指定文件插入当前的文档中作为块定义
        /// </summary>
        /// <param name="file">dwg文件</param>
        /// <param name="trans">事务</param>
        /// <param name="db">数据库</param>
        public static void InsertBlockDefine(this FileInfo file  )
        {
            try
            {
                Document doc = Application.DocumentManager.MdiActiveDocument;

                Database db = doc.Database;

                using (Transaction trans = doc.Database.TransactionManager.StartTransaction())
                {
                    if (!file.Exists)
                    {
                        return;
                    }

                    if (file.Extension.ToUpper() != ".DWG")
                    {
                        return;
                    }
  
                    //当前文档块表
                    BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                     
                    string defineName = file.Name.Replace(file.Extension, "");

                    //块表中存在该块表记录, 并且没有被删除
                    if (bt.Has(defineName) && !bt[defineName].IsErased)
                        return;
                    else
                    {
                        using (Database defineDb=new Database(false,true))
                        {
                            //读取DWG文件信息; 参数: 文件名, 打开方式, 是否允许转换版本, 密码
                            defineDb.ReadDwgFile(file.FullName, FileShare.Read, true, null);
                            //关闭、释放读取dwg的库
                            defineDb.CloseInput(true);

                            //将一个数据库插入到当前数据库的一个块中
                            ObjectId idBTR = db.Insert(defineName, defineDb, false);
                             
                        } 
                    }
                    trans.Commit();
                }


            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

 2. 块定义的属性定义列表获取

        块定义的优势就是包含了自定义图形并且可以随意的设置属性,以保证在CAD中可以表达出点位置下的空间和属性。

块定义的所有属性定义名称

 3. 获取所有块定义

        当要对图纸进行清理时,会存在将多余的块定义删除,这个时候需要获取所有的块定义。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就是那个帕吉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值