我有 3 个不同BlockTableRecord
的要更新。我正在加载包含每个块定义的实体的外部 .dxf 文件。现在,当我删除旧实体并加载新实体时,它工作得非常好,但是一旦我开始更新第二个(第三个等)实体,它就会BlockTableRecord
再次使用第一个实体。它甚至发生在保存并重新加载整个绘图之后。
GetPositionBlock()
根据其 XData获取BlockTableRecord
我要更新的内容。错误不在此方法中,因为它获得了要更新的正确块。
public void Update(string fileName)
{
using (_doc.LockDocument())
{
using Transaction transaction = _dataBase.TransactionManager.StartTransaction())
{
BlockTableRecord blockTableRecord = GetPositionBlock();
// ...delete old entities
BlockTableRecord externalblock = GetExternalBlock(fileName);
ObjectIdCollection objs = new ObjectIdCollection();
foreach (ObjectId objId in externalBlock)
{
objs.Add(objId);
}
blockTableRecord.AssumeOwnershipPf(objs);
transaction.Commit();
}
}
}
private BlockTableRecord GetExternalBlock(string fileName)
{
DBObjectCollection dbObjColleciton = new DBObjectCollection();
using (Transaction transaction = _doc.TransactionManager.StartTransaction())
{
using (Database sourceDb = new Database(false, true))
{
sourceDb.DxfIn(fileName, null);
ObjectId blockId = _dataBase.Insert(Guid.NewGuid().ToString(), sourceDb, false)
BlockTableRecord blockTableRecord = (BlockTableRecord)transaction.GetObject(blockId, OpenMode.ForRead);
transaction.Commit();
return blockTableRecord;
}
}
}
我仔细检查了每个值。它从不使用相同的 guid、名称或类似的东西。似乎问题出在某处blockId
或_dataBase.Insert(...)
. 似乎某些值在第一次使用时被覆盖或设置,之后没有任何重置。有什么想法可能导致这个问题吗?非常感谢任何提示或帮助。