Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Alexx от 01-08-2015, 08:48:57
-
При печати листа, можно указать область печати по границам (extents). Для Layout листа можно получить границы в свойстве Extents, однако для Layout модели это свойство всегда "по нулям". Собственно вопрос: как можно получить границы Layout у модели? Где-то читал, что можно устроить танцы с бубном и выделить все объекты на модели и у selection set как-то получить Extents, но может есть нормальный способ?
-
Я мало чего понял из вопроса, но границы модели (т.е. параллелепипед, в который вписываются все примитивы модели) можно получить через свойства Database.Extmin и Database.Extmax или системные переменные EXTMIN и EXTMAX.
Для того, чтобы получить корректное значение желательно выполнить Database.UpdateExt(true)
-
Я про свойство Layout.Extents. Для PAPERSPACE он задан, а для модели - нет (все координаты - 0).
Database.Extmin и Database.Extmax
Это тоже самое что Layout.Extents, но только для модели? Или как?
Как вообще AutoCAD определяет границы листа при печати, если указать печать всего листа (extents)? Например я отправляю на печать весь лист (модель или paperspace) и хочу узнать границы которые использовались при печати листа.
И еще у меня такой вопрос: у объектов есть свойство Bounds и есть свойство GeometricExtents. Я смотрел их значения в дебагере и зачастую они одинаковые. В чем разница этих свойств?
-
Это тоже самое что Layout.Extents, но только для модели? Или как?
Это:
границы модели (т.е. параллелепипед, в который вписываются все примитивы модели)
И еще у меня такой вопрос: у объектов есть свойство Bounds и есть свойство GeometricExtents. Я смотрел их значения в дебагере и зачастую они одинаковые. В чем разница этих свойств?
Должны быть одинаковыми. Разницы нет. Из документации для AcDbEntity::bounds:
Provides a default implementation for AcGiDrawable::bounds() that calls the entity's implementation of AcDbEntity::getGeomExtents().
-
Хорошо, тогда Layout.Extends - это границы (т.е. параллелепипед, в который вписываются все примитивы) PAPERSPACE? :-)
-
Так, в документации нашел следующее про 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?
-
Как тогда узнать extents для PAPERSPACE?
Зачем? И что ты понимаешь под Extents для PAPERSPACE?
-
Мне нужен тот самый "параллелепипед, в который вписываются все примитивы". А точнее мне нужно узнать границы печати (точка min и точка max на листе в координатах листа), когда я вывожу на печать лист с настройками "Autodesk.AutoCAD.DatabaseServices.PlotType.Extents".
-
В зависимости от того что у тебя текущее ModelSpace или PaperSpace (а точнее один из листов) в системных переменных EXTMIN и EXTMAX будут габариты или Модели или Листа.
Кроме того есть еще методы Database.Pextmin и Database.Pextmax
-
Тогда круто! То, что надо!
Единственное меня в документации смутило:
Database.Extmax
Accesses the current MODEL SPACE EXTMAX value for the database.
-
Pextmin и Pextmax судя по всему для PAPER SPACE...
Александр, спасибо!
-
Database.Extmax
Ты путаешь системную переменную и свойство базы данных (Database). Это разные вещи. Значение системной переменной получают через Application.GetSystemVariable("имя_переменной")
-
Итого: Название темы не имеет ничего общего с решением, та как ищешь ты не границы Модели, а границы Листа.
-
Ты путаешь системную переменную и свойство базы данных (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 находятся границы листа, однако для модели они всегда были нулевые...
-
Вроде в документации так написано:
Уточняю. Database.Extmin не всегда равна значению системной переменной EXTMIN. Если текущая вкладка один из Листов, а не Модель, то значение системной переменной EXTMIN и Database.Extmin не имеют ничего общего (EXTMIN в этом случае равно Database.Pextmin). Так понятнее?
-
Да, так понятнее. Спасибо.