NanoCAD - как задать область печати на LISP? - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD - как задать область печати на LISP?

NanoCAD - как задать область печати на LISP?

Ответ
Поиск в этой теме
Непрочитано 02.10.2024, 13:39
NanoCAD - как задать область печати на LISP?
name02
 
Регистрация: 10.01.2020
Сообщений: 415

Адаптирую лисп для автокада для автоматической печати в нанокаде. Споткнулся на этапе программного задания области печати.
Вот такой лисп test.lsp:
Код:
[Выделить все]
 (defun c:test (/ pt1 pt2 *layout* pointTemp1 pointTemp2)
  (setq pt1 (getpoint))
  (setq pt2 (getpoint))

  (setq *layout* (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
	
  (setq pointTemp1 (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  (vlax-safearray-put-element pointTemp1 0 (car pt1))
  (vlax-safearray-put-element pointTemp1 1 (cadr pt1))
    
  (setq pointTemp2 (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  (vlax-safearray-put-element pointTemp2 0 (car pt2))
  (vlax-safearray-put-element pointTemp2 1 (cadr pt2))
    
  (vla-setwindowtoplot
			*layout*
 	   		pointTemp1
 	   		pointTemp2
   ) ;_ end of vla-setwindowtoplot
	
  (vla-put-PlotType *layout* acWindow)

)
Суть проблемы в следующем:
1 Задал область печати листа А4 через окно "Печать"
2 Запустил лисп. После отработки программы на дисплее область для печати (белый лист) перемещается куда надо, но если открыть окно печати, то область печати остается на ранее установленных координатах из шага 1 (красная пунктирная линия).
Нажмите на изображение для увеличения
Название: окно печати.png
Просмотров: 35
Размер:	58.4 Кб
ID:	264940

Вопрос: что делаю не так? Это недоработка лиспа под нанокад или есть какой-то другой способ задания области печати?

Просмотров: 2246
 
Непрочитано 25.10.2024, 14:47
#21
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Вывод: пока НК не получит "волшебного пенделя", правду он не скажет.
но нана умеет SetClosestMediaName
поэтому нет проблем подсунуть в плотсетинг размер печатаемой области , единицы чертежа и нана сам подберет нужный формат
но это на .NET, не уверен, что на лиспе так получится
для автокад можно даже не пытаться, там на месте этого класса стоит заглушка (давно)))
------------
PS для чего узнавать какой принтер и бумага назначены? если чертеж пришел с другой машины или из другой программы, то эта информация не имеет никакого смысла. можно еще и эксепшен словить
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 25.10.2024, 14:52
#22
name02


 
Регистрация: 10.01.2020
Сообщений: 415


Может попробовать сделать:
(vla-refreshplotdeviceinfo *layout*)

Все-таки принтеры в системе вещь малоизменяемая, поэтому я для своей программы (для Автокада) реализовал следующий алгоритм:

1. По размеру блока (с учетом масштаба конечно) определяется формат бумаги под него
2. В файле настроек печати указан формат, принтер и название бумаги для печати, цветовой профиль и т.п.

У себя я это обозвал "профиль печати":
Нажмите на изображение для увеличения
Название: окно1.png
Просмотров: 7
Размер:	52.2 Кб
ID:	265261

Соответственно можно настроить и переключаться на нужный профиль печати в зависимости от задачи и ситуации
name02 вне форума  
 
Непрочитано 25.10.2024, 15:07
#23
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
для чего узнавать какой принтер и бумага назначены?
Тут дело такое. У нас есть отдел централизованной печати
и - главное - архивного хранения файлов.

Поэтому к передаваемым файлам предъявляются некие
требования.

Соответственно, автоматизировав процесс подготовки файлов,
можно сэкономить кучу времени и нервов. Но сразу назначать
параметры будет некорректно - нужно сперва посмотреть, а что
же назначил пользователь. Проанализировать. И если там всё
более или менее адекватно, то не умничать и ничего не менять.
Или почти ничего.

А если поменял - то аккуратно вывести это в Протокол, чтобы
пользователь знал, "что было и что стало".

----- добавлено через ~29 мин. -----
Цитата:
Может попробовать сделать:
(vla-refreshplotdeviceinfo *layout*)
Не, не помогает.

Но выход есть - в виде формальной

(command "_plot" ... "_y" "_n")

т.е. "печать без печати - и в никуда".

Может быть, и другой "волшебный пендель" поискать можно...
Я пока на этом остановился.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 25.10.2024, 18:40
#24
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,298
Отправить сообщение для doctorraz с помощью Skype™


Дык может проще будет ..
Все проектанты выводят в пдф, а отдел печати уже дальше думает в бумагу это. Или как
Из пдф по принтерам разным раскидать бестселлер РеверсPDF, просто пушка, жаль что продажи прекращены, но при желании можно изыскать возможность.
Так то чтобы обученные люди печатали чужие dwg, должна быть очень жесткая стандартизация.. Ну и автодеск давно подшивки придумала, но всегда есть шанс, что у печатника принтер называется чуть иначе чем у проектанта и карета превратится в тыкву... Поэтому и востребованы Реверс, PlotSPDS, когда можно распечатать любой чертеж со своими настройками ничего не настраивая))
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 25.10.2024 в 20:47.
doctorraz вне форума  
 
Автор темы   Непрочитано 28.10.2024, 08:50
#25
name02


 
Регистрация: 10.01.2020
Сообщений: 415


Цитата:
Сообщение от doctorraz Посмотреть сообщение
Дык может проще будет ..
Видимо перед отделом печати стоит еще задача указывать на ошибки при формировании документации.

Я не большой специалист по внутреннему устройству работы автокада и тем более нанокада (может знающие люди поправят), но мне кажется, что инициация команды печать запускает проверку принтеров и установленных параметров печати с последующим их обновлением.
То есть до команды "печать" все находится в исходном состоянии - имя принтера и имя страницы, стили печати и т.п. будут иметь значения, установленные до того.

Может попробовать взять информацию об имени принтера, имени бумаги и ее размере из словаря листа (layouta)? Вот такой пример для Автокада. Но может нанокад в своих словарях хранит данные по печати?

Код:
[Выделить все]
 (defun c:test (/ psn )
  (setq
    psn	(member	'(100 . "AcDbPlotSettings")
		(dictsearch
		  (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_LAYOUT")))
		  (getvar "ctab")
		)
	)
  )

  (princ (strcat "Plotter name: " (cdr (assoc 2 psn))))
  (princ (strcat "\nPaper size: " (cdr (assoc 4 psn))))

  (princ)
)
По моему разумению, если мы не запускаем процедур печати, а читаем запись из словаря, то мы не "провоцируем" автокад (или нанокад) попытаться установить эти принтера и настройки печати, и соответственно можем получить исходные данные настроек печати.

DXF-коды настроек печати (197 pdf-страница) https://autolisp.ru/wp-content/uploa...om=100,150,150
name02 вне форума  
 
Непрочитано 29.10.2024, 07:24
#26
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от name02 Посмотреть сообщение
Но может нанокад в своих словарях хранит данные по печати?
Может быть попробовать Реверс ? Там можно сохранять и список файлов и уникальные настройки.
baksconstructor вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD - как задать область печати на LISP?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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