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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 60
  • Карма: 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
  • *****
  • Сообщений: 950
  • Карма: 155
Так, стоп.
Сделать - можно. Но, во-первых, работать не будет. Во-вторых, что будет возвращаться, если вдруг случится чудо и этот код заработает?
Все, что сказано - личное мнение.

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

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

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

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