Создание таблицы существующего стиля

Автор Тема: Создание таблицы существующего стиля  (Прочитано 6886 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 0
Здравствуйте.
Как создать таблицу по существующему шаблону (стилю)?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как создать таблицу по существующему шаблону (стилю)?
Установить этой таблице ObjectId соответствующей TableStyle при помощи свойства Table.TableStyle
В этом примере: https://adn-cis.org/kak-sozdat-tabliczu-i-zapolnit-eyo-yachejki-sredstvami-.net.html
заменить db.Tablestyle; на ObjectId соответствующего стиля таблиц.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 0
заменить db.Tablestyle; на ObjectId соответствующего стиля таблиц.
это я понимаю. а как получить нужный мне стиль? пытаюсь найти хоть что-то в документации и ничего не вижу. те данные есть, но толку с них = 0, тк примеров нет есть просто данные типа
Код - C# [Выбрать]
  1. public virtual ObjectId TableStyle;
как-то по имени можно это получать?

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 0
Код - 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
что не так?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
создается таблица 1х1
что не так?
А где ты видел в табличном стиле размер таблицы?

Её нужно задавать отдельно.


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 0
размер задал, а получил совсем не то, что ожидал.  когда выполняю через "таблица->вставка", то вижу ту таблицу, которую создавал, а когда программно назначаю стиль, то даже близко не лежало.

всё прописывать руками?

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 0
файл во вложении

Отмечено как Решение Александр Ривилис 25-12-2019, 11:26:44

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
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. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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