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

ADN Club => AutoCAD .NET API => Тема начата: Кулаков Михаил от 23-02-2024, 19:27:02

Название: Проблема с внешним видом таблицы после изменения её размеров
Отправлено: Кулаков Михаил от 23-02-2024, 19:27:02
Добрый день! Подскажите, имеется таблица. При программном изменении ее размеров (например, удаление части колонок и столбцов), границы удаленных ячеек продолжают отображаться. За них можно даже выделить таблицу, хотя реально ячеек там нет. Если скопировать и вставить такую таблицу, то её копия уже отображается правильно. Regen (программный и ручной) не помогает. В чем может быть ошибка? Видео с ScreenCast создать не получилось (ошибка при uploading).
Исходная таблица, например, 2х2
(https://i.postimg.cc/CRt4ztTy/image.png) (https://postimg.cc/CRt4ztTy)
(https://i.postimg.cc/kDpD3dxd/image.png) (https://postimg.cc/kDpD3dxd)
После запуска удаления одного столбца и одной колонки получаем
(https://i.postimg.cc/K3nWNbbg/image.png) (https://postimg.cc/K3nWNbbg)
(https://i.postimg.cc/68Hmzzkz/image.png) (https://postimg.cc/68Hmzzkz)
При копировании таблица (при перетаскивании) всё еще отображается как 2х2
(https://i.postimg.cc/9zKTP9gT/image.png) (https://postimg.cc/9zKTP9gT)
но уже при вставке копии становится 1х1
(https://i.postimg.cc/NL392cLk/image.png) (https://postimg.cc/NL392cLk)

Код прикладываю
Код - C# [Выбрать]
  1. public void CreateTable(string DevName, ObjectId TabObjId, List<string> CableNames) // Где TabObjId - ObjectId существующей таблицы
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Database db = doc.Database;
  5.             Editor ed = doc.Editor;
  6.             int TabLength = CableNames.Count();
  7.  
  8.             Transaction tr = db.TransactionManager.StartTransaction();
  9.             using (tr)
  10.             {
  11.                 try
  12.                 {
  13.                     Table tab = tr.GetObject(TabObjId, OpenMode.ForRead) as Table;
  14.                     tab.UpgradeOpen();
  15.                     tab = ClearTable(tab);
  16.                     Cell c;
  17.                     for (int i = 1; i < tab.Rows.Count; i++)
  18.                         tab.DeleteRows(1, i);
  19.                     for (int i = 1; i < tab.Columns.Count; i++)
  20.                         tab.DeleteColumns(1, i);
  21.                     Cell c = tab.Cells[0, 0];
  22.                     tab.GenerateLayout();
  23.                     //tab.DowngradeOpen();
  24.                     tr.Commit();
  25.                     ed.Regen();
  26.                 }
  27.                 catch (System.Exception ex)
  28.                 {
  29.                     Autodesk.AutoCAD.Runtime.Exception ex2 =
  30.                       ex as Autodesk.AutoCAD.Runtime.Exception;
  31.                     if (ex2 != null && ex2.ErrorStatus != ErrorStatus.WasOpenForUndo)
  32.                     {
  33.                         ed.WriteMessage("\nAutoCAD exception: {0}", ex2);
  34.                     }
  35.                     else if (ex2 == null)
  36.                     {
  37.                         ed.WriteMessage("\nSystem exception: {0}", ex);
  38.                     }
  39.                 }
  40.             }
  41.         }
  42.  
Название: Re: Проблема с внешним видом таблицы после изменения её размеров
Отправлено: Александр Ривилис от 23-02-2024, 19:35:10
Попробуй воспользоваться методом Table.RecomputeTableBlock(true). И возможно в отдельной транзакции.
Название: Re: Проблема с внешним видом таблицы после изменения её размеров
Отправлено: Александр Ривилис от 23-02-2024, 19:52:01
Видео с ScreenCast создать не получилось (ошибка при uploading).
Autodesk отменила поддержку Autodesk Screencast. Так что записывай видео для Youtube и вставляй сюда ссылки.
Название: Re: Проблема с внешним видом таблицы после изменения её размеров
Отправлено: Кулаков Михаил от 23-02-2024, 19:54:23
Попробуй воспользоваться методом Table.RecomputeTableBlock(true). И возможно в отдельной транзакции.
Спасибо! Именно этого и не хватало. Использовал в этой же транзакции