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

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

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Здравствуйте, Максим Маркевич. Можно ли переделать код VBA 16 урока- Пакетная печать блоков-форматов  на LISP?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Здравствуйте, Максим Маркевич. Можно ли переделать код VBA 16 урока- Пакетная печать блоков-форматов  на LISP?
Максим Маркевич не пишет на lisp'е. А в чем смысл этой переделки?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Смысла особого нет. Просто, чтобы установить VBA-редактор нужны права администратора(что проблематично для меня), а LISP-редактор уже есть.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Андрей1986
В любом случае перевод "в лоб" кода с VBA на VisualLisp смысла не имеет, так как напрямую воспользоваться ты им не сможешь и нужно будет переписывать его под себя. Например, в коде Максима подразумевается, что в качестве рамки используется блок с именем "A1" имеющий точку вставки в левом нижнем углу, что размер рамми соответствует формату A1, что печать идёт в PDF на стандартный AutoCAD'овский плоттер, ну и т.д.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
А есть уже созданная тема- Пакетная печать блоков-форматов в PDF  на LISP? Может есть примеры кода, хотя бы для одного формата, напр. А1?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А есть уже созданная тема- Пакетная печать блоков-форматов в PDF  на LISP?
Уже есть - ты в ней. :)
Может есть примеры кода, хотя бы для одного формата, напр. А1?
Кто-нибудь думаю поможет с этим.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
В принципе, переписывать 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.  
« Последнее редактирование: 20-07-2017, 16:43:57 от Алексей Кулик »
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Код сохранил. дал имя. подгрузил через вкладку Управление-Загрузка приложения. Не работает.
нужно присвоить функцию через defun?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А как вызываешь? Надо так:
(poly-by-blocks)Я ж как команду не оформлял.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Путь "c:\Users\evthi\Desktop\Тест" поменял на свой? Кстати должны быть двойные обратные слэши, т.е что-то типа "c:\\Users\\evthi\\Desktop\\Тест"
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Ох, елки, совсем забыл! Исправляюсь...
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Не понял. Как надо в итоге?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Я последний код исправил
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Почему-то не получается вызвать функцию poly-by-blocks?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А как вызываешь? И где - в ком.строке или в своем коде?
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
вызываю в командной строке.
Я так понял, что нужно оформить код, как команду. Типа С: ?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Не хочу дублировать прекрасную статью: https://dwg.ru/pub/9
Все, что сказано - личное мнение.

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

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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Действительно-ПРЕКРАСНАЯ статья. Сенкс.

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
перед (vl-load-com) я ставлю (defun C:<моё имя программы> ). сохраняю ее как лисп файл.
не получается :'(

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Андрей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. Всё!


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Доходит до этого,после выбора блока-

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

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

P.S. если, что. я не специально....

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я еще поменял путь на (poly-plot "C:\Проекты".
В lisp в строке должны быть двойные обратные наклонные, т.е. не (poly-plot "C:\Проекты") а (poly-plot "C:\\Проекты")
« Последнее редактирование: 26-07-2017, 16:28:41 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
 8)
Вызвать команду получается.
Команда: POLY-BY-BLOCKS
Выберите объекты: найдено: 1  (блок с названием А1)
Выберите объекты:
nil
ЧТО ЭТО?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А для примера точно брался файл из темы? К сожалению, как минимум на ближайшие четыре-пять часов я вне сети :(
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
ЧТО ЭТО?
"C:\Проекты" - это каталог или имя файла? Там должно быть имя файла.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
путь, где лежит моя программа?
или, что туда надо прописывать? ???

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
(vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)")

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

после того, как выбираю объекты, пишет- nil

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
после того, как выбираю объекты, пишет- nil
Это в принципе нормально.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
после того, как я выбираю блок, должна сразу идти печать в ПДФ?

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Легко ВАМ- РЫЦАРЯМ, так рассуждать.
Поделитесь тогда, куда таким идти?

После того, как выбрал, пишет найдено: 1. и ничего не происходит.
нажимаю Enter. nil

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Попробовал по-быстрому расписать построчно, что и как происходит в коде
Код - 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.  
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
А вы у себя на автокаде пробовали этот код?
Все работает?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Не успеваю. Работы пока многовато. У предыдущих участников вроде бы работало - иначе бы сразу сказали.

Если появится сегодня время - попробую протестировать
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Спасибо

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
На всякий случай установите BACKGROUNDPLOT в 0: http://help.autodesk.com/view/ACD/2016/RUS/?guid=GUID-713029B7-B5AC-4860-BE2E-74878D418EA4
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Если коротко, то в коде было допущено 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.  
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Упс. У меня все равно проблемы.
Автокад пишет следующее:
Выполняется регенерация модели.
Команда:
<<  Принудительное завершение работы программы  >>
Error: Ошибка Automation. Отсутствует описание.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
И в каком месте ошибка?
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Хмм. Если бы я знал, не донимал бы вас. А у вас работает?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
У меня - да. Для понимания / вычисления, что происходит не так, советую прочитать http://autolisp.ru/2009/09/10/vlide-misc-01/ и http://autolisp.ru/2009/09/12/vlide-misc-02/
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
И в каком месте ошибка?
Похоже здесь:
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-plottofile (vla-get-plot *adoc*) filename)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Так я "от балды" нарисовал прямоугольник, из него создал блок с именем "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
  • *****
  • Сообщений: 1096
  • Карма: 172
