У меня есть 3 разных BlockTableRecord
, которые я хочу обновить. Я загружаю внешние .dxf-файлы, которые содержат сущности для каждого определения блока. Теперь, когда я удаляю старые объекты и загружаю их в новые, он отлично работает, но как только я начинаю обновлять второй (третий и т. Д.), Он снова использует сущности первого BlockTableRecord
. Это происходит даже после сохранения и перезагрузки всего чертежа.Сущности ошибочны при импорте нескольких файлов DXF
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;
}
}
}
Я проверил каждое значение. Он никогда не использует один и тот же указатель, имя или что-то в этом роде. Похоже, что проблема лежит где-то в blockId
или в _dataBase.Insert(...)
. Кажется, что некоторое значение перезаписывается или устанавливается при первом использовании, и после этого ничего не сбрасывается. Любые идеи, что может вызвать эту проблему? Любые подсказки или помощь очень ценятся.
А как насчет этого DxfIn? Почему не метод sourceDb.DxfIn (...)? –
Упс, моя ошибка. На самом деле это sourceDb.DxfIn (...). –