Cuix созданный в AutoCAD 2016 не хочет открываться в AutoCAD 2014

Автор Тема: Cuix созданный в AutoCAD 2016 не хочет открываться в AutoCAD 2014  (Прочитано 69783 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Пока не забыл: для обновления ресурсной dll необходимо будет выгружать cuix, удалять файлы mn[rc], и только потом выполнять обновление файлов и загрузку меню.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Я бы добавил удаление старых файлов меню
Пока не проверял, но я думаю AutoCAD их опять туда вернёт.
Не совсем понятно как эта bundle технология работает, запускается AutoCAD, заглядывает в C:\ProgramData\Autodesk\ApplicationPlugins читает там все PackageContents.xml во всех bundle, и если не находит cuix в support, то копирует его туда, и уже от туда загружает в AutoCAD
Так что вернусь к копированию dll, и при этом перезагрузкой cuix, как ты позже заметил.

Вопрос, как это сделать без вмешательства пользователя? Ну т.е. сегодня, он у меня должен сначала увидеть, вопросики вместо иконок, догадаться нажать на одну из них, тогда при запуске команды я проверяю, как дела с Cuix и при необходимости копирую\обновляю их...

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

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

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Если у тебя лисповое приложение, то прямо при загрузке его и выполняй проверку меню, достаточно сделать самовызов функции.
Я так делал, ни чего не вышло. То ли из-за использование командного метода, то ли ещё что-то. Они загружаются один за одним из этих Bundle, и не ждут их выполнение.

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Попробуй:
1. Выгружать через vla-unload
2. Использовать command-s вместо command
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
В общем командный метод не работетет
При использовании command выдаёт вот это:
Цитировать
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
Причём почему-то вместо одного раза, аж 5 раз.

При использовании command-s получаем вот это:
Цитировать
; ошибка: Неизвестная ошибка (command-s).

С Vla всё получилось, нашёл ещё статью, там узнал как не только выгружать но и загружать http://adn-cis.org/basemenu-autocad.html
Но почему-то вот на такое ругается, говорит нет у документа такого параметра как МенюГруппс
Код - Auto/Visual Lisp [Выбрать]
  1.  (vla-load (vla-get-menugroups
  2.                           (vla-get-activedocument (vlax-get-acad-object))
  3.                           ) ;_ end of vla-get-menugroups
  4.                        "бла-бла-бла-меню"
  5.                         :vlax-false
  6.                         )
А вот так вполне работает
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-load (vla-get-menugroups
  2.                            (vlax-get-acad-object))                          
  3.                         "бла-бла-бла-меню"
  4.                         :vlax-false
  5.                         )
