Проблема вставки таблиц из другого чертежа

Автор Тема: Проблема вставки таблиц из другого чертежа  (Прочитано 6969 раз)

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

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

  • ADN OPEN
  • Сообщений: 46
  • Карма: 2
Приветствую всех!

Возникла проблема при вставке объектов из друго чертежа. Скопированные таблицы отрисовываются только после того как после отработки макроса переключаешься сначала на вкладу листа, а потом обратно в модель. Со всеми остальными примитивами такой проблемы не наблюдается
Код - C# [Выбрать]
  1. CommandMethod("ACT_VSTAVKA_STADII_P")]
  2.         public void ACT_VstavkaStadiiP()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database destdb = doc.Database;
  6.             using (DocumentLock docLock = doc.LockDocument())
  7.             {
  8.                 using (Transaction tr = destdb.TransactionManager.StartTransaction())
  9.                 {
  10.                     string strNameFile = GetNameFile("СТАДИЯ П", "dwg");
  11.                     BlockTable destBt = (BlockTable)tr.GetObject(destdb.BlockTableId, OpenMode.ForRead);
  12.                     ObjectIdCollection ids = new ObjectIdCollection();
  13.                     IdMapping iMap = new IdMapping();
  14.  
  15.                     using (Database extDb = new Database(false, true))
  16.                     {
  17.                         extDb.ReadDwgFile(strNameFile, System.IO.FileShare.ReadWrite, true, "");
  18.                         using (Transaction extTr = extDb.TransactionManager.StartTransaction())
  19.                         {
  20.                             BlockTable extBt = (BlockTable)extTr.GetObject(extDb.BlockTableId, OpenMode.ForRead);
  21.                             BlockTableRecord extModelSpace = (BlockTableRecord)extTr.GetObject(extBt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
  22.                             foreach (ObjectId obj in extModelSpace)
  23.                                 if (!obj.IsEffectivelyErased && !obj.IsErased && obj.IsValid)
  24.                                 {
  25.  
  26.                                     Entity ent = (Entity)extTr.GetObject(obj, OpenMode.ForRead);
  27.                                     if (ent.GeometricExtents.MinPoint.X >= intShagSetkiX * 0 && ent.GeometricExtents.MaxPoint.X <= intShagSetkiX * 16 &&
  28.                                         ent.GeometricExtents.MinPoint.Y >= -intShagSetkiY * 7 && ent.GeometricExtents.MaxPoint.Y <= intShagSetkiY * 1)
  29.                                         ids.Add(obj);
  30.  
  31.                                     if (ent.GeometricExtents.MinPoint.X >= intShagSetkiX * 0 && ent.GeometricExtents.MaxPoint.X <= intShagSetkiX * 16 &&
  32.                                         ent.GeometricExtents.MinPoint.Y >= -intShagSetkiY * 15 && ent.GeometricExtents.MaxPoint.Y <= intShagSetkiY * 11)
  33.                                         ids.Add(obj);
  34.                                 }
  35.                             extTr.Commit();
  36.                             extDb.WblockCloneObjects(ids, destBt[BlockTableRecord.ModelSpace], iMap, DuplicateRecordCloning.Ignore, false);
  37.                         }
  38.                     }
  39.                    
  40.                     tr.Commit();
  41.                 }
  42.             }
  43.  
  44.         }
  45.  

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
valtur1983,
Давай поиском по форуму. Тема неоднократно подымалась и решение неоднократно находилось.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 46
  • Карма: 2
искал, и в гугле искал, не нашел :( может запрос неправильно ставил

может подскажите в каком направлении "копать", а дальше уж я сам

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
valtur1983,
Экспериментируй. Например, после вставки пройдись по всем вставленным таблицам, открой их для записи, выполни Table.GenerateLayout, Table.RecomputeTableBlock(true),  а затем (после завершения транзакции) TransactionManager.QueueForGraphicsFlush.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение