(vl-load-com)
;; Глобальная переменная - текущий документ
(setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
(defun c:poly-by-blocks (/ selset ins)
;; Если был выполнен выбор блоков
(if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
'pikset
) ;_ end of =
(progn
;; то по каждому элементу набора
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
;; Если эффективное имя блока А1 ("А" может быть как русской, так и английской,
;; от регистра не зависит
(if (wcmatch (strcase (vla-get-effectivename ent)) "A1,А1")
(progn
;; Вычислить точку вставки блока
(setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
;; Вызвать функцию poly-plot. Параметры вызова функции см. в описании функции
(poly-plot "c:\\Users\\evthi\\Desktop\\Тест"
(mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)))
) ;_ end of poly-plot
) ;_ end of progn
) ;_ end of if
) ;_ end of foreach
) ;_ end of progn
) ;_ end of if
;; Обеспечиваем "тихий" выход команды
(princ)
) ;_ end of defun
(defun poly-plot (filename pt-lst / layout)
;|
* Функция вывода в файл прямоугольной области
* Параметры вызова:
filename имя файла, в который выводится результат.
Каталог, в котором будет располагаться файл, должен уже существовать
pt-lst список трехмерных точек, который описывает левый нижний и правый верхний углы выводимой
области
|;
;; Получаем активный лист текущего документа
(setq layout (vla-get-activelayout *adoc*))
;; Обновляем доступные устройства печати
(vla-refreshplotdeviceinfo layout)
;; Устанавливаем для текущего листа плоттер.
(vla-put-configname layout "DWG to PDF.pc3")
;; Устанавливаем для текущего листа размер листа. Наличие такой настройки в плоттере не проверяется
(vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)")
;; Устанавливаем, что печатать будем с центрированием
(vla-put-centerplot layout :vlax-true)
;; Устанавливаем угол поворота печати
(vla-put-plotrotation layout ac90degrees)
;; Устанавливаем автомасштабирование печати
(vla-put-standardscale layout acscaletofit)
;; Устанавливаем таблицу печати. Если используется стилезависимая печать,
;; то необходимо либо изменить расширение файла, либо выполнить команду _.convertpstyles
(vla-put-stylesheet layout "acad.ctb")
;; Устанавливаем область печати
(vla-setwindowtoplot layout (car pt-lst) (last pt-lst))
;; Устанавливаем, что печатать будем окно
(vla-put-plottype layout acwindow)
;; Выполняем регенереацию всех видовых эранов
(vla-regen *adoc* acallviewports)
;; Собственно печать в файл
(vla-plottofile (vla-get-plot *adoc*) filename)
) ;_ end of defun