愿你出走半生,归来仍是少年!
环境:.NET FrameWork4.5、ObjectArx 2016 64bit、Entity Framework 6.
目录
在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. 获取所有块定义
当要对图纸进行清理时,会存在将多余的块定义删除,这个时候需要获取所有的块定义。

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

被折叠的 条评论
为什么被折叠?



