Не ясно, как работает параметр разбиения таблицы SetBreakHeight

Автор Тема: Не ясно, как работает параметр разбиения таблицы SetBreakHeight  (Прочитано 3690 раз)

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

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Всем привет!
Столкнулся с проблемой при программном создании таблицы - не удается разбить на колонки при помощи параметра SetBreakHeight (складывается впечатление, что он просто игнорируется).

Вот кусок кода, в котором создается таблица:

Код - C# [Выбрать]
  1. Table tb1 = new Table();
  2. tb1.Position = ptable; // Точка вставки таблицы, задана ранее
  3. tb1.TableStyle = db.Tablestyle; // Стиль таблицы, задан ранее
  4. tb1.NumRows = n; // Количество строк (задано ранее, тип int)
  5. tb1.NumColumns = 3; // Количество столбцов
  6. tb1.SetRowHeight(6); // Высота ячеек
  7. tb1.SetColumnWidth(30); // Ширина ячеек
  8. tb1.BreakEnabled = true; // Параметр возможности разбития - вкл
  9. tb1.SetBreakHeight(1,330); // Высота разбития таблицы

В случае, если tb1.BreakEnabled = true - получается так, что каждая ячейка создается отдельным столбцом (скриншот 1).

В случае, если tb1.BreakEnabled = false - получается таблица в один столбец, без разбиения (скриншот 2).


Не пойму, я неправильно как-то использую метод? Или этот метод вообще не подходит? Или же он сам по себе некорректно работает?
В интернетах ничего толком найти не смог :-[
« Последнее редактирование: 17-01-2020, 11:56:20 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Xara,
Приветствую на форуме!
Обрати внимание на правило форматирования кода на форуме (ссылка у меня в подписи) и соблюдай его!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Xara 17-01-2020, 12:23:52

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Не пойму, я неправильно как-то использую метод? Или этот метод вообще не подходит? Или же он сам по себе некорректно работает?
В интернетах ничего толком найти не смог
Посмотри пример на ActiveX, может что поможет.
https://help.autodesk.com/view/OARX/2018/RUS/?guid=GUID-5E4EDEE0-7D8F-47CD-A706-9865022A0E03

Высота ячеек в таблице какая?  Вдруг 400, а задаешь 330.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Посмотри пример на ActiveX, может что поможет.
В AutoCAD .NET API есть аналогичный метод Table.SetBreakHeight
Ну а также свойство Table.BreakOptions
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
В AutoCAD .NET API есть аналогичный метод Table.SetBreakHeight
Ну а также свойство Table.BreakOptions
Ну я как бы имел ввиду посмотреть пример на ActiveX и применить из .NET API. В той же последовательности.

Кстати в примере таблица сначала добавляется в ModelSpace, а потом ей присваиваются параметры, может в этом дело?

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Вот уж чего не ожидал - так это такого оперативного ответа...  ;D

Обрати внимание на правило форматирования кода на форуме (ссылка у меня в подписи) и соблюдай его!
Ох да, большое спасибо, буду иметь ввиду... Я думал, форматирования по стандартной кнопке достаточно будет :)

Посмотри пример на ActiveX, может что поможет.
https://help.autodesk.com/view/OARX/2018/RUS/?guid=GUID-5E4EDEE0-7D8F-47CD-A706-9865022A0E03
Да, действительно помогло, большое спасибо!
Все оказалось просто - я не сразу сообразил, что в выражении SetBreakHeight(0, 330) первое число означает индекс столбца таблицы.
У меня остался только один вопрос - так что, по каждому столбцу делать придется? А если их будет больше? Дальнейшие столбцы разбиваться не будут? :)
Другими словами, 0 для первого столбца, 1 для второго.... А если их будет больше? Так для каждого писать надо? Или возможно некое выражение типа SetBreakHeight(i, 330)?

В AutoCAD .NET API есть аналогичный метод Table.SetBreakHeight
Ну а также свойство Table.BreakOptions
Вот я Table.SetBreakHeight и использую, а как работать с Table.BreakOptions, пока не разобрался  ???

Высота ячеек в таблице какая?  Вдруг 400, а задаешь 330.
Высота ячеек - 6, а таблицу бью по 330 - я опытным путем выяснил, что 330 по длине достаточно, чтобы влезло в форматку  :D

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати в примере таблица сначала добавляется в ModelSpace, а потом ей присваиваются параметры, может в этом дело?
Очень может быть. Для многих сложных объектов, а для таблиц в первую очередь, необходимо их сразу добавлять в базу чертежа, а потом уже настраивать, для того чтобы AutoCAD знал откуда брать основные настройки (например, стиль таблицы, стиль текста и т.д.)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Другими словами, 0 для первого столбца, 1 для второго.... А если их будет больше? Так для каждого писать надо? Или возможно некое выражение типа SetBreakHeight(i, 330)?
Если не задано TableBreakOptions.AllowManualHeights, то теоретически должно быть достаточно задать SetBreakHeight(0, 330), а дальше должно биться одинаково по высоте. Но на всякий случай проверь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот уж чего не ожидал - так это такого оперативного ответа...  ;D
У нас всегда так. Не удивляйся. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Высота ячеек - 6, а таблицу бью по 330
Это я по невнимательности спросил, недочитал код.  :P

Все оказалось просто - я не сразу сообразил, что в выражении SetBreakHeight(0, 330) первое число означает индекс столбца таблицы.
У меня остался только один вопрос - так что, по каждому столбцу делать придется? А если их будет больше? Дальнейшие столбцы разбиваться не будут? :)
Другими словами, 0 для первого столбца, 1 для второго.... А если их будет больше? Так для каждого писать надо? Или возможно некое выражение типа SetBreakHeight(i, 330)?

В примере похоже, что TableBreakHeight устанавливает стандартное значение, для всех колонок таблицы. А дальше SetBreakHeight устанавливает конкретные высоты для нужных колонок.
Пример я попробовал, там еще появилась третья колонка, которая походу не влезла.

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
достаточно задать SetBreakHeight(0, 330), а дальше должно биться одинаково по высоте
Точно, так и есть! Спасибо!

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

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
А дальше SetBreakHeight устанавливает конкретные высоты для нужных колонок
Весьма полезное знание! Учту, спасибо! :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
В примере похоже, что TableBreakHeight устанавливает стандартное значение, для всех колонок таблицы. А дальше SetBreakHeight устанавливает конкретные высоты для нужных колонок.
Свойство TableBreakHeight есть только в COM/ActiveX. В AutoCAD .NET API только через SetBreakHeight.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Свойство TableBreakHeight есть только в COM/ActiveX. В AutoCAD .NET API только через SetBreakHeight.

Если не задано TableBreakOptions.AllowManualHeights, то теоретически должно быть достаточно задать SetBreakHeight(0, 330), а дальше должно биться одинаково по высоте. Но на всякий случай проверь.

Похоже что так и есть. Колонки для которых не задано SetBreakHeight будут использовать высоту первой(с индексом 0) колонки. Которую можно проверить через GetBreakHeight(0);

...а как правильно задавать TableBreakOptions для AllowManualHeights? Когда проверил рефлексией пример из ActiveX, то значение было TableBreakOptions = EnableBreaking, AllowManualHeights.
... т.е. правильно задавать
table.BreakOptions = TableBreakOptions.EnableBreaking | TableBreakOptions.AllowManualHeights; ???
или
table.BreakEnabled = true;
table.BreakOptions = TableBreakOptions.AllowManualHeights;
или без разницы?

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

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