Как получить границы модели?

Автор Тема: Как получить границы модели?  (Прочитано 9276 раз)

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
При печати листа, можно указать область печати по границам (extents). Для Layout листа можно получить границы в свойстве Extents, однако для Layout модели это свойство всегда "по нулям". Собственно вопрос: как можно получить границы Layout у модели? Где-то читал, что можно устроить танцы с бубном и выделить все объекты на модели и у selection set как-то получить Extents, но может есть нормальный способ?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить границы модели?
« Ответ #1 : 01-08-2015, 13:00:59 »
Я мало чего понял из вопроса, но границы модели (т.е. параллелепипед, в который вписываются все примитивы модели) можно получить через свойства Database.Extmin и Database.Extmax или системные переменные EXTMIN и EXTMAX.
Для того, чтобы получить корректное значение желательно выполнить Database.UpdateExt(true)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Как получить границы модели?
« Ответ #2 : 04-08-2015, 13:22:23 »
Я про свойство Layout.Extents. Для PAPERSPACE он задан, а для модели - нет (все координаты - 0).

Database.Extmin и Database.Extmax

Это тоже самое что Layout.Extents, но только для модели? Или как?

Как вообще AutoCAD определяет границы листа при печати, если указать печать всего листа (extents)? Например я отправляю на печать весь лист (модель или paperspace) и хочу узнать границы которые использовались при печати листа.

И еще у меня такой вопрос: у объектов есть свойство Bounds и есть свойство GeometricExtents. Я смотрел их значения в дебагере и зачастую они одинаковые. В чем разница этих свойств?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить границы модели?
« Ответ #3 : 04-08-2015, 13:26:57 »
Это тоже самое что Layout.Extents, но только для модели? Или как?
Это:
границы модели (т.е. параллелепипед, в который вписываются все примитивы модели)
И еще у меня такой вопрос: у объектов есть свойство Bounds и есть свойство GeometricExtents. Я смотрел их значения в дебагере и зачастую они одинаковые. В чем разница этих свойств?
Должны быть одинаковыми. Разницы нет. Из документации для AcDbEntity::bounds:
Цитировать
Provides a default implementation for AcGiDrawable::bounds() that calls the entity's implementation of AcDbEntity::getGeomExtents().
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Как получить границы модели?
« Ответ #4 : 04-08-2015, 13:30:00 »
Хорошо, тогда Layout.Extends - это границы (т.е. параллелепипед, в который вписываются все примитивы) PAPERSPACE? :-)

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Как получить границы модели?
« Ответ #5 : 04-08-2015, 13:40:46 »
Так, в документации нашел следующее про Layout.Extents:

Цитировать
Accesses the current extents setting of the layout. This value may not be the actual extents of the geometry in the layout, it is just the value last saved in the layout.

Значит это не то, что мне нужно.  :(

Как тогда узнать extents для PAPERSPACE?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить границы модели?
« Ответ #6 : 04-08-2015, 13:45:28 »
Как тогда узнать extents для PAPERSPACE?
Зачем? И что ты понимаешь под Extents для PAPERSPACE?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Как получить границы модели?
« Ответ #7 : 04-08-2015, 13:48:52 »
Мне нужен тот самый "параллелепипед, в который вписываются все примитивы". А точнее мне нужно узнать границы печати (точка min и точка max на листе в координатах листа), когда я вывожу на печать лист с настройками "Autodesk.AutoCAD.DatabaseServices.PlotType.Extents".

Отмечено как Решение Alexx 04-08-2015, 14:06:38

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить границы модели?
« Ответ #8 : 04-08-2015, 13:59:58 »
В зависимости от того что у тебя текущее ModelSpace или PaperSpace (а точнее один из листов) в системных переменных EXTMIN и EXTMAX будут габариты или Модели или Листа.
Кроме того есть еще методы Database.Pextmin и Database.Pextmax
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Как получить границы модели?
« Ответ #9 : 04-08-2015, 14:04:18 »
Тогда круто! То, что надо!

Единственное меня в документации смутило:

Цитировать
Database.Extmax

Accesses the current MODEL SPACE EXTMAX value for the database.

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Как получить границы модели?
« Ответ #10 : 04-08-2015, 14:06:26 »
Pextmin и Pextmax судя по всему для PAPER SPACE...

Александр, спасибо!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить границы модели?
« Ответ #11 : 04-08-2015, 14:06:40 »
Database.Extmax
Ты путаешь системную переменную и свойство базы данных (Database). Это разные вещи. Значение системной переменной получают через Application.GetSystemVariable("имя_переменной")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить границы модели?
« Ответ #12 : 04-08-2015, 14:09:03 »
Итого: Название темы не имеет ничего общего с решением, та как ищешь ты не границы Модели, а границы Листа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 76
  • Карма: 1
Re: Как получить границы модели?
« Ответ #13 : 04-08-2015, 14:15:25 »
Ты путаешь системную переменную и свойство базы данных (Database). Это разные вещи. Значение системной переменной получают через Application.GetSystemVariable("имя_переменной")

Вроде в документации так написано:


Итого: Название темы не имеет ничего общего с решением, та как ищешь ты не границы Модели, а границы Листа.

Ну изначально я думал, что в Layout.Extents находятся границы листа, однако для модели они всегда были нулевые...

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как получить границы модели?
« Ответ #14 : 04-08-2015, 14:28:02 »
Вроде в документации так написано:
Уточняю. Database.Extmin не всегда равна значению системной переменной EXTMIN. Если текущая вкладка один из Листов, а не Модель, то значение системной переменной EXTMIN и Database.Extmin не имеют ничего общего (EXTMIN в этом случае равно Database.Pextmin). Так понятнее?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение