之前用插入外部参照快的方法,拷贝给别人的时候还需要绑定外部参照快,或者将外部参照dwg拷贝过去,很麻烦,后经过以下方法避免了外部参照的麻烦,插入的块直接就是块参照,非常好用。
转载自:http://blog.csdn.net/missingshirely/article/details/11899995点击打开链接
处理方法:读取指定文件路径的dwg图。
核心代码:
db.ReadDwgFile(fileName, FileOpenMode.OpenForReadAndReadShare, true, null);
ObjectId id = doc.Database.Insert(blockName, db, false);如果,以上几篇文章能读懂,阅读该方法应该没有问题。请自行阅读。
输入参数:
插入块名称
外部DWG文件名称(路径)
插入点
输出:
插入块后的实体id
/// <summary>
/// 插入文件到当前模型空间中
/// </summary>
/// <param name="BloName">块名</param>
/// <param name="fileName">文件名</param>
/// <param name="inPoint">插入点</param>
public ObjectId GetDwgFile(string blockName, string fileName, Point3d insertPnt)
{
Document doc = Application.DocumentManager.MdiActiveDocument;
ObjectId oId = ObjectId.Null;
using (Database db = new Database(false, false))
{
db.ReadDwgFile(fileName, FileOpenMode.OpenForReadAndReadShare, true, null);
using (Transaction trans = doc.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)trans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
ObjectId id = doc.Database.Insert(blockName, db, false);
using (BlockReference brf = new BlockReference(insertPnt, id))
{
oId = btr.AppendEntity(brf);
trans.AddNewlyCreatedDBObject(brf, true);
trans.Commit();
}
}
}
return oId;
}