Но если будет образец, поковыряюсь по возможности.
Все, что сказано - личное мнение.

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 1096
  • Карма: 172
Без проверки и на бегу: Александр, а зачем апостроф в строке 32?
'(vla-put-stylesheet layout "acad.ctb")
Все, что сказано - личное мнение.

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

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

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

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

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

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

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

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

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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
(if (wcmatch (strcase (vla-get-effectivename ent)) "A1,A1")
Почему имя блока 2 раза прописывается?
А если у меня блок называется Рамка_штамп. Мне нужно 2 раза прописать  "Рамка_штамп,Рамка_штамп"?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Одна "А" - русская, вторая - английская.
Кстати, посмотри в справке - что такое strcase и к чему оно приводит
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
wcmatch-сравнение,
strcase-возвращает строку, в которой все алфавитные символы были преобразованы в верхний или нижний регистр
vla-get-effectivename ent-не понятно.

Дак, если я хочу заменить название блока на Рамка_формат, код можно такой же оставить?
Что-то не получается. nil пишет

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
vla-get-effectivename - получение т.н. "эффективного" имени блока (в т.ч. и динамического)
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Что-то не получается. nil пишет
В каком месте? Покажи свой код
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
(if (wcmatch (strcase (vla-get-effectivename ent)) "Рамка_формат")
или полностью?

Отмечено как Решение Андрей1986 03-08-2017, 08:58:44

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Пусть у блока эффективное имя "Рамка_формат"
(wcmatch (strcase (vla-get-effectivename ent)) "Рамка_формат") -> nil
(wcmatch (strcase (vla-get-effectivename ent)) (strcase "Рамка_формат")) -> t

Сравнение строк происходит с учетом регистра!
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Офигеть. Сработало братва! Сенкс большое!!! Ну ты мозг!

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
А если я хочу добавить другие форматы, мне с какого места добавлять код?

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

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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Код - Auto/Visual Lisp [Выбрать]
  1. [(mapcar (function (lambda (x) (mapcar '+ ins x))) '((0. 0. 0.) (841. 594. 0.)]
  2.  
Это вычисление точек?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Ну да.
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Код - 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.)
так можно сделать?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Так, стоп.
Сделать - можно. Но, во-первых, работать не будет. Во-вторых, что будет возвращаться, если вдруг случится чудо и этот код заработает?
Все, что сказано - личное мнение.

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

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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
 текст песни Алешкина любовь Иванушки International-

Припев:
Как же быть, как быть,
Не могу я это сделать, не могу.
 

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
К сожалению, у меня нет никакой возможности все рассказывать "с нуля".
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не могу я это сделать, не могу.
Значит я был прав с самого начала. Это раздел в котором помогают с написанием программ, а не пишут программу от нуля и до конца под конкретные запросы конкретного заказчика. Значит тебе нужно искать того, кто за тебя напишет программу. С этим вопросом тебе сюда: http://adn-cis.org/forum/index.php?board=38.0
Перед тем как будешь заказывать программу перечитай правила того раздела.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн maratovich

  • ADN OPEN
  • Сообщений: 21
  • Карма: 1
  • Skype: maratovich78
Андрей1986
на одном из дружественных форумах есть тема "Пакетная печать множества рамок (форматов) из пространства модели. " может быть она вам поможет.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, да. Как вариант готовые решения: http://forum.dwg.ru/showthread.php?t=104517
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
У AutoDeska есть программы обучения на LISP?
Николая Николаевича- читаю в процессе.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
У Autodesk наверняка нет. Я бы искал по авторизованным тренинговым центрам (ATC)
Все, что сказано - личное мнение.

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

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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Что можете сказать про учебный центр "Специалист"?
http://www.specialist.ru/course/lisp1

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Что можете сказать про учебный центр "Специалист"?
http://www.specialist.ru/course/lisp1
Говорить нужно не про учебный центр, а про конкретного преподавателя учебного центра.

P.S.: Хотел бы напомнить как у нас называется тема. Всё остальное offtop.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Вопросы по DCL куда писать?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вопросы по DCL куда писать?
Создать новую тему здесь: http://adn-cis.org/forum/index.php?board=7.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Всех с Наступающим Новым Годом!

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Здравствуйте, всем. Почему автокад запоминает последнюю команду...
 

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Ничего не понял. Второй файл абсолютно четко выводится на печать. В чем собственно вопрос?
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Он выводит файл в А4, вместо А3.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Может, проблема в коде, который отвечает за вызов?
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
А если я его загружаю вручную. То всё нормально. В макросах прописана команда. В автозагрузке стоит. Но работает по последней ручной подгрузке.

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Возможно, автоматически подгружается "не та" версия. Проверь.
P.S. Откровенно говоря, стараюсь вообще не использовать StartupSuite - есть более интересные способы загрузки приложений ;)
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Автоматически это как?
Где смотреть?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
В макросах прописана команда. В автозагрузке стоит
Чьи слова? :) Я так понимаю, что каким-то образом все же приложение загружается автоматически. Только загружается "не то и не оттуда". Вполне возможно, что загрузка прописана в StartupSuite (команда _.appload, потом нажать на портфельчик) - надо проверить, откуда код грузится.
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
В портфельчике подгружены. Но не работает...


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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Еще раз - откуда подгружается в порфеле? Чудес не бывает.
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Папку я указываю свою, кнопкой Добавить...

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Из StartupSuite убрать старую версию. Перезапустить ACAD. Снова вызвать _.appload, указать каталог, в котором располагается "нормальная" версия и загрузить ее. Что будет в результате?
При ручной загрузке указывается тот же каталог? Может, все же разница есть?
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
А можете попробовать у себя?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
У меня всего один вопрос - почему в двух разных 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)")
Вот и не срабатывает. Надо функциям давать разные имена или вводить доп.параметры.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Как вариант
Код - 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.  

Хотя я, наверное, делал бы совсем по-другому :)
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 69
  • Карма: 1
Я прописал в каждом файле .lsp  функции poly-plot1 для А1, poly-plot2 для А2 и т.д. Работает. Огонь!!! Спасибо...

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Если название одно и то же, а содержимое разное - то работать не будет.
Все, что сказано - личное мнение.

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

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

Оффлайн Олег Боровой

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Может быть плохо искал, но не нашел как задать смещение 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)))
« Последнее редактирование: 17-10-2018, 00:19:47 от Александр Ривилис »

