Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Андрей1986 от 17-07-2017, 15:17:55

Название: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 17-07-2017, 15:17:55
Здравствуйте, Максим Маркевич. Можно ли переделать код VBA 16 урока- Пакетная печать блоков-форматов  на LISP?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 17-07-2017, 16:47:51
Здравствуйте, Максим Маркевич. Можно ли переделать код VBA 16 урока- Пакетная печать блоков-форматов  на LISP?
Максим Маркевич не пишет на lisp'е. А в чем смысл этой переделки?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 17-07-2017, 17:00:13
Смысла особого нет. Просто, чтобы установить VBA-редактор нужны права администратора(что проблематично для меня), а LISP-редактор уже есть.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 17-07-2017, 17:23:20
Андрей1986
В любом случае перевод "в лоб" кода с VBA на VisualLisp смысла не имеет, так как напрямую воспользоваться ты им не сможешь и нужно будет переписывать его под себя. Например, в коде Максима подразумевается, что в качестве рамки используется блок с именем "A1" имеющий точку вставки в левом нижнем углу, что размер рамми соответствует формату A1, что печать идёт в PDF на стандартный AutoCAD'овский плоттер, ну и т.д.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 17-07-2017, 17:41:47
А есть уже созданная тема- Пакетная печать блоков-форматов в PDF  на LISP? Может есть примеры кода, хотя бы для одного формата, напр. А1?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 17-07-2017, 18:33:40
А есть уже созданная тема- Пакетная печать блоков-форматов в PDF  на LISP?
Уже есть - ты в ней. :)
Может есть примеры кода, хотя бы для одного формата, напр. А1?
Кто-нибудь думаю поможет с этим.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 18-07-2017, 08:21:48
В принципе, переписывать VBA на VisualLISP не проблема. Советую почитать http://adn-cis.org/forum/index.php?topic=909.0 и http://www.cad.dp.ua/stats/vla_doc.php - там все достаточно просто и доступно описано. Учитывая, что код в http://adn-cis.org/forum/index.php?topic=7270.msg23517#msg23517 достаточно короткий, думаю, проблем составить не должно.
Код (что успел) без проверок и тестирования:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  4.  
  5. (defun poly-by-blocks (/ selset ins)
  6.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
  7.          'pikset
  8.       ) ;_ end of =
  9.     (progn
  10.       (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
  11.         (if (wcmatch (strcase (vla-get-effectivename ent)) "A1,А1")
  12.           (progn (setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
  13.                  (poly-plot "c:\\Users\\evthi\\Desktop\\Тест"
  14.                             (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)))
  15.                  ) ;_ end of poly-plot
  16.           ) ;_ end of progn
  17.         ) ;_ end of if
  18.       ) ;_ end of foreach
  19.     ) ;_ end of progn
  20.   ) ;_ end of if
  21. ) ;_ end of defun
  22.  
  23. (defun poly-plot (filename pt-lst / layout)
  24.   (setq layout (vla-get-activelayout *adoc*))
  25.   (vla-refreshplotdeviceinfo layout)
  26.   (vla-put-configname layout "DWG to PDF.pc3")
  27.   (vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)")
  28.   (vla-put-centerplot layout :vlax-true)
  29.   (vla-put-plotrotation layout ac90degrees)
  30.   (vla-put-standardscale layout acscaletofit)
  31.   (vla-put-stylesheet layout "acad.ctb")
  32.   (vla-setwindowtoplot layout (car pt-lst) (last pt-lst))
  33.   (vla-put-plottype layout acwindow)
  34.   (vla-regen *adoc* acallviewports)
  35.   (vla-plottofile (vla-get-plot *adoc*) filename)
  36. ) ;_ end of defun
  37.  
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 20-07-2017, 16:18:13
Код сохранил. дал имя. подгрузил через вкладку Управление-Загрузка приложения. Не работает.
нужно присвоить функцию через defun?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 20-07-2017, 16:24:29
А как вызываешь? Надо так:
(poly-by-blocks)Я ж как команду не оформлял.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 20-07-2017, 16:25:09
Путь "c:\Users\evthi\Desktop\Тест" поменял на свой? Кстати должны быть двойные обратные слэши, т.е что-то типа "c:\\Users\\evthi\\Desktop\\Тест"
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 20-07-2017, 16:43:27
Ох, елки, совсем забыл! Исправляюсь...
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 21-07-2017, 14:01:25
Не понял. Как надо в итоге?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 21-07-2017, 15:27:42
Я последний код исправил
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 26-07-2017, 12:47:15
Почему-то не получается вызвать функцию poly-by-blocks?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 26-07-2017, 12:51:00
А как вызываешь? И где - в ком.строке или в своем коде?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 26-07-2017, 12:56:20
вызываю в командной строке.
Я так понял, что нужно оформить код, как команду. Типа С: ?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 26-07-2017, 12:57:19
Не хочу дублировать прекрасную статью: https://dwg.ru/pub/9
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 26-07-2017, 12:57:43
Я так понял, что нужно оформить код, как команду. Типа С: ?
Совершенно необязательно.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 26-07-2017, 13:02:10
Действительно-ПРЕКРАСНАЯ статья. Сенкс.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 26-07-2017, 14:46:00
перед (vl-load-com) я ставлю (defun C:<моё имя программы> ). сохраняю ее как лисп файл.
не получается :'(
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 26-07-2017, 14:49:53
Андрей1986
С тобой не соскучишься. ;)
В коде Алексея замени:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun poly-by-blocks (/ selset ins)
на
Код - Auto/Visual Lisp [Выбрать]
  1. (defun C:poly-by-blocks (/ selset ins)
После загрузки файла с этим кодом в командной строке введи poly-by-blocks и нажми ENTER. Всё!


Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 26-07-2017, 15:27:49
Доходит до этого,после выбора блока-

Команда: POLY-BY-BLOCKS
Выберите объекты: найдено: 1
Выберите объекты:
nil

Я еще поменял путь на (poly-plot "C:\Проекты".

P.S. если, что. я не специально....
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 26-07-2017, 15:54:19
Я еще поменял путь на (poly-plot "C:\Проекты".
В lisp в строке должны быть двойные обратные наклонные, т.е. не (poly-plot "C:\Проекты") а (poly-plot "C:\\Проекты")
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 26-07-2017, 17:32:38
 8)
Вызвать команду получается.
Команда: POLY-BY-BLOCKS
Выберите объекты: найдено: 1  (блок с названием А1)
Выберите объекты:
nil
ЧТО ЭТО?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 26-07-2017, 17:55:31
А для примера точно брался файл из темы? К сожалению, как минимум на ближайшие четыре-пять часов я вне сети :(
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 26-07-2017, 18:42:07
ЧТО ЭТО?
"C:\Проекты" - это каталог или имя файла? Там должно быть имя файла.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 26-07-2017, 18:58:14
путь, где лежит моя программа?
или, что туда надо прописывать? ???
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 26-07-2017, 19:47:44
путь, где лежит моя программа?
или, что туда надо прописывать? ???
Туда нужно прописать имя файла, в который будет сохранен pdf-файл.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 27-07-2017, 09:17:00
(vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)")

что значить full_bleed?
просто у меня нет такого формата...

после того, как выбираю объекты, пишет- nil
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 27-07-2017, 09:18:54
что значить full_bleed?
просто у меня нет такого формата...
Значит выберите тот, который у вас есть. В разных версиях AutoCAD (и языковых локализациях) могут быть разные названия форматов.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 27-07-2017, 09:19:15
после того, как выбираю объекты, пишет- nil
Это в принципе нормально.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 27-07-2017, 09:28:40
после того, как я выбираю блок, должна сразу идти печать в ПДФ?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 27-07-2017, 09:42:05
Да. После завершения выбора должна идти печать а pdf-файл. Учите программирование. Судя по вопросам вы не в том разделе.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 27-07-2017, 09:48:52
Легко ВАМ- РЫЦАРЯМ, так рассуждать.
Поделитесь тогда, куда таким идти?

После того, как выбрал, пишет найдено: 1. и ничего не происходит.
нажимаю Enter. nil
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 27-07-2017, 09:54:09
Попробовал по-быстрому расписать построчно, что и как происходит в коде
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2. ;; Глобальная переменная - текущий документ
  3. (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  4.  
  5. (defun c:poly-by-blocks (/ selset ins)
  6.   ;; Если был выполнен выбор блоков
  7.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
  8.          'pikset
  9.          ) ;_ end of =
  10.     (progn
  11.       ;; то по каждому элементу набора
  12.       (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
  13.         ;; Если эффективное имя блока А1 ("А" может быть как русской, так и английской,
  14.         ;; от регистра не зависит
  15.         (if (wcmatch (strcase (vla-get-effectivename ent)) "A1,А1")
  16.           (progn
  17.             ;; Вычислить точку вставки блока
  18.             (setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
  19.             ;; Вызвать функцию poly-plot. Параметры вызова функции см. в описании функции
  20.                  (poly-plot "c:\\Users\\evthi\\Desktop\\Тест"
  21.                             (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)))
  22.                             ) ;_ end of poly-plot
  23.                  ) ;_ end of progn
  24.           ) ;_ end of if
  25.         ) ;_ end of foreach
  26.       ) ;_ end of progn
  27.     ) ;_ end of if
  28.   ;; Обеспечиваем "тихий" выход команды
  29.   (princ)
  30.   ) ;_ end of defun
  31.  
  32. (defun poly-plot (filename pt-lst / layout)
  33.   ;|
  34. *    Функция вывода в файл прямоугольной области
  35. *    Параметры вызова:
  36.   filename    имя файла, в который выводится результат.
  37.               Каталог, в котором будет располагаться файл, должен уже существовать
  38.   pt-lst      список трехмерных точек, который описывает левый нижний и правый верхний углы выводимой
  39.               области
  40. |;
  41.   ;; Получаем активный лист текущего документа
  42.   (setq layout (vla-get-activelayout *adoc*))
  43.   ;; Обновляем доступные устройства печати
  44.   (vla-refreshplotdeviceinfo layout)
  45.   ;; Устанавливаем для текущего листа плоттер.
  46.   (vla-put-configname layout "DWG to PDF.pc3")
  47.   ;; Устанавливаем для текущего листа размер листа. Наличие такой настройки в плоттере не проверяется
  48.   (vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)")
  49.   ;; Устанавливаем, что печатать будем с центрированием
  50.   (vla-put-centerplot layout :vlax-true)
  51.   ;; Устанавливаем угол поворота печати
  52.   (vla-put-plotrotation layout ac90degrees)
  53.   ;; Устанавливаем автомасштабирование печати
  54.   (vla-put-standardscale layout acscaletofit)
  55.   ;; Устанавливаем таблицу печати. Если используется стилезависимая печать,
  56.   ;; то необходимо либо изменить расширение файла, либо выполнить команду _.convertpstyles
  57.   (vla-put-stylesheet layout "acad.ctb")
  58.   ;; Устанавливаем область печати
  59.   (vla-setwindowtoplot layout (car pt-lst) (last pt-lst))
  60.   ;; Устанавливаем, что печатать будем окно
  61.   (vla-put-plottype layout acwindow)
  62.   ;; Выполняем регенереацию всех видовых эранов
  63.   (vla-regen *adoc* acallviewports)
  64.   ;; Собственно печать в файл
  65.   (vla-plottofile (vla-get-plot *adoc*) filename)
  66.   ) ;_ end of defun
  67.  
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 27-07-2017, 11:20:59
А вы у себя на автокаде пробовали этот код?
Все работает?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 27-07-2017, 11:42:02
Не успеваю. Работы пока многовато. У предыдущих участников вроде бы работало - иначе бы сразу сказали.

Если появится сегодня время - попробую протестировать
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 27-07-2017, 11:42:53
Спасибо
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 27-07-2017, 11:44:57
На всякий случай установите BACKGROUNDPLOT в 0: http://help.autodesk.com/view/ACD/2016/RUS/?guid=GUID-713029B7-B5AC-4860-BE2E-74878D418EA4
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 27-07-2017, 18:32:33
Если коротко, то в коде было допущено 2 ошибки:
1. опечатка - вместо pickset было вбито pikset
2. Ошибка в назначениях точек при выводе на печать.

Исправленный код (но уже без объяснений):
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  4.  
  5. (defun c:poly-by-blocks (/ selset ins)
  6.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
  7.          'pickset
  8.          ) ;_ end of =
  9.     (progn
  10.       (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
  11.         (if (wcmatch (strcase (vla-get-effectivename ent)) "A1,À1")
  12.           (progn (setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
  13.                  (poly-plot (getfiled "Where to plot" "" "pdf" 1)
  14.                             ;;"c:\\Users\\evthi\\Desktop\\Òåñò"
  15.                             (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)))
  16.                             ) ;_ end of poly-plot
  17.                  ) ;_ end of progn
  18.           ) ;_ end of if
  19.         ) ;_ end of foreach
  20.       ) ;_ end of progn
  21.     ) ;_ end of if
  22.   ) ;_ end of defun
  23.  
  24. (defun poly-plot (filename pt-lst / layout)
  25.   (setq layout (vla-get-activelayout *adoc*)
  26.         pt-lst (mapcar (function (lambda (x) (list (car x) (cadr x)))) pt-lst)
  27.         ) ;_ end of setq
  28.   (vla-refreshplotdeviceinfo layout)
  29.   (vla-put-configname layout "DWG to PDF.pc3")
  30.   (vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)")
  31.   (vla-put-centerplot layout :vlax-true)
  32.   (vla-put-plotrotation layout ac90degrees)
  33.   (vla-put-standardscale layout acscaletofit)
  34.   (vla-put-stylesheet layout "acad.ctb")
  35.   (vla-setwindowtoplot
  36.     layout
  37.     (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 1)) (car pt-lst))
  38.     (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 1)) (last pt-lst))
  39.     ) ;_ end of vla-setwindowtoplot
  40.   (vla-put-plottype layout acwindow)
  41.   (vla-regen *adoc* acallviewports)
  42.   (vla-plottofile (vla-get-plot *adoc*) filename)
  43.   ) ;_ end of defun
  44.  
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 28-07-2017, 14:26:55
Упс. У меня все равно проблемы.
Автокад пишет следующее:
Выполняется регенерация модели.
Команда:
<<  Принудительное завершение работы программы  >>
Error: Ошибка Automation. Отсутствует описание.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 28-07-2017, 14:30:37
И в каком месте ошибка?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 28-07-2017, 14:43:32
Хмм. Если бы я знал, не донимал бы вас. А у вас работает?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 28-07-2017, 14:45:00
У меня - да. Для понимания / вычисления, что происходит не так, советую прочитать http://autolisp.ru/2009/09/10/vlide-misc-01/ и http://autolisp.ru/2009/09/12/vlide-misc-02/
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 28-07-2017, 14:51:21
И в каком месте ошибка?
Похоже здесь:
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-plottofile (vla-get-plot *adoc*) filename)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 28-07-2017, 14:56:01
Ну, у меня сработало, насколько я помню.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 31-07-2017, 14:47:35
Алексей, у меня заработало.  :o. КРУТОБЛ. Я аж чуть не расплакался от счастья!
Но почему то выводит пустой лист. Можете пример блока скинуть какой-нибудь для сравнения?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 31-07-2017, 15:18:12
Так я "от балды" нарисовал прямоугольник, из него создал блок с именем "a1" и запустил команду. Все...
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 31-07-2017, 15:23:31
Так я "от балды" нарисовал прямоугольник, из него создал блок с именем "a1" и запустил команду. Все...
Леша. Там кажется еще координаты нужно преобразовать из WCS (или UCS) в DCS: http://adn-cis.org/pechat-granicz-okna-pri-pomoshhi-vba.html
Т.е. (trans pt 0 2) или (trans pt 1 2)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 31-07-2017, 16:00:57
Почему-то ПДФ файл создается пустой. Без моего выделенного блока.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 31-07-2017, 16:02:39
Почему-то ПДФ файл создается пустой. Без моего выделенного блока.
Выложи чертеж на котором проверяешь, чтобы Алексей мог проверить.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 31-07-2017, 16:04:33
Так я "от балды" нарисовал прямоугольник, из него создал блок с именем "a1" и запустил команду. Все...
Леша. Там кажется еще координаты нужно преобразовать из WCS (или UCS) в DCS: http://adn-cis.org/pechat-granicz-okna-pri-pomoshhi-vba.html
Т.е. (trans pt 0 2) или (trans pt 1 2)
Охотно верю. Но изначально вопрос был в том, чтобы "перевести" с VBA на LISP (насколько я помню) :) Поставленную задачу и решал.
Но, если честно, сугубо ИМХО: подобный подход не самое лучшее. Уж проще использовать публикацию или подшивки и листы.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 31-07-2017, 16:05:44
Но если будет образец, поковыряюсь по возможности.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 31-07-2017, 16:07:26
мой блок.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 31-07-2017, 17:46:39
Во-первых, там два блока (один над другим). Во-вторых, точка вставки блока должна совпадать с левым нижним углом блока, а у тебя она непонятно где.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 31-07-2017, 18:14:33
Я позволил себе чуть исправить код:

Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:poly-by-blocks (/ selset ins)
  2.   (vl-load-com)
  3.   (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  4.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
  5.          'pickset
  6.          ) ;_ end of =
  7.     (progn
  8.       (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
  9.         (if (wcmatch (strcase (vla-get-effectivename ent)) "A1,A1")
  10.           (progn (setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
  11.                  (poly-plot (getfiled "Where to plot" "" "pdf" 1)
  12.                             ;;"c:\\Users\\evthi\\Desktop\\Oano"
  13.                             (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)))
  14.                             ) ;_ end of poly-plot
  15.                  ) ;_ end of progn
  16.           ) ;_ end of if
  17.         ) ;_ end of foreach
  18.       ) ;_ end of progn
  19.     ) ;_ end of if
  20. ) ;_ end of defun
  21.  
  22. (defun poly-plot (filename pt-lst / layout)
  23.   (setq layout (vla-get-activelayout *adoc*)
  24.         pt-lst (mapcar (function (lambda (x) (list (car (trans x 0 2)) (cadr (trans x 0 2))))) pt-lst)
  25.         ) ;_ end of setq
  26.   (vla-refreshplotdeviceinfo layout)
  27.   (vla-put-configname layout "DWG to PDF.pc3")
  28.   (vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)")
  29.   (vla-put-centerplot layout :vlax-true)
  30.   (vla-put-plotrotation layout ac90degrees)
  31.   (vla-put-standardscale layout acscaletofit)
  32.   ;(vla-put-stylesheet layout "acad.ctb")
  33.   (vla-setwindowtoplot
  34.     layout
  35.     (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 1)) (car pt-lst))
  36.     (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 1)) (last pt-lst))
  37.   ) ;_ end of vla-setwindowtoplot
  38.   (vla-put-plottype layout acwindow)
  39.   (vla-regen *adoc* acallviewports)
  40.   (vla-plottofile (vla-get-plot *adoc*) filename)
  41.   ) ;_ end of defun
  42.  

и блок (см. прикрепленный файл).

Результат:
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 01-08-2017, 07:46:07
Без проверки и на бегу: Александр, а зачем апостроф в строке 32?
'(vla-put-stylesheet layout "acad.ctb")
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 01-08-2017, 07:49:56
Интересный вопрос. :) Там должна была быть точка с запятой (т.е. комментарий).
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 01-08-2017, 07:52:19
Понял :) Сам подобное допускаю, когда с языка на язык скачу :)
Off-Topic: показать
Писал тут VBA-код под Outlook, так вместо ":" в половине случаев ставил ";" из C# :)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 01-08-2017, 07:57:59
Теперь осталось понять почему оно нормально отработало...

P.S.: Код подправил.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 02-08-2017, 10:09:16
(if (wcmatch (strcase (vla-get-effectivename ent)) "A1,A1")
Почему имя блока 2 раза прописывается?
А если у меня блок называется Рамка_штамп. Мне нужно 2 раза прописать  "Рамка_штамп,Рамка_штамп"?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 02-08-2017, 10:10:54
Одна "А" - русская, вторая - английская.
Кстати, посмотри в справке - что такое strcase и к чему оно приводит
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 02-08-2017, 14:01:33
wcmatch-сравнение,
strcase-возвращает строку, в которой все алфавитные символы были преобразованы в верхний или нижний регистр
vla-get-effectivename ent-не понятно.

Дак, если я хочу заменить название блока на Рамка_формат, код можно такой же оставить?
Что-то не получается. nil пишет
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 02-08-2017, 14:20:22
vla-get-effectivename - получение т.н. "эффективного" имени блока (в т.ч. и динамического)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 02-08-2017, 14:20:38
Что-то не получается. nil пишет
В каком месте? Покажи свой код
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 02-08-2017, 14:45:15
(if (wcmatch (strcase (vla-get-effectivename ent)) "Рамка_формат")
или полностью?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 02-08-2017, 14:56:38
Пусть у блока эффективное имя "Рамка_формат"
(wcmatch (strcase (vla-get-effectivename ent)) "Рамка_формат") -> nil
(wcmatch (strcase (vla-get-effectivename ent)) (strcase "Рамка_формат")) -> t

Сравнение строк происходит с учетом регистра!
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 02-08-2017, 15:13:53
Офигеть. Сработало братва! Сенкс большое!!! Ну ты мозг!
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 03-08-2017, 09:08:25
А если я хочу добавить другие форматы, мне с какого места добавлять код?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 03-08-2017, 09:32:09
В таком случае понадобится изменить имена блоков, вычисления точек и названия используемых листов.
Скажу честно - для подобной задачи я бы писал отдельную функцию, которая получает вычисленные точки, название плоттера и используемого формата. И ее бы и использовал.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 03-08-2017, 10:21:36
Код - Auto/Visual Lisp [Выбрать]
  1. [(mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)]
  2.  
Это вычисление точек?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 03-08-2017, 10:23:23
Ну да.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 03-08-2017, 11:09:04
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:poly-by-blocks (/ selset ins)
  2.   (vl-load-com)
  3.   (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  4.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
  5.          'pickset
  6.          ) ;_ end of =
  7.     (progn
  8.       (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
  9.         (if (wcmatch (strcase (vla-get-effectivename ent)) (strcase "Рамка_формат"))
  10.           (progn (setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
  11.                  (poly-plot (getfiled "Where to plot" "C:\\Users\\a.kozlovsky\\Desktop\\ПДФ\\" "pdf" 1)
  12.                             ;;"c:\\Users\\evthi\\Desktop\\Ваша папка"
  13.                            (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)))
  14.                             ) ;_ end of poly-plot
  15.                  ) ;_ end of progn
  16.           ) ;_ end of if
  17.         ) ;_ end of foreach
  18.       ) ;_ end of progn
  19.     ) ;_ end of if
  20. ) ;_ end of defun
если вместо  строки   ;;"c:\\Users\\evthi\\Desktop\\Ваша папка"  поставить:
Код - Auto/Visual Lisp [Выбрать]
  1. ;;Вычисление точек
  2. (defun vichislenie_tochek
  3. (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (297. 210. 0.)
  4. (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (297. 420. 0.)
  5. (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)
так можно сделать?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 03-08-2017, 11:11:02
Так, стоп.
Сделать - можно. Но, во-первых, работать не будет. Во-вторых, что будет возвращаться, если вдруг случится чудо и этот код заработает?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 03-08-2017, 11:30:29
если вдруг случится чудо и этот код заработает?
Чудо не случится - там полная чехарда со скобками.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 03-08-2017, 11:42:17
 текст песни Алешкина любовь Иванушки International-

Припев:
Как же быть, как быть,
Не могу я это сделать, не могу.
 
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 03-08-2017, 12:23:03
К сожалению, у меня нет никакой возможности все рассказывать "с нуля".
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 03-08-2017, 12:42:19
Не могу я это сделать, не могу.
Значит я был прав с самого начала. Это раздел в котором помогают с написанием программ, а не пишут программу от нуля и до конца под конкретные запросы конкретного заказчика. Значит тебе нужно искать того, кто за тебя напишет программу. С этим вопросом тебе сюда: http://adn-cis.org/forum/index.php?board=38.0
Перед тем как будешь заказывать программу перечитай правила того раздела.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: maratovich от 03-08-2017, 13:58:08
Андрей1986
на одном из дружественных форумах есть тема "Пакетная печать множества рамок (форматов) из пространства модели. " может быть она вам поможет.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 03-08-2017, 14:03:50
Кстати, да. Как вариант готовые решения: http://forum.dwg.ru/showthread.php?t=104517
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 03-08-2017, 14:28:09
У AutoDeska есть программы обучения на LISP?
Николая Николаевича- читаю в процессе.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 03-08-2017, 14:30:49
У Autodesk наверняка нет. Я бы искал по авторизованным тренинговым центрам (ATC)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 03-08-2017, 14:32:37
Я бы искал по авторизованным тренинговым центрам (ATC)
Тоже сомнительно и совсем не бесплатно.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 03-08-2017, 14:38:35
Что можете сказать про учебный центр "Специалист"?
http://www.specialist.ru/course/lisp1
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 03-08-2017, 14:42:19
Что можете сказать про учебный центр "Специалист"?
http://www.specialist.ru/course/lisp1
Говорить нужно не про учебный центр, а про конкретного преподавателя учебного центра.

P.S.: Хотел бы напомнить как у нас называется тема. Всё остальное offtop.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-08-2017, 17:55:17
Вопросы по DCL куда писать?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 09-08-2017, 17:59:32
Вопросы по DCL куда писать?
Создать новую тему здесь: http://adn-cis.org/forum/index.php?board=7.0
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 29-12-2017, 16:30:06
Всех с Наступающим Новым Годом!
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 09:37:27
Здравствуйте, всем. Почему автокад запоминает последнюю команду...
 
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 11:16:00
Ничего не понял. Второй файл абсолютно четко выводится на печать. В чем собственно вопрос?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 11:18:38
Он выводит файл в А4, вместо А3.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 11:21:14
Может, проблема в коде, который отвечает за вызов?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 11:29:38
А если я его загружаю вручную. То всё нормально. В макросах прописана команда. В автозагрузке стоит. Но работает по последней ручной подгрузке.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 11:42:25
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 11:56:04
Возможно, автоматически подгружается "не та" версия. Проверь.
P.S. Откровенно говоря, стараюсь вообще не использовать StartupSuite - есть более интересные способы загрузки приложений ;)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 12:03:12
Автоматически это как?
Где смотреть?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 13:01:09
В макросах прописана команда. В автозагрузке стоит
Чьи слова? :) Я так понимаю, что каким-то образом все же приложение загружается автоматически. Только загружается "не то и не оттуда". Вполне возможно, что загрузка прописана в StartupSuite (команда _.appload, потом нажать на портфельчик) - надо проверить, откуда код грузится.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 14:27:09
В портфельчике подгружены. Но не работает...
(https://s18.postimg.org/nlr8taj45/image.jpg) (https://postimg.org/image/nlr8taj45/)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 15:06:34
Еще раз - откуда подгружается в порфеле? Чудес не бывает.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 15:33:46
Папку я указываю свою, кнопкой Добавить...
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 15:36:41
Из StartupSuite убрать старую версию. Перезапустить ACAD. Снова вызвать _.appload, указать каталог, в котором располагается "нормальная" версия и загрузить ее. Что будет в результате?
При ручной загрузке указывается тот же каталог? Может, все же разница есть?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 15:49:33
А можете попробовать у себя?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 15:54:50
У меня всего один вопрос - почему в двух разных lsp определяется одна и та же функция, которая по-разному срабатывает?
В pp-a3.lsp в функции poly-plot используется конструкция
Код - Auto/Visual Lisp [Выбрать]
  1.   (vla-put-canonicalmedianame layout "ISO_A3_(297.00_x_420.00_MM)")
pp-a4.lsp, там же:
Код - Auto/Visual Lisp [Выбрать]
  1.   (vla-put-canonicalmedianame layout "ISO_A4_(297.00_x_210.00_MM)")
Вот и не срабатывает. Надо функциям давать разные имена или вводить доп.параметры.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 16:00:50
Как вариант
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2. (setq *adoc* (vla-get-activedocument (vlax-get-acad-object)))
  3.  
  4. (defun c:poly-by-blocks_a4 (/ selset ins)
  5.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
  6.          'pickset
  7.          ) ;_ end of =
  8.     (progn
  9.       (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
  10.         (if (wcmatch (strcase (vla-get-effectivename ent)) (strcase "Рамка_формат"))
  11.           (progn (setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
  12.                  (poly-plot (getfiled "Where to plot" (_kpblc-get-desktop-path) "pdf" 1)
  13.                             (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (210. 297. 0.)))
  14.                             "ISO_A4_(297.00_x_210.00_MM)"
  15.                             ) ;_ end of poly-plot
  16.                  ) ;_ end of progn
  17.           ) ;_ end of if
  18.         ) ;_ end of foreach
  19.       ) ;_ end of progn
  20.     ) ;_ end of if
  21.   ) ;_ end of defun
  22.  
  23. (defun c:poly-by-blocks_a3 (/ selset ins)
  24.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "INSERT"))))))))
  25.          'pickset
  26.          ) ;_ end of =
  27.     (progn
  28.       (foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))))
  29.         (if (wcmatch (strcase (vla-get-effectivename ent)) (strcase "Рамка_формат"))
  30.           (progn (setq ins (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint ent))))
  31.                  (poly-plot (getfiled "Where to plot" (_kpblc-get-desktop-path) "pdf" 1)
  32.                             (mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (420. 297. 0.)))
  33.                             "ISO_A3_(297.00_x_420.00_MM)"
  34.                             ) ;_ end of poly-plot
  35.                  ) ;_ end of progn
  36.           ) ;_ end of if
  37.         ) ;_ end of foreach
  38.       ) ;_ end of progn
  39.     ) ;_ end of if
  40.   ) ;_ end of defun
  41.  
  42. (defun poly-plot (filename pt-lst name / layout)
  43.   (setq layout (vla-get-activelayout *adoc*)
  44.         pt-lst (mapcar (function (lambda (x) (list (car (trans x 0 2)) (cadr (trans x 0 2))))) pt-lst)
  45.         ) ;_ end of setq
  46.   (vla-refreshplotdeviceinfo layout)
  47.   (vla-put-configname layout "DWG to PDF.pc3")
  48.   (vla-put-canonicalmedianame layout name)
  49.   (vla-put-centerplot layout :vlax-true)
  50.   (vla-put-plotrotation layout ac90degrees)
  51.   (vla-put-standardscale layout acscaletofit) ;(vla-put-stylesheet layout "acad.ctb")
  52.   (vla-setwindowtoplot layout
  53.                        (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 1)) (car pt-lst))
  54.                        (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 1)) (last pt-lst))
  55.                        ) ;_ end of vla-setwindowtoplot
  56.   (vla-put-plottype layout acwindow)
  57.   (vla-regen *adoc* acallviewports)
  58.   (vla-plottofile (vla-get-plot *adoc*) filename)
  59.   ) ;_ end of defun
  60.  
  61. (defun _kpblc-get-desktop-path ()
  62.   (vl-registry-read "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
  63.                     "desktop"
  64.                     ) ;_ end of vl-registry-read
  65.   ) ;_ end of defun
  66.  

