Пакетная печать блоков-форматов в PDF на LISP

Автор Тема: Пакетная печать блоков-форматов в PDF на LISP  (Прочитано 74382 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Ну, у меня сработало, насколько я помню.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Андрей1986Автор темы

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Алексей, у меня заработало.  :o. КРУТОБЛ. Я аж чуть не расплакался от счастья!
Но почему то выводит пустой лист. Можете пример блока скинуть какой-нибудь для сравнения?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Так я "от балды" нарисовал прямоугольник, из него создал блок с именем "a1" и запустил команду. Все...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Так я "от балды" нарисовал прямоугольник, из него создал блок с именем "a1" и запустил команду. Все...
Леша. Там кажется еще координаты нужно преобразовать из WCS (или UCS) в DCS: http://adn-cis.org/pechat-granicz-okna-pri-pomoshhi-vba.html
Т.е. (trans pt 0 2) или (trans pt 1 2)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей1986Автор темы

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Почему-то ПДФ файл создается пустой. Без моего выделенного блока.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Почему-то ПДФ файл создается пустой. Без моего выделенного блока.
Выложи чертеж на котором проверяешь, чтобы Алексей мог проверить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Так я "от балды" нарисовал прямоугольник, из него создал блок с именем "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 (насколько я помню) :) Поставленную задачу и решал.
Но, если честно, сугубо ИМХО: подобный подход не самое лучшее. Уж проще использовать публикацию или подшивки и листы.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Но если будет образец, поковыряюсь по возможности.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Андрей1986Автор темы

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
мой блок.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Во-первых, там два блока (один над другим). Во-вторых, точка вставки блока должна совпадать с левым нижним углом блока, а у тебя она непонятно где.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я позволил себе чуть исправить код:

Код - 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.  

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

Результат:
« Последнее редактирование: 01-08-2017, 10:37:58 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Без проверки и на бегу: Александр, а зачем апостроф в строке 32?
'(vla-put-stylesheet layout "acad.ctb")
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Интересный вопрос. :) Там должна была быть точка с запятой (т.е. комментарий).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Понял :) Сам подобное допускаю, когда с языка на язык скачу :)
Off-Topic: показать
Писал тут VBA-код под Outlook, так вместо ":" в половине случаев ставил ";" из C# :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Теперь осталось понять почему оно нормально отработало...

P.S.: Код подправил.
« Последнее редактирование: 01-08-2017, 10:37:29 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение