Как вытащить новые элементы из пространства листа

Автор Тема: Как вытащить новые элементы из пространства листа  (Прочитано 3758 раз)

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

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Добрый день!
Появилась новая задача: нужно вытащить тексты элементов из пространства листа.
Для пространства модели эта задача решена. Код - на странице https://adn-cis.org/forum/index.php?topic=10334.msg47756#msg47756
Если в пространстве листа создаются новые элементы, то они не попадают в список элементов этого кода.
Можно ли их как-то вытащить, и, если да, то как?
Спасибо.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Написал вопрос и понял, что могу сам решить эту задачу.
Достаточно в методе FindTextsInDrawing заменить в операторе
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                                    OpenMode.ForRead) as BlockTableRecord;
BlockTableRecord.ModelSpace на BlockTableRecord.PaperSpace.
Все остальное остается без изменений.
Извините, что побеспокоил.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Только листов то в чертеже может быть сколько угодно. так что сначала определитесь с именем или Id BTR нужного вам листа

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно ли их как-то вытащить, и, если да, то как?
Вместо BlockTableRecord.ModelSpace используйте BlockTableRecord.PaperSpace. Если же нужно собрать со всех листов, то можно пройтись по всей коллекции Layout (там будет и модель и все листы - смотри Database.LayoutDictionaryId), для каждого Layout взять Layout.BlockTableRecordId и уже из него выбрать все тексты.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.PaperSpace],
                                                       OpenMode.ForRead) as BlockTableRecord;
Выдает Block table record текущей активной страницы, и соответственно получаю тексты только текущей активной страницы.
Это мне и нужно, поэтому о странице думать не нужно.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Борис_С,
Тогда можно было сделать еще проще:
Код - C# [Выбрать]
  1. acBlkTblRec = acTrans.GetObject(acCurDb.CurrentSpaceId,
  2.                                                        OpenMode.ForRead) as BlockTableRecord;
Если активным будет модель, то получишь информацию по модели. А если активным будет лист, то получишь информацию по этому листу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Мне поставлена такая задача: если активна модель, выдать информацию по модели, если активен лист - выдать информацию по модели и текущему активному листу. Мне нужно еще знать номер текущего активного листа. Как это узнать?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Мне нужно еще знать номер текущего активного листа. Как это узнать?
Не номер листа, а имя листа - в AutoCAD у листа есть имя, которое может вообще не содержать номер. Имя активного листа можно получить так:
Код - C# [Выбрать]
  1. string layoutName = LayoutManager.Current.CurrentLayout;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
А можно узнать порядковый номер листа?

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

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

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Спасибо, Саша. Теперь все стало ясно.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Не прав. Не знаю, как найти текущий Layout.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Как-то так. Проверь:
Код - C# [Выбрать]
  1. ObjectId idCurLayout = LayoutManager.Current.GetLayoutId(LayoutManager.Current.CurrentLayout);
  2. Layout curLayout = acTrans.GetObject(idCurLayout,  OpenMode.ForRead) as Layout;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Спасибо, Саша. Все правильно.

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

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