Хотя я, наверное, делал бы совсем по-другому :)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Андрей1986 от 09-01-2018, 16:41:23
Я прописал в каждом файле .lsp  функции poly-plot1 для А1, poly-plot2 для А2 и т.д. Работает. Огонь!!! Спасибо...
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 09-01-2018, 16:42:18
Если название одно и то же, а содержимое разное - то работать не будет.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Олег Боровой от 16-10-2018, 22:31:17
Может быть плохо искал, но не нашел как задать смещение x y, если (vla-put-centerplot layout :vlax-false).
Кто-то подскажет?

UPD
Сам задал, сам и отвечу.
смещение задается через свойство PlotOrigin, для примера...
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-put-PlotOrigin layout (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) (list 10.0 5.0)))
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Mr. Artman от 29-04-2019, 13:54:28
Уважаемые форумчане, не подскажете как заставить этот код работать с нестандартными форматами листов?
К примеру 910х297.
В настройках DWG to PDF настраиваю соответствующий формат, вписываю его в код. Но при попытке печати появляется следующее сообщение:
"Выберите объекты:  ; ошибка: Ошибка Automation. Неверный ввод"
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 29-04-2019, 13:58:08
А в названии, например, кодировка соблюдена? Иногда бывает и такое, что в код попадают английские символы, а в реале они русские.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Mr. Artman от 29-04-2019, 14:35:33
А в названии, например, кодировка соблюдена? Иногда бывает и такое, что в код попадают английские символы, а в реале они русские.

