Ошибка при вызове (vla-put-canonicalmedianame)

Автор Тема: Ошибка при вызове (vla-put-canonicalmedianame)  (Прочитано 8884 раз)

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

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Доброго времени! заранее прошу прощения за то, что вклинился в тему, но со схожей проблемой новую создавать нет смысла.
в задаче поменять настройки параметров листов, и по описанному коду по сути и теории все понятно. решая данную задачу, столкнулся с тем,
что  метод (vla-put-canonicalmedianame layout "ISO_full_bleed_A1_(594.00_x_841.00_MM)") выдает ошибку Automation. данная проблема как я понял тут тоже поднималась Mr. Artman, и Алексей Кулик, на нее отвечал. но к сожалению даже при использовании канонического имени из списка, остается та же проблема.
излазил много русско-  и англоязычных ресурсов, много всякого предлагают, (в  том числе и Ваши комментарии встречал): заменить пробелы подчеркиванием, проверить раскладку и прочее,
 связанное с неправильным заданием ИМЕНИ формата. однако выбирая даже самые простые варианты , вроде A4 - А в  данном случае пробовали
на рус. и на англ. раскладке. все ту же ошибку выдает. все остальные методы срабатывают.
в русскоязычном пространстве не вижу больше вариантов куда и к кому обратиться, так как на этом форуме самая большая концентрация "знакомых имен",
пользуясь советами которых, пишу лиспы как могу . так как прямого ответа на поставленный вопрос не нашел решил обратиться за мнение общественности..
имя формата "ISO_full_bleed_A1_(594.00_x_841.00_MM)" взято из Вашего примера и не несет смысловой нагрузки. Пытаюсь поменять на
"A3_NXP_Альбомная", но повторюсь, что даже на самых простых именах типа A3 никак не получается сменить формат лиспом.
непосредственно моя задача еще проще звучит: имея в  чертеже N исходных листов, каждому задать DWG To PDF.pc3 и один заранее заданный формат.
проблема возникает даже при самом простом варианте , когда имеем текущий лист, и пытаемся на нем сменить формат и принтер. Принтер меняет, на формате - ошибка..
в DWG To PDF.pc3 данные форматы прописаны.

код:

Код - Auto/Visual Lisp [Выбрать]
  1. (defun C:TEST()
  2.  
  3.   (vl-load-com)
  4.    
  5.   (setq ActiveDoc (vla-get-activedocument (vlax-get-acad-object)))
  6.   (setq layout (vla-get-activelayout ActiveDoc))
  7.   (vla-refreshplotdeviceinfo layout)
  8.   (vla-put-configname layout "DWG To PDF.pc3")
  9.   (vla-put-canonicalmedianame layout "A3_NXP_Альбомная") ;; Ошибка Automation
  10.   ;; при использовании канонического имени из списка та же ошибка.
  11.   ;; в идеале надо все же подставить свой формат
  12. )
« Последнее редактирование: 27-01-2020, 14:09:56 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка при вызове (vla-put-canonicalmedianame)
« Ответ #1 : 27-01-2020, 14:13:45 »
d_Spam_b,
Приветствую на форуме!
Какая версия AutoCAD и установлены ли все обновления?
P.S.: Как следует форматировать код у нас на форуме написано у меня в подписи. Прошу соблюдать это правило!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка при вызове (vla-put-canonicalmedianame)
« Ответ #2 : 27-01-2020, 14:41:17 »
Попробуй этот код:
Код - Auto/Visual Lisp [Выбрать]
  1. ;;;
  2. ;;;  Проверяем установку CanonicalMediaName
  3. ;;;
  4. (defun C:Test_CanonicalMediaName ( / acadObj doc Layout x)
  5.     (vl-load-com)
  6.     (setq acadObj (vlax-get-acad-object))
  7.     (setq doc (vla-get-ActiveDocument acadObj))
  8.  
  9.     (setq Layout (vla-get-Layout (vla-get-ModelSpace doc)))
  10.        
  11.     (vla-put-configname layout "DWG To PDF.pc3")
  12.    
  13.     (vla-RefreshPlotDeviceInfo Layout)
  14.    
  15.     (setq mediaNames (vlax-variant-value (vla-GetCanonicalMediaNames Layout)))
  16.  
  17.     (setq x 0) ;; Поочередно устанавливаем CanonicalMediaName
  18.     (while (>= (vlax-safearray-get-u-bound mediaNames 1) x)
  19.         (print (vlax-safearray-get-element mediaNames x))
  20.         (vla-put-CanonicalMediaName Layout (vlax-safearray-get-element mediaNames x))
  21.         (setq x (1+ x))
  22.     )
  23.    
  24. )



