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

ADN Club => AutoCAD .NET API => Тема начата: Luca от 20-12-2019, 09:45:38

Название: Создание таблицы существующего стиля
Отправлено: Luca от 20-12-2019, 09:45:38
Здравствуйте.
Как создать таблицу по существующему шаблону (стилю)?
Название: Re: Создание таблицы существующего стиля
Отправлено: Александр Ривилис от 20-12-2019, 10:02:52
Как создать таблицу по существующему шаблону (стилю)?
Установить этой таблице ObjectId соответствующей TableStyle при помощи свойства Table.TableStyle
В этом примере: https://adn-cis.org/kak-sozdat-tabliczu-i-zapolnit-eyo-yachejki-sredstvami-.net.html
заменить db.Tablestyle; на ObjectId соответствующего стиля таблиц.
Название: Re: Создание таблицы существующего стиля
Отправлено: Luca от 20-12-2019, 10:38:22
заменить db.Tablestyle; на ObjectId соответствующего стиля таблиц.
это я понимаю. а как получить нужный мне стиль? пытаюсь найти хоть что-то в документации и ничего не вижу. те данные есть, но толку с них = 0, тк примеров нет есть просто данные типа
Код - C# [Выбрать]
  1. public virtual ObjectId TableStyle;
как-то по имени можно это получать?
Название: Re: Создание таблицы существующего стиля
Отправлено: Luca от 20-12-2019, 11:16:30
Код - C# [Выбрать]
  1. [CommandMethod("createTable_")]
  2. public void createTable()
  3.  {
  4.             PromptPointResult promptPointResult = editor.GetPoint("\nEnter table insertion point:");
  5.             if (promptPointResult.Status == PromptStatus.OK)
  6.             {
  7.                 Transaction transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction();
  8.                 using (transaction)
  9.                 {
  10.                     DBDictionary tsd = (DBDictionary)transaction.GetObject(database.TableStyleDictionaryId, OpenMode.ForRead);
  11.                     Table cableLog = new Table();
  12.  
  13.                     if (tsd.Contains("CableLog"))
  14.                     {
  15.                         Application.ShowAlertDialog("Таблица найдена. ID = " + cableLog.TableStyle.ToString());
  16.                         cableLog.TableStyle = tsd.GetAt("CableLog");
  17.                         Application.ShowAlertDialog("Таблица найдена. ID = " + cableLog.TableStyle.ToString());
  18.                     }
  19.                     else
  20.                     {
  21.                         Application.ShowAlertDialog("Таблица с таким именем НЕ найдена");
  22.                         return;
  23.                     }
  24.                     cableLog.Position = promptPointResult.Value;
  25.                     BlockTable bt = (BlockTable)transaction.GetObject(document.Database.BlockTableId, OpenMode.ForRead);
  26.                     BlockTableRecord btr = (BlockTableRecord)transaction.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  27.                     btr.AppendEntity(cableLog);
  28.                     transaction.AddNewlyCreatedDBObject(cableLog, true);
  29.  
  30.                     transaction.Commit();
  31.               }
  32.          }
  33. }
  34.  
создается таблица 1х1
что не так?
Название: Re: Создание таблицы существующего стиля
Отправлено: Александр Ривилис от 20-12-2019, 11:51:02
создается таблица 1х1
что не так?
А где ты видел в табличном стиле размер таблицы?
(https://live.staticflickr.com/65535/49246689946_23d0119c6a_o.png)
Её нужно задавать отдельно.


Название: Re: Создание таблицы существующего стиля
Отправлено: Luca от 20-12-2019, 12:08:34
размер задал, а получил совсем не то, что ожидал.  когда выполняю через "таблица->вставка", то вижу ту таблицу, которую создавал, а когда программно назначаю стиль, то даже близко не лежало.
(https://i.ibb.co/RSmvyzc/table.jpg) (https://ibb.co/6ZxnBgF)
всё прописывать руками?
Название: Re: Создание таблицы существующего стиля
Отправлено: Александр Ривилис от 20-12-2019, 12:13:28
Выложи dwg-файл с твоим табличным стилем - посмотрю.
Название: Re: Создание таблицы существующего стиля
Отправлено: Luca от 20-12-2019, 12:54:20
файл во вложении
Название: Re: Создание таблицы существующего стиля
Отправлено: Александр Ривилис от 20-12-2019, 12:58:38
Luca,

Пробуй:
Код - C# [Выбрать]
  1. [CommandMethod("createTable_")]
  2. public void createTable()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   if (doc == null) return;
  6.   Editor ed = doc.Editor;
  7.   Database db = doc.Database;
  8.  
  9.   PromptPointResult prPts =
  10.     ed.GetPoint("\nEnter table insertion point:");
  11.   if (prPts.Status == PromptStatus.OK)
  12.   {
  13.     using (Transaction tr = doc.TransactionManager.StartTransaction())
  14.     {
  15.       DBDictionary tsd = tr.GetObject(db.TableStyleDictionaryId, OpenMode.ForRead) as DBDictionary;
  16.       if (tsd != null && tsd.Contains("Cablelog"))
  17.       {
  18.         Table tab = null;
  19.         TableStyle ts =
  20.           tr.GetObject(tsd.GetAt("Cablelog"), OpenMode.ForRead) as TableStyle;
  21.         if (!ts.Template.IsNull)
  22.         {
  23.           TableTemplate tt =
  24.             tr.GetObject(ts.Template, OpenMode.ForRead) as TableTemplate;
  25.           // Тут можно поиграться с опциями TableCopyOptions
  26.           tab = tt.CreateTable(TableCopyOptions.FillTarget | TableCopyOptions.ExpandOrContractTable);
  27.         }
  28.         else
  29.         {
  30.           tab = new Table();
  31.           tab.TableStyle = ts.ObjectId;
  32.         }
  33.         BlockTableRecord btr =
  34.           tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite) as BlockTableRecord;
  35.         btr.AppendEntity(tab);
  36.         tr.AddNewlyCreatedDBObject(tab, true);
  37.         tab.Position = prPts.Value;
  38.         tab.GenerateLayout();
  39.       }
  40.       tr.Commit();
  41.     }
  42.   }
  43. }
Название: Re: Создание таблицы существующего стиля
Отправлено: Александр Ривилис от 23-12-2019, 22:08:21
Luca,
Код работает? Если да, то отметь как решение.