Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: valtur1983 от 03-03-2022, 15:31:41

Название: Проблема вставки таблиц из другого чертежа
Отправлено: valtur1983 от 03-03-2022, 15:31:41
Приветствую всех!

Возникла проблема при вставке объектов из друго чертежа. Скопированные таблицы отрисовываются только после того как после отработки макроса переключаешься сначала на вкладу листа, а потом обратно в модель. Со всеми остальными примитивами такой проблемы не наблюдается
Код - 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.  
Название: Re: Проблема вставки таблиц из другого чертежа
Отправлено: Александр Ривилис от 03-03-2022, 16:22:04
valtur1983,
Давай поиском по форуму. Тема неоднократно подымалась и решение неоднократно находилось.
Название: Re: Проблема вставки таблиц из другого чертежа
Отправлено: valtur1983 от 03-03-2022, 16:28:34
искал, и в гугле искал, не нашел :( может запрос неправильно ставил

может подскажите в каком направлении "копать", а дальше уж я сам
Название: Re: Проблема вставки таблиц из другого чертежа
Отправлено: Александр Ривилис от 03-03-2022, 16:39:11
valtur1983,
Экспериментируй. Например, после вставки пройдись по всем вставленным таблицам, открой их для записи, выполни Table.GenerateLayout, Table.RecomputeTableBlock(true),  а затем (после завершения транзакции) TransactionManager.QueueForGraphicsFlush.