Кодировка соблюдена. Данная ошибка появляется даже при использовании только цифр.
Создается впечатление что проблема в русификации. Работаю в Civil 3D 2017. Русская версия.
Так вот,  обратил внимание на следующую деталь:
При использовании в коде даже стандартного формата - к примеру "ISO_full_bleed_A1_(594.00_x_841.00_MM)" все работает,
Но в случае вставки формата как он отображен непосредственно в AutoCADе - "ISO_без_полей_A1_(594.00_x_841.00_мм)" - вылетает ошибка.
Не подскажете в чем может быть проблема?
Каким-то образом можно посмотреть в файле PC3 что там чему соответствует? ))

И еще дополнительный вопрос. Можно ли заставить программу использовать текущие настройки печати модели/листа?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 29-04-2019, 15:47:41
Надо использовать т.н. "канонические" имена, я так полагаю:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq layout (vla-item (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object))) (getvar "ctab")))
  2. (setq config_names (vlax-safearray->list (vlax-variant-value (vla-getcanonicalmedianames layout))))
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Балиев от 18-09-2021, 18:09:54
День добрый!
Написал скрипт для печати в PDF используя скрипт Крыса. Последняя строка почему-то не выполняется. В чем проблема?
Код - Auto/Visual Lisp [Выбрать]
  1.         (vl-load-com)
  2.     (setq acadObj (vlax-get-acad-object))
  3.     (setq doc (vla-get-ActiveDocument acadObj))
  4.  
  5.         (setq objsToPrint (ssget))
  6.         (setq obj  (vlax-ename->vla-object (ssname objsToPrint 0)))
  7.     (vla-GetBoundingBox obj 'minp 'maxp)
  8.         (setq pmin (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  9.     (vlax-safearray-put-element pmin 0 (vlax-safearray-get-element minp 0))
  10.     (vlax-safearray-put-element pmin 1 (vlax-safearray-get-element minp 1))
  11.         (setq pmax (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  12.     (vlax-safearray-put-element pmax 0 (vlax-safearray-get-element maxp 0))
  13.         (vlax-safearray-put-element pmax 1 (vlax-safearray-get-element maxp 1))
  14.        
  15.     (setq layout (vla-get-activelayout doc))
  16.     (vla-refreshplotdeviceinfo layout)
  17.     (vla-put-configname layout "DWG to PDF.pc3")
  18.     (vla-put-canonicalmedianame layout "ISO_full_bleed_A4_(297.00_x_210.00_MM)")
  19.     (vla-put-centerplot layout :vlax-true)
  20.     (vla-put-plotrotation layout ac90degrees)
  21.     (vla-put-standardscale layout acscaletofit)
  22.     (vla-put-stylesheet layout "acad.ctb")
  23.     (vla-setwindowtoplot layout pmin pmax)
  24.     (vla-put-plottype layout acwindow)
  25.     (vla-regen doc acallviewports)
  26.     (vla-plottofile (vla-get-Plot doc) "D:\\tmp\\tmp")
  27.  

В командном окне почему-то пишет:  :vlax-false

(https://i.postimg.cc/vchCTypb/image.png) (https://postimg.cc/vchCTypb)

Заранее благодарен.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 18-09-2021, 18:14:50
Балиев,
Права на запись есть?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Балиев от 18-09-2021, 18:25:01
Балиев,
Права на запись есть?
Права на запись в папку? Специальных нет, обычные... А этого разве недостаточно?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 18-09-2021, 18:34:32
Достаточно. BACKGROUNDPLOT установлено в 0?
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Балиев от 18-09-2021, 18:41:17
BACKGROUNDPLOT
Установил, но результат тот же...
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Александр Ривилис от 18-09-2021, 18:44:03
Ну тогда пошаговая отладка с проверкой результатов выполнения каждой из функций.
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Алексей Кулик от 19-09-2021, 18:31:02
День добрый!
Написал скрипт для печати в PDF используя скрипт Крыса. Последняя строка почему-то не выполняется. В чем проблема?
Код - Auto/Visual Lisp [Выбрать]
  1.         (vl-load-com)
  2.     (setq acadObj (vlax-get-acad-object))
  3.     (setq doc (vla-get-ActiveDocument acadObj))
  4.  
  5.         (setq objsToPrint (ssget))
  6.         (setq obj  (vlax-ename->vla-object (ssname objsToPrint 0)))
  7.     (vla-GetBoundingBox obj 'minp 'maxp)
  8.         (setq pmin (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  9.     (vlax-safearray-put-element pmin 0 (vlax-safearray-get-element minp 0))
  10.     (vlax-safearray-put-element pmin 1 (vlax-safearray-get-element minp 1))
  11.         (setq pmax (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  12.     (vlax-safearray-put-element pmax 0 (vlax-safearray-get-element maxp 0))
  13.         (vlax-safearray-put-element pmax 1 (vlax-safearray-get-element maxp 1))
  14.        
  15.     (setq layout (vla-get-activelayout doc))
  16.     (vla-refreshplotdeviceinfo layout)
  17.     (vla-put-configname layout "DWG to PDF.pc3")
  18.     (vla-put-canonicalmedianame layout "ISO_full_bleed_A4_(297.00_x_210.00_MM)")
  19.     (vla-put-centerplot layout :vlax-true)
  20.     (vla-put-plotrotation layout ac90degrees)
  21.     (vla-put-standardscale layout acscaletofit)
  22.     (vla-put-stylesheet layout "acad.ctb")
  23.     (vla-setwindowtoplot layout pmin pmax)
  24.     (vla-put-plottype layout acwindow)
  25.     (vla-regen doc acallviewports)
  26.     (vla-plottofile (vla-get-Plot doc) "D:\\tmp\\tmp")
  27.  

В командном окне почему-то пишет:  :vlax-false

(https://i.postimg.cc/vchCTypb/image.png) (https://postimg.cc/vchCTypb)

Заранее благодарен.

Не похоже это на мой код. По крайней мере я такого не помню. Или это другой крыс :)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Балиев от 19-09-2021, 19:11:41
Не похоже это на мой код. По крайней мере я такого не помню. Или это другой крыс
Ну, я его творчески переработал, разумеется. Но начиная с 15-й строки, ну очень на тебя похож.   ;)
Название: Re: Пакетная печать блоков-форматов в PDF на LISP
Отправлено: Балиев от 25-09-2021, 13:16:26
Ну тогда пошаговая отладка с проверкой результатов выполнения каждой из функций.
Хм... А код чего-то взял и заработал... Возможно, все-таки установка BACKGROUNDPLOT в 0 помогла... Ну, или чудо... В любом случае спасибо!