Ошибка вставки блоков из источника

Автор Тема: Ошибка вставки блоков из источника  (Прочитано 1837 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 458
  • Карма: 1
Здравствуйте.
Столкнулся с проблемой - обрабатываю несколько dxf файлов, нужно добавить из чертежа источника несколько блоков в каждый из dxf и сохранить их. Добавление нужных блоков и их вставка в dxf происходит только в первом dxf, во все остальные добавление не происходит. Не могу понять - почему?
Вдобавок в  sourceDb.WblockCloneObjects выскакивает ошибка eHandleExists, но в dxf гарантированно нет тех блоков что я пытаюсь добавить из источника. Я в тупике, как это понимать.

Мой код вставки определений блоков в dxf
Код - C# [Выбрать]
  1.  public void InsertBlockDefinitions(Database destDb)
  2.  {
  3.      try
  4.      {
  5.          foreach (Database sourceDb in TitleRepoDatabases)//Здесь один файл источник с двумя блоками внутри, в пространстве модели
  6.          {
  7.              ObjectIdCollection blockIds = new ObjectIdCollection();
  8.  
  9.              using (Transaction tr = sourceDb.TransactionManager.StartTransaction()) // Транзакция в sourceDb
  10.              {
  11.                  // Открываем таблицу блоков sourceDb
  12.                  BlockTable bt = (BlockTable)tr.GetObject(sourceDb.BlockTableId, OpenMode.ForRead);
  13.  
  14.                  foreach (ObjectId btrId in bt)
  15.                  {
  16.                      BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead);
  17.                    
  18.                      if (!btr.IsAnonymous && !btr.IsLayout)
  19.                      {
  20.                          blockIds.Add(btrId);
  21.                      }
  22.                  }
  23.                  List<string> q1 = new List<string>();
  24.  
  25.                  tr.Commit(); // Завершаем транзакцию перед копированием
  26.              }
  27.  
  28.              if (blockIds.Count > 0) // Проверяем, есть ли что копировать
  29.              {
  30.                  IdMapping mapping = new IdMapping();
  31.  
  32.                  // Копируем блоки из sourceDb в destDb
  33.                  sourceDb.WblockCloneObjects(blockIds, destDb.BlockTableId, mapping, DuplicateRecordCloning.Replace, false);
  34.              }          
  35.          }
  36.      }
  37.      catch (Exception e)
  38.      {
  39.          Application.ShowAlertDialog("Problem in " + e.Message);
  40.      }
  41.  }


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13916
  • Карма: 1793
  • Рыцарь ObjectARX
  • Skype: rivilis
Вдобавок в  sourceDb.WblockCloneObjects выскакивает ошибка eHandleExists, но в dxf гарантированно нет тех блоков что я пытаюсь добавить из источника. Я в тупике, как это понимать.
Блоков может и нет, а одинаковые handles есть. Попробуй вместо  DuplicateRecordCloning.Replace другое значение. Например, DuplicateRecordCloning.Ignore
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 458
  • Карма: 1
DuplicateRecordCloning.Ignore
не сработало.
Неужели в десятке файлов происходят конфликты меток? Как так, они же назначаются рандомно?

Как с этим бороться?