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

ADN Club => AutoCAD .NET API => Тема начата: Alexx от 01-08-2015, 08:48:57

Название: Как получить границы модели?
Отправлено: Alexx от 01-08-2015, 08:48:57
При печати листа, можно указать область печати по границам (extents). Для Layout листа можно получить границы в свойстве Extents, однако для Layout модели это свойство всегда "по нулям". Собственно вопрос: как можно получить границы Layout у модели? Где-то читал, что можно устроить танцы с бубном и выделить все объекты на модели и у selection set как-то получить Extents, но может есть нормальный способ?
Название: Re: Как получить границы модели?
Отправлено: Александр Ривилис от 01-08-2015, 13:00:59
Я мало чего понял из вопроса, но границы модели (т.е. параллелепипед, в который вписываются все примитивы модели) можно получить через свойства Database.Extmin и Database.Extmax или системные переменные EXTMIN и EXTMAX.
Для того, чтобы получить корректное значение желательно выполнить Database.UpdateExt(true)
Название: Re: Как получить границы модели?
Отправлено: Alexx от 04-08-2015, 13:22:23
Я про свойство Layout.Extents. Для PAPERSPACE он задан, а для модели - нет (все координаты - 0).

Database.Extmin и Database.Extmax

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

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

И еще у меня такой вопрос: у объектов есть свойство Bounds и есть свойство GeometricExtents. Я смотрел их значения в дебагере и зачастую они одинаковые. В чем разница этих свойств?
Название: Re: Как получить границы модели?
Отправлено: Александр Ривилис от 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().
Название: Re: Как получить границы модели?
Отправлено: Alexx от 04-08-2015, 13:30:00
Хорошо, тогда Layout.Extends - это границы (т.е. параллелепипед, в который вписываются все примитивы) PAPERSPACE? :-)
Название: Re: Как получить границы модели?
Отправлено: Alexx от 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?
Название: Re: Как получить границы модели?
Отправлено: Александр Ривилис от 04-08-2015, 13:45:28
Как тогда узнать extents для PAPERSPACE?
Зачем? И что ты понимаешь под Extents для PAPERSPACE?
Название: Re: Как получить границы модели?
Отправлено: Alexx от 04-08-2015, 13:48:52
Мне нужен тот самый "параллелепипед, в который вписываются все примитивы". А точнее мне нужно узнать границы печати (точка min и точка max на листе в координатах листа), когда я вывожу на печать лист с настройками "Autodesk.AutoCAD.DatabaseServices.PlotType.Extents".
Название: Re: Как получить границы модели?
Отправлено: Александр Ривилис от 04-08-2015, 13:59:58
В зависимости от того что у тебя текущее ModelSpace или PaperSpace (а точнее один из листов) в системных переменных EXTMIN и EXTMAX будут габариты или Модели или Листа.
Кроме того есть еще методы Database.Pextmin и Database.Pextmax
Название: Re: Как получить границы модели?
Отправлено: Alexx от 04-08-2015, 14:04:18
Тогда круто! То, что надо!

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

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

Accesses the current MODEL SPACE EXTMAX value for the database.
Название: Re: Как получить границы модели?
Отправлено: Alexx от 04-08-2015, 14:06:26
Pextmin и Pextmax судя по всему для PAPER SPACE...

Александр, спасибо!
Название: Re: Как получить границы модели?
Отправлено: Александр Ривилис от 04-08-2015, 14:06:40
Database.Extmax
Ты путаешь системную переменную и свойство базы данных (Database). Это разные вещи. Значение системной переменной получают через Application.GetSystemVariable("имя_переменной")
Название: Re: Как получить границы модели?
Отправлено: Александр Ривилис от 04-08-2015, 14:09:03
Итого: Название темы не имеет ничего общего с решением, та как ищешь ты не границы Модели, а границы Листа.
Название: Re: Как получить границы модели?
Отправлено: Alexx от 04-08-2015, 14:15:25
Ты путаешь системную переменную и свойство базы данных (Database). Это разные вещи. Значение системной переменной получают через Application.GetSystemVariable("имя_переменной")

Вроде в документации так написано:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fi056.radikal.ru%2F1508%2Fc7%2F0bada307b53f.png&hash=363e71a74db41ca06ec998c7f8418cd9)

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

Ну изначально я думал, что в Layout.Extents находятся границы листа, однако для модели они всегда были нулевые...
Название: Re: Как получить границы модели?
Отправлено: Александр Ривилис от 04-08-2015, 14:28:02
Вроде в документации так написано:
Уточняю. Database.Extmin не всегда равна значению системной переменной EXTMIN. Если текущая вкладка один из Листов, а не Модель, то значение системной переменной EXTMIN и Database.Extmin не имеют ничего общего (EXTMIN в этом случае равно Database.Pextmin). Так понятнее?
Название: Re: Как получить границы модели?
Отправлено: Alexx от 04-08-2015, 14:28:52
Да, так понятнее. Спасибо.