|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
NanoCAD - как задать область печати на LISP?
Регистрация: 10.01.2020
Сообщений: 415
|
||
Просмотров: 2238
|
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Фиг знает... Я пока остановился на командном методе, т.е.:
(command "-plot" "_y" ... детальная настройка ... "_y" "_n") иначе что-нибудь, да подглючивает :-( Что пока не смог победить, так это программно "отцентровать" область вывода (чтобы серединка пиктограммы со стрелочками на твоей картинке стала голубой). Просто опции "Центр" в команде Печати в NC23.1 нет (в NC24, говорят, уже появилась). Приходится высчитывать и задавать смещение. Зрительно "всё по центру", но квадратик всё равно остаётся серым.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
На Хабре на тему печати есть хороший цикл статей.
Там для . NET, но пугаться не надо, печать и настройки реализованы через ActiveX, т.е. на Лиспе то же реально Эти же статьи есть в справке нанокад SDK Если вкратце, то область печати в нано может задаваться в двух местах апи, центрирование тоже. Если задавать там и там, то для печати CustomPlotSetting имеет приоритет. Печатать будет с его настройками Т. Е. если хотим как в Автокад CustomPlotSetting надо очищать, clear В CustomPlotSetting может быть задано НЕСКОЛЬКО областей печати
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 03.10.2024 в 07:06. |
||||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Цитата:
Очень нужно задать центровку чертежа при печати. Через LISP. Что-то CUSTOMPLOTSETTINGS не получается. Ни -GET-, ни тем более -PUT- ... Какой там хоть синтаксис-то? Или для центровки просто (vla-put-CenterPlot ...) достаточно будет?
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 04.10.2024 в 14:47. |
|||
![]() |
|
||||
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Для начала надо бы описание функций
(VLA-GET-CUSTOMPLOTSETTINGS) и (VLA-PUT-CUSTOMPLOTSETTINGS) найти... В доках SDK LISP nanoCAD 23.1 я только упоминание о них обнаружил. Если есть у кого - подкиньте, плиз.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Чет я думал что ActiveX через лисп тот жэж функционал, что и через vba.. заблуждался от неведения?
Ну и писать лисп с нуля для нано это надо быть Гуру лиспа, без отладчика .. Имха vbs для этой задачи попроще, и отладчик есть. Выгоды в производительности от лисп не будет. Даже net не будет значительно быстрее именно на печати
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 05.10.2024 в 20:31. |
||||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Цитата:
их вызове НК не ругается на их отсутствие. Но какой параметр вызова для той же (VLA-GET-CUSTOMPLOTSETTINGS) нужно подсовывать, чтобы она не возвращала ошибку - пока не понятно...
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
в акаде - да. Они вроде вообще одновременно в нем появились - vla* функции и VBA. А нано, насколько понимаю, использует стороннюю библиотеку ODA для работы с закрытым форматом *.dwg, а реализация интерпретатора лиспа у них своя - и что и как у них реализовано, насколько полно или где-то "заглушки" функций еще стоят...
|
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 415
|
Ну что-же, благодаря doctorraz (спасибо за ссылку на пост на хабре) и ===AAA=== (спасибо за пост про VLA-SET_CUSTOM...) я поковырявшись и проанализровав решил-таки проблему с программной установкой областей печати в nanocad (заранее установить в настройках принтер и область печати рамкой) :
Код:
Последний раз редактировалось name02, 06.10.2024 в 10:38. |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
А какой функцией можно получить текущий заданный размер
бумаги плоттера (который "A1" или какой-нибудь "ISO A4") ? Типа: (setq acdobj (vlax-get-acad-object)) (setq acddoc (vla-get-ActiveDocument acdobj)) (vla-get-Чего-Нибудь-Написать-Сюда (vla-get-ActiveLayout acddoc))
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 22.10.2024 в 15:41. |
||||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 415
|
Цитата:
|
|||
![]() |
|
||||
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
А можно вот с этого места подробнее?
Цитата:
Задать "нужный мне формат" - тоже. Задача - узнать, а что же там было назначено изначально? Добавлено №1 Эта информация ведь в чертеже где-то хранится... Может быть - вообще системная переменная какая-нибудь? Добавлено №2 Если глянуть на DXF, то можно увидеть секцию примерно такого вида: Цитата:
формата бумаги. Осталось только до него добраться. Добавлено №3 Видимо, как-так... (setq ad (vla-get-activedocument (vlax-get-acad-object) )) (setq al (vla-get-activelayout ad)) (setq pl (VLA-GET-PLOT ad)) (setq custom_pl (VLA-GET-CUSTOMPLOTSETTINGS pl al)) Далее смотрим дамп (vlax-dump-object custom_pl t) и видим: Цитата:
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 23.10.2024 в 08:49. Причина: Добавлено |
|||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Что выяснилось.
1. Для одного и того же драйвера (скажем, того же самого HP Designjet T1300 HPGL2) Автокад и наноКАД имеют разную наборку пользовательских имён бумаги. Какие-то из них могут совпадать (допустим "А1"), а какие-то (допустим "А1 (альбомная)") в наборке НК будут отсутствовать. 2. Если мы откроем в НК файл, работу с которым мы закончили в АК с назначением формата листа на отсутствующий в НК "А1 (альбомная)", то при печати НК заменит его на какой-то из своих форматов. Возможно - не самый оптимальный. Но что-то он туда назначит. Пока всё логично. Но! 3. Если мы откроем такой файл в НК и попытаемся программно узнать, а что же НК назначил вместо отсутствующего у него "А1 (альбомная)", то в active_mn_local (см. пост #18 выше) будет пустота, т.е. "". А всё потому, что в active_mn_canon будет какая-то "левизна". 4. Попробуем сейчас зайти в окно печати и "зрительно" увидеть, что НК всё-таки назначил какой-нибудь "DIN Oversize L1" и снова повторить код из пост #18. Всё замечательно, active_mn_local = "DIN Oversize L1" Вывод: пока НК не получит "волшебного пенделя", правду он не скажет. Имейте это в виду при адаптации своих программ для АС под НК.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
но нана умеет SetClosestMediaName
поэтому нет проблем подсунуть в плотсетинг размер печатаемой области , единицы чертежа и нана сам подберет нужный формат но это на .NET, не уверен, что на лиспе так получится для автокад можно даже не пытаться, там на месте этого класса стоит заглушка (давно))) ------------ PS для чего узнавать какой принтер и бумага назначены? если чертеж пришел с другой машины или из другой программы, то эта информация не имеет никакого смысла. можно еще и эксепшен словить
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616
|
Цитата:
и - главное - архивного хранения файлов. Поэтому к передаваемым файлам предъявляются некие требования. Соответственно, автоматизировав процесс подготовки файлов, можно сэкономить кучу времени и нервов. Но сразу назначать параметры будет некорректно - нужно сперва посмотреть, а что же назначил пользователь. Проанализировать. И если там всё более или менее адекватно, то не умничать и ничего не менять. Или почти ничего. А если поменял - то аккуратно вывести это в Протокол, чтобы пользователь знал, "что было и что стало". ----- добавлено через ~29 мин. ----- Цитата:
Но выход есть - в виде формальной (command "_plot" ... "_y" "_n") т.е. "печать без печати - и в никуда". Может быть, и другой "волшебный пендель" поискать можно... Я пока на этом остановился.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Дык может проще будет ..
Все проектанты выводят в пдф, а отдел печати уже дальше думает в бумагу это. Или как Из пдф по принтерам разным раскидать бестселлер РеверсPDF, просто пушка, жаль что продажи прекращены, но при желании можно изыскать возможность. Так то чтобы обученные люди печатали чужие dwg, должна быть очень жесткая стандартизация.. Ну и автодеск давно подшивки придумала, но всегда есть шанс, что у печатника принтер называется чуть иначе чем у проектанта и карета превратится в тыкву... Поэтому и востребованы Реверс, PlotSPDS, когда можно распечатать любой чертеж со своими настройками ничего не настраивая))
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 25.10.2024 в 20:47. |
||||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 415
|
Видимо перед отделом печати стоит еще задача указывать на ошибки при формировании документации.
Я не большой специалист по внутреннему устройству работы автокада и тем более нанокада (может знающие люди поправят), но мне кажется, что инициация команды печать запускает проверку принтеров и установленных параметров печати с последующим их обновлением. То есть до команды "печать" все находится в исходном состоянии - имя принтера и имя страницы, стили печати и т.п. будут иметь значения, установленные до того. Может попробовать взять информацию об имени принтера, имени бумаги и ее размере из словаря листа (layouta)? Вот такой пример для Автокада. Но может нанокад в своих словарях хранит данные по печати? Код:
DXF-коды настроек печати (197 pdf-страница) https://autolisp.ru/wp-content/uploa...om=100,150,150 |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Плагин создания кабельных линий и генерации КЖ раздела КИПиА. Протестировано на AutoCAD 2015...2022 и офис 2013...2019. NanoCAD 23 | petro_f | Готовые программы | 244 | 26.09.2024 10:25 |
Как настроить область печати при публикации PDF из подшивки. | XoRys | AutoCAD | 15 | 18.06.2015 08:31 |
Lisp простой нумератор для Nanocad | gizmo_zx | LISP | 2 | 17.03.2015 11:50 |
"Съезжает" область печати в пространстве листа! | Marv | AutoCAD | 1 | 08.12.2012 17:12 |
Можно ли нескольким листам задать стиль печати | Maiia | AutoCAD | 1 | 19.10.2012 16:00 |