Не совсем понял про третий параметр  :vlax-false из статьи предположил что для основного меню он  :vlax-true, для частичного  :vlax-false правильно?


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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Проблема в том, что при программной загрузке меню лента не появляется. А с лентой лиспом работать невозможно (насколько я знаю). Поэтому пришлось использовать именно командные методы.
За command-s приношу извинения, я просто не помню, с какой версии оно появилось.
То, что срабатывает "аж 5 раз", надо смотреть, что и откуда вызывается. Я бы проходил пошагово по всему приложению и выяснял, почему так все срабатывает.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
За command-s приношу извинения, я просто не помню, с какой версии оно появилось.
Да не, я в 2018 проверяю, это какой-то прикол с этой bundle технологией.
т.е. vla - работает, а vl-cmdf\command\command-s - нет.
Я всё таки склоняюсь к тому, что загрузка происходит слишком рано, и AutoCAD ещё либо не готов к командным методам, либо специально их отвергает на этом этапе.
« Последнее редактирование: 03-04-2018, 12:33:03 от BearDyugin »

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
В общем получилось вот так:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun copy_dll_to_cuix (name         bundle_name     /
  2.                       get_dat         name_cuix       name_dll
  3.                       name_dll_light  R               file_cuix
  4.                       supp_dir        prog_dir
  5.                       dll_light_file_prog             dll_file_prog
  6.                       dll_file_supp
  7.                      )
  8.   (defun get_dat (file /)
  9.     (setq dat (vl-file-systime file))
  10.     (+ (* (car dat) 365) (* (cadr dat) 30) (cadddr dat))
  11.   )
  12.   (setq
  13.     name_cuix      (strcat name ".cuix")
  14.     name_dll       (strcat name ".dll")
  15.     name_dll_light (strcat name "_light.dll")
  16.     R              (if (>= (atoi (getvar 'ACADVER)) 20)
  17.                      "\\R20"
  18.                      "\\R19"
  19.                    )
  20.   )
  21.   (if
  22.     (and
  23.       (setq
  24.         file_cuix (findfile name_cuix)
  25.       )
  26.       (setq supp_dir (vl-filename-directory file_cuix)
  27.             prog_dir (getenv "programdata")
  28.             prog_dir (strcat
  29.                        prog_dir
  30.                        "\\Autodesk\\ApplicationPlugins\\"
  31.                        bundle_name
  32.                        "\\Contents\\Resources"
  33.                        R
  34.                       )
  35.             dll_light_file_prog
  36.              (findfile
  37.                (strcat prog_dir "\\" name_dll_light)
  38.              )
  39.             dll_file_prog
  40.              (findfile (strcat prog_dir "\\" name_dll))
  41.       )
  42.       (or
  43.         (not (setq dll_file_supp
  44.                     (findfile (strcat supp_dir "\\" name_dll))
  45.              )
  46.         )
  47.         (< (get_dat dll_file_supp) (get_dat dll_file_prog))
  48.       )
  49.     )
  50.      (progn
  51.        (vl-file-copy dll_file_prog (strcat supp_dir "\\" name_dll))
  52.        (if
  53.          dll_light_file_prog
  54.           (vl-file-copy
  55.             dll_light_file_prog
  56.             (strcat supp_dir "\\" name_dll_light)
  57.           )
  58.        )
  59.        (vla-unload
  60.          (vla-item (vla-get-MenuGroups (vlax-get-acad-object)) name)
  61.        )
  62.        (vla-load (vla-get-menugroups
  63.                    (vlax-get-acad-object)
  64.                  )
  65.                  file_cuix
  66.                  :vlax-false
  67.        )
  68.      )
  69.   )
  70. )
Конечно очень мало вероятно, что найдётся ещё кто-нибудь использующий Lisp, технологию bundle, и ресурсные dll с иконками для файлов адаптации одновременно  :D

Всем спасибо!

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
В общем есть таки ограничение  на количество записей в "пути поиска" получается их там не может быть больше 34
А откуда такая информация?





Команда: (findfile "SupFoldTest.lsp")
"D:\\acadsupport\\новая папка (15)\\SupFoldTest.lsp"

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Цитата: BearDyugin от 13-11-2017, 05:42:04

    В общем есть таки ограничение  на количество записей в "пути поиска" получается их там не может быть больше 34

А откуда такая информация?
Мне тоже кажется, что это ерунда. Скорее есть ограничение на суммарную длину "пути поиска".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Скорее есть ограничение на суммарную длину "пути поиска".
Добавил ещё 35 путей подлиннее (всего теперь их 71):



Закрыл-открыл AutoCAD, проверил - работают:
Команда: (findfile "SupFoldTest.lsp")
"D:\\very long folder name for test\\very long folder name for test level 1\\very long folder name for test level 2\\very long folder name for test level 3\\very long folder name for test level 4\\новая папка (35)\\SupFoldTest.lsp"
Дальше вручную проверять уже неинтересно. Надо уже программу писать, чтобы она создавала новые пути, пока не случится какой-нибудь фатал.
В общем, если и есть какой-то лимит на записи, то его достигнуть непросто.

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

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

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
ну и от приложений сторонних разработчиков...
А это как может повлиять?

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Если я правильно помню, то пути поиска хранятся в реестре, в переменной окружения "ACAD" (разделенные символом ";"). Соответственно какую длину строки выдержит реестр - такую и выдержит. Ограничение не в количестве путей, а в их суммарной длине.
Все, что сказано - личное мнение.

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

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