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

ADN Club => AutoCAD .NET API => Тема начата: Борис_С от 26-05-2021, 17:00:14

Название: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 17:00:14
Добрый день!
Появилась новая задача: нужно вытащить тексты элементов из пространства листа.
Для пространства модели эта задача решена. Код - на странице https://adn-cis.org/forum/index.php?topic=10334.msg47756#msg47756
Если в пространстве листа создаются новые элементы, то они не попадают в список элементов этого кода.
Можно ли их как-то вытащить, и, если да, то как?
Спасибо.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 17:14:08
Написал вопрос и понял, что могу сам решить эту задачу.
Достаточно в методе FindTextsInDrawing заменить в операторе
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                                    OpenMode.ForRead) as BlockTableRecord;
BlockTableRecord.ModelSpace на BlockTableRecord.PaperSpace.
Все остальное остается без изменений.
Извините, что побеспокоил.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: avc от 26-05-2021, 17:17:51
Только листов то в чертеже может быть сколько угодно. так что сначала определитесь с именем или Id BTR нужного вам листа
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Александр Ривилис от 26-05-2021, 17:17:59
Можно ли их как-то вытащить, и, если да, то как?
Вместо BlockTableRecord.ModelSpace используйте BlockTableRecord.PaperSpace. Если же нужно собрать со всех листов, то можно пройтись по всей коллекции Layout (там будет и модель и все листы - смотри Database.LayoutDictionaryId), для каждого Layout взять Layout.BlockTableRecordId и уже из него выбрать все тексты.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 17:53:35
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.PaperSpace],
                                                       OpenMode.ForRead) as BlockTableRecord;
Выдает Block table record текущей активной страницы, и соответственно получаю тексты только текущей активной страницы.
Это мне и нужно, поэтому о странице думать не нужно.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Александр Ривилис от 26-05-2021, 17:57:57
Борис_С,
Тогда можно было сделать еще проще:
Код - C# [Выбрать]
  1. acBlkTblRec = acTrans.GetObject(acCurDb.CurrentSpaceId,
  2.                                                        OpenMode.ForRead) as BlockTableRecord;
Если активным будет модель, то получишь информацию по модели. А если активным будет лист, то получишь информацию по этому листу.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 18:05:13
Мне поставлена такая задача: если активна модель, выдать информацию по модели, если активен лист - выдать информацию по модели и текущему активному листу. Мне нужно еще знать номер текущего активного листа. Как это узнать?
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Александр Ривилис от 26-05-2021, 18:09:58
Мне нужно еще знать номер текущего активного листа. Как это узнать?
Не номер листа, а имя листа - в AutoCAD у листа есть имя, которое может вообще не содержать номер. Имя активного листа можно получить так:
Код - C# [Выбрать]
  1. string layoutName = LayoutManager.Current.CurrentLayout;
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 18:25:47
А можно узнать порядковый номер листа?
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Александр Ривилис от 26-05-2021, 18:28:28
А можно узнать порядковый номер листа?
Layout.TabOrder
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 20:00:19
Спасибо, Саша. Теперь все стало ясно.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 21:41:25
Не прав. Не знаю, как найти текущий Layout.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Александр Ривилис от 26-05-2021, 21:49:43
Как-то так. Проверь:
Код - C# [Выбрать]
  1. ObjectId idCurLayout = LayoutManager.Current.GetLayoutId(LayoutManager.Current.CurrentLayout);
  2. Layout curLayout = acTrans.GetObject(idCurLayout,  OpenMode.ForRead) as Layout;
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 21:55:51
Спасибо, Саша. Все правильно.
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Александр Ривилис от 26-05-2021, 22:17:20
Спасибо, Саша. Все правильно.
Эта проблема решилась полностью?
Название: Re: Как вытащить новые элементы из пространства листа
Отправлено: Борис_С от 26-05-2021, 22:22:50
Похоже, что да. Сейчас, во всяком случае, вопросов нет.