Похоже, что проблема в порядке строк:
Код - Auto/Visual Lisp [Выбрать]
  1.   (vla-refreshplotdeviceinfo layout)
  2.   (vla-put-configname layout "DWG To PDF.pc3")
Сначала нужно
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-put-configname layout "DWG To PDF.pc3")
а затем
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-refreshplotdeviceinfo layout)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Re: Ошибка при вызове (vla-put-canonicalmedianame)
« Ответ #3 : 27-01-2020, 14:58:57 »
спасибо за дружелюбное, а главное оперативное приветствие. решился таки, так сказать, "вступить в контакт с цивилизацией".
по привычке все кусочки ваших кодов во всех просторах интернета собирал и разбирал самостоятельно
насколько это было возможно. куда не зайди, чего не коснись - ОТВЕТЫ на вопросы это, в основном,
 Алексей Кулик, Александр Ривилис, VVA (если не ошибаюсь),  Mac LEE , заветные книги Полищука и справка по автокаду.
это не исчерпывающий список , конечно, за что прошу прощения у остальных.. но ВАМ ВСЕМ - мое почтение и благодарность!!

по делу - ACAD 16, со всеми обновлениями, которые известны нашим системщиками. они стараются следят за этим.

если пробежать по текущему листу этим способом ->

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

то получим длинный список со стандартными именами форматов в виде привычного имени и нестандартными, записанными в виде:

UserDefinedMetric (420.00 x 297.00мм)

и, в принципе, попробовав подсунуть ему это имя , он вроде как проглотил.. даже со всеми пробелами..
т.е., вроде как, проблема как будто решилась. и вроде даже начал стандартные форматы "глотать", повторюсь, до этого не глотал.
странно... не буду делать окончательного вывода, сечайс буду тестить разное, потом посмотрим
насколько это был просто глюк(не хотелось бы так думать, полдня ушло на правку)

пока печатал ответ, несколько раз прогнал, пока без сбоев.
обязательно применять в конце (vla-regen ActiveDoc acallviewports) для того , чтобы регенерировалось все , что наприменяли в коде..

в итоге заработала вот такая конструкция

Код - Auto/Visual Lisp [Выбрать]
  1. (defun C:TEST()
  2.  
  3.   (vl-load-com)
  4.    
  5.   (setq ActiveDoc (vla-get-activedocument (vlax-get-acad-object)))
  6.  
  7.   (setq layout (vla-get-activelayout ActiveDoc))
  8.   (vla-refreshplotdeviceinfo layout)
  9.   (vla-put-configname layout "DWG To PDF.pc3")  
  10.   (vla-put-canonicalmedianame layout "UserDefinedMetric (420.00 x 297.00ММ)");"A3_NXP")
  11.   (vla-regen ActiveDoc acallviewports)
  12.   (princ)
  13. )

данная конструкция обязательно обрастет чем-то большим. :)

СПАСИБО ВСЕМ!

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Ошибка при вызове (vla-put-canonicalmedianame)
« Ответ #4 : 27-01-2020, 15:04:55 »
d_Spam_b,
Еще раз. Сначала (vla-put-configname layout "DWG To PDF.pc3")  , а затем (vla-refreshplotdeviceinfo layout)
У тебя заработало, потому что уже в этом листе было установлено "DWG To PDF.pc3".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Re: Ошибка при вызове (vla-put-canonicalmedianame)
« Ответ #5 : 27-01-2020, 15:34:29 »
Принял. Спасибо!.
Не там первый ответ опубликовал, поэтому не видел Вашего.