Оффлайн Mr. Artman

  • ADN OPEN
  • Сообщений: 14
  • Карма: 0
Уважаемые форумчане, не подскажете как заставить этот код работать с нестандартными форматами листов?
К примеру 910х297.
В настройках DWG to PDF настраиваю соответствующий формат, вписываю его в код. Но при попытке печати появляется следующее сообщение:
"Выберите объекты:  ; ошибка: Ошибка Automation. Неверный ввод"

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А в названии, например, кодировка соблюдена? Иногда бывает и такое, что в код попадают английские символы, а в реале они русские.
Все, что сказано - личное мнение.

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

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

Оффлайн Mr. Artman

  • ADN OPEN
  • Сообщений: 14
  • Карма: 0
А в названии, например, кодировка соблюдена? Иногда бывает и такое, что в код попадают английские символы, а в реале они русские.

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

И еще дополнительный вопрос. Можно ли заставить программу использовать текущие настройки печати модели/листа?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Надо использовать т.н. "канонические" имена, я так полагаю:
Код - 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))))
Все, что сказано - личное мнение.

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

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

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
День добрый!
Написал скрипт для печати в 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



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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Балиев,
Права на запись есть?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Балиев,
Права на запись есть?
Права на запись в папку? Специальных нет, обычные... А этого разве недостаточно?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Достаточно. BACKGROUNDPLOT установлено в 0?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
BACKGROUNDPLOT
Установил, но результат тот же...

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
День добрый!
Написал скрипт для печати в 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



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

Не похоже это на мой код. По крайней мере я такого не помню. Или это другой крыс :)
Все, что сказано - личное мнение.

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

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

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Не похоже это на мой код. По крайней мере я такого не помню. Или это другой крыс
Ну, я его творчески переработал, разумеется. Но начиная с 15-й строки, ну очень на тебя похож.   ;)

Оффлайн Балиев

  • ADN Club
  • ***
  • Сообщений: 188
  • Карма: 2
Ну тогда пошаговая отладка с проверкой результатов выполнения каждой из функций.
Хм... А код чего-то взял и заработал... Возможно, все-таки установка BACKGROUNDPLOT в 0 помогла... Ну, или чудо... В любом случае спасибо!