Тема: Печать с помощью программы на Лиспе

Можно ли сделать программку на Лиспе, может еще на чем, которая распечатает чертеж при запуске автоматически.
Смысл в том, что принтер для чертежа А4 один, форматка типа А4 , блоком или хрефом на чертеже одна, а может и две-три, но одинаковых. Задаешь сразу все настройки принтера в программе и запускаешь печать командой.
Программа ищет форматки, сама определяет все области печати, считывает опции печати и  печатает.
А идеальный вариант, если она определяет формат и запускает каждый формат на свой принтер. А4 на свой, А3 на другой.

Re: Печать с помощью программы на Лиспе

Здесь на форуме уже описал, как на работе распечатываем чертежи, но повторюсь.
На работе А4 печатаем на одном принтере, А3 на другом, А2 и А1 выводим на плоттер и бывает, что в одном файле (модели) есть несколько областей для печати разных форматов. Поэтому
использую программу, где нужно указать только два противоположных угла области для печати, а
программа сама выбирает принтер и ориентацию формата. Если выбранная область не соответствует (заданы допуска по длине и углу между указанными точками) ГОСТ-форматам, то масштабирование на А4.

;|====================================================
Печать выбранной области
Макрос для кнопки:
^C^C^P(load "Print_Den");Print_Den
Проверить путь до принтера (скопировать в командную строку):
(command "_.plot" "_y" "Model" "?" nil)
Проверить форматы принтера, например, Canon S4500:
(command "_.plot" "_y" "Model" "\\\\Printserver01\\Canon S4500" "?" nil)
====================================================|;
(defun C:Print_Den (/ a0 a1 a2 a3 a4 a5 a6)
(setq a0 (list "\\\\Printserver01\\Canon LASER SHOT LBP-1120" ; Формат А4
           "\\\\Printserver01\\Canon S4500"               ; Формат А3
           "\\\\Printserver01\\HP DesignJet 500 24 by HP" ; Формат А2, А1
           )
      a1 (getpoint "\nПервый угол области печати:")
      a6 nil)
(if a1 (progn
(while (null a6)
(if (setq a2 (getcorner a1 "\nПротивоположный угол области печати:"))
(setq a3 (distance a1 a2)
      a4 (angle a1 a2)
      a6 (* (cos a4)(sin a4)))
)
(if (equal a6 0 1e-015)(progn
(setq a6 nil)
(princ "\nНеверное определение рамки.")
))
)
(cond
((not (equal (abs a6) 0.4714 0.001))
(setq a5 0
      a3 "A4")
)
((equal a3 (sqrt 264609) 4)
(setq a5 1
      a3 "A3")
)
((equal a3 (sqrt 529236) 4)
(setq a5 2
      a3 "Oversize: ISO A2  (альбомная)")
)
((equal a3 (sqrt 1060117) 4)
(setq a5 2
      a3 "Oversize: ISO A1 ")
)
(t
(setq a5 0
      a3 "A4")
)
)
(setq a0 (nth a5 a0)
      a5 a0)
(while (setq a6 (vl-string-search "\\" a5))
(setq a5 (substr a5 (+ 2 a6)))
)
(princ (strcat "\nПринтер: " a5 ", Формат: " a3 "\n"))
(setvar "CMDECHO" 0)
(command "_.plot" "_y" "Model" a0 a3 "_m" (if (< (abs (sin a4)) (sqrt 0.5)) "_l" "_p")
     "_n" "_w" a1 a2 "" "_c" "_y" "monochrome.ctb" "_y" "_a" "_n" "_y" "_y")
(setvar "CMDECHO" 1)
))
(princ)
)

Re: Печать с помощью программы на Лиспе

Спасибо, что-то получилось и у меня на основе вашей прогаммы.

Re: Печать с помощью программы на Лиспе

посмотри вот это
http://dwg.ru/dnl/126
моё творение :) у нас в конторе работает, и впринципе всем нравится. может показаться что немного перевёрнута логика работы, но на самом деле удобно. печать вообще не запаривает, с любой машины (даже если принтеры названы по разному, всё перенастраивается за минуту) и в любом количестве.