BlockTableRecord
更新したいが 3 つあります。各ブロック定義のエンティティを含む外部 .dxf ファイルをロードしています。古いエンティティを削除して新しいエンティティをロードすると、完全に正常に動作しますが、2 番目 (3 番目など) のエンティティの更新を開始するとすぐに、最初のエンティティがBlockTableRecord
再び使用されます。図面全体を保存して再ロードした後でも発生します。
GetPositionBlock()
BlockTableRecord
XData に基づいて更新する を取得します。更新する正しいブロックを取得するため、このメソッドにはエラーはありません。
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(...)
。最初の使用時に一部の値が上書きまたは設定され、その後は何もリセットされないようです。この問題を引き起こす可能性のあるアイデアはありますか? ヒントやヘルプをいただければ幸いです。