根据块名删除块和根据块名删除块引用 的区别
** 删除块后,块引用如果有那么依然存在,打开文件时会报错
** 删除块引用后块一定存在
最好的办法是先全部删除块引用,然后再删除块,这样在打开图纸时才不会报错
以下是写好的现成的两个方法
//根据块名删除块引用
internal static void DeleteBlockRefByBlockName(Database db, string strBlockName, string strBlockName1)
{
Transaction tr = db.TransactionManager.StartTransaction();
using (tr)
{
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
foreach (ObjectId objId in btr)
{
DBObject dbObj = tr.GetObject(objId, OpenMode.ForWrite);
if (dbObj is BlockReference )
{
BlockReference refEnt=dbObj as BlockReference ;
BlockTableRecord mtbtr = (BlockTableRecord)tr.GetObject(refEnt.BlockTableRecord , OpenMode.ForWrite);
if (mtbtr.Name.Equals(strBlockName) || (mtbtr.Name.Equals(strBlockName1)))
{
refEnt.Erase();
}
}
}
tr.Commit();
}
}
//根据块名删除块
internal static void DeleteBlockByBlockName(Database db,string strBlockName, string strBlockName1)
{
Transaction tr = db.TransactionManager.StartTransaction();
using (tr)
{
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
foreach (ObjectId objId in bt)
{
BlockTableRecord bbtr = tr.GetObject(objId, OpenMode.ForWrite) as BlockTableRecord;
if (bbtr.Name.Equals(strBlockName) || (bbtr.Name.Equals(strBlockName1)))
{
bbtr.Erase();
}
}
tr.Commit();
}
}