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

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

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

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

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

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 307
  • Карма: 7
    • Advanced software for AutoCAD
  • Skype: Debalance
Off-Topic: показать


Знаковый пост!

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

  • ADN Club
  • ***
  • Сообщений: 240
  • Карма: 18
  • Геодезист
Остаётся порекомендовать тебе:
1) Убедится, что в путях доступа нет dll-файла с таким же именем, но другим содержимым.
2) Скопировать этот dll-файл (а точнее два файла) в каталог рядом с cuix-файлом.
В общем есть таки ограничение  на количество записей в "пути поиска" получается их там не может быть больше 34, и в последних версиях Autodesk умудрился забить весь этот список своими путями, для пользователей особо места не осталось. В ручном режиме я конечно обхитрил его, удалил пару путей явно мною не используемых и добавил свои но не в конце а середину списка.
Но как быть с boundle технологией и нашими ресурсными dll ?

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

  • ADN Club
  • ***
  • Сообщений: 240
  • Карма: 18
  • Геодезист
Скопировать этот dll-файл (а точнее два файла) в каталог рядом с cuix-файлом.
В общем скопировать не проблема, надо подумать ещё как потом обновлять...
Код - Auto/Visual Lisp [Выбрать]
  1. (defun dll_near_cuix (name         bundle_name  /
  2.                       name_cuix    name_dll     name_dll_light
  3.                       R            supp_dir      prog_dir
  4.                      )
  5. ;;;  (dll_near_cuix  "Geo_dev"  "BearDyugin Deviations.bundle")
  6.   (if (>= (atoi (getvar 'ACADVER)) 20)
  7.     (setq
  8.       name_cuix      (strcat name ".cuix")
  9.       name_dll       (strcat name ".dll")
  10.       name_dll_light (strcat name "_light.dll")
  11.       R              "\\R20"
  12.     )
  13.     (setq
  14.       name_cuix (strcat name "_19.cuix")
  15.       name_dll  (strcat name "_19.dll")
  16.       R         "\\R19"
  17.     )
  18.   )
  19.   (if (and
  20.         (not (findfile name_dll))
  21.         (setq supp_dir (findfile name_cuix))
  22.       )
  23.     (progn
  24.       (setq supp_dir (vl-filename-directory supp_dir)
  25.             prog_dir (getenv "programdata")
  26.             prog_dir (strcat
  27.                        prog_dir
  28.                        "\\Autodesk\\ApplicationPlugins\\"
  29.                        bundle_name
  30.                        "\\Contents\\Resources"
  31.                        R
  32.                       )
  33.       )
  34.       (if (setq temp (findfile (strcat prog_dir "\\" name_dll)))
  35.         (vl-file-copy temp (strcat supp_dir "\\" name_dll))
  36.       )
  37.       (if
  38.         (and
  39.           name_dll_light
  40.           (setq temp (findfile (strcat prog_dir "\\" name_dll_light)))
  41.         )
  42.          (vl-file-copy temp (strcat supp_dir "\\" name_dll_light))
  43.       )
  44.     )
  45.   )
  46. )

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

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

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

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

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

  • ADN Club
  • ***
  • Сообщений: 240
  • Карма: 18
  • Геодезист
Ну, теоретически надо выгружать меню, и заменять файлы.
Это кстати неплохо бы делать и при первом добавлении, а то в противном случае иконки появляются только после перезагрузки AutoCAD.
Есть не командный метод перезагрузки меню?
Твой код читал но так и не понял http://autolisp.ru/wp-content/uploads/2013/11/kpblc-menu-update.lsp
Опять же, тогда можно и dll ни куда не копировать? выгрузить меню то что из support, и загрузить то что из boundle :-) Очень я сомневаюсь, что на одном ПК будут работать разные пользователи и при этом ещё полезут в адаптацию...

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

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

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

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

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

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

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

  • ADN Club
  • ***
  • Сообщений: 240
  • Карма: 18
  • Геодезист
Ребята, кто-нибудь может по-русски объяснить чего мне там в ответе написали...
https://forums.autodesk.com/t5/autocad-forum/cuix-file-and-icons-in-the-resource-dll/td-p/7565485#M451

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 307
  • Карма: 7
    • Advanced software for AutoCAD
  • Skype: Debalance
чего мне там в ответе написали...
Похоже чувак ушел от ответа. Сам понимаешь, "EXPERT ELITE" у таких язык подвешен...

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

  • ADN Club
  • ***
  • Сообщений: 240
  • Карма: 18
  • Геодезист
В общем выгружаю командно меню которое загружено из папки support, и загружаю его же командно из папки bundle
перезагружаю AutoCAD и оно опять загружено из support
Как быть? нужно рабочее пространство ещё сохранять?
Нашёл код у Алексея
Код - Auto/Visual Lisp [Выбрать]
  1.  (if (setq wscurrent (getvar "wscurrent"))
  2.         (command "_.wssave" wscurrent "_y")
  3.         )
Вроде сделал так, но эффекта 0

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 758
  • Карма: 114
Вот такой простенький лиспик выдаст перечень загруженных меню и их путей
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. (defun tt (/ lst)
  4.   (vlax-for item (vla-get-menugroups (vlax-get-acad-object))
  5.     (setq lst (cons (cons (vla-get-name item) (vla-get-menufilename item)) lst))
  6.     ) ;_ end of vlax-for
  7.   (vl-sort lst '(lambda (a b) (< (car a) (car b))))
  8.   ) ;_ end of defun

Да, кстати! Посмотри, нет ли у тебя "необработанных" меню - иногда они такие бяки порождают!
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ***
  • Сообщений: 240
  • Карма: 18
  • Геодезист
Примерно так и делаю
Код - Auto/Visual Lisp [Выбрать]
  1. (defun Geo_reload_cuix
  2.        (name bundle_name / name_cuix R supp_dir prog_dir pas)
  3.  
  4.   (vlax-for item
  5.                  (vla-get-MenuGroups
  6.                    (vlax-get-acad-object)
  7.                  )
  8.     (if (eq (vla-get-Name item) name)
  9.       (setq pas (vla-get-menuFileName item))
  10.     )
  11.   )
  12.   (setq R         (if (>= (atoi (getvar 'ACADVER)) 20)
  13.                     "\\R20"
  14.                     "\\R19"
  15.                   )
  16.         prog_dir  (getenv "programdata")
  17.         name_cuix (strcat name ".cuix")
  18.   )
  19.   (if (and
  20.         pas
  21.         (not (wcmatch pas "*ProgramData*"))
  22.         (setq supp_dir (findfile name_cuix))
  23.         (setq temp (findfile (strcat (strcat
  24.                                        prog_dir
  25.                                        "\\Autodesk\\ApplicationPlugins\\"
  26.                                        bundle_name
  27.                                        "\\Contents\\Resources"
  28.                                        R
  29.                                       )
  30.                                      "\\"
  31.                                      name_cuix
  32.                              )
  33.                    )
  34.         )
  35.       )
  36.     (progn
  37.       (command "_.menuunload" name)
  38.       (command "_.menuload" temp)
  39.       (if (setq wscurrent (getvar "wscurrent"))
  40.         (command "_.wssave" wscurrent "_y")
  41.       )
  42.     )
  43.   )
  44. )
Меню загружается то что нужно, т.к. начинают отображаться иконки кнопок, потому что рядом с cuix в bundle лежит ресурсная dll, а рядом с cuix в support нет

Но всё равно это всё полумеры...

Раньше я копировал dll из bundle в suport и всё работало, но потом подумал над обновлением, и решил перезагружать cuix, но когда опять столкнулся с проблемой теперь думаю просто проверять дату dll если она в bundle свежее то обновлять dll в support.

Но эти функции я вешаю проверять при запуске команд, а до того там нет иконок :-(
Пробовал в конце файла сразу вызов функции делать, чтоб типа в момент загрузки, но фиг, она загружается так рано, что AutoCAD ещё не готов ни чего выполнять, в итоге ни чего и не выполняется :-(

При этом когда вручную делаю перезагрузку меню, то всё сохраняется, и перезапуск AutoCAD уже ничего назад не возвращает.

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

  • Administrator
  • *****
  • Сообщений: 758
  • Карма: 114
Возможно, не срабатывает (findfile name_cuix). Я бы добавил удаление старых файлов меню, по принципу:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun geo_reload_cuix (name bundle_name / name_cuix r supp_dir prog_dir pas)
  2.   (setq pas       (menugroup name)
  3.         r         (strcat "\\R" (itoa (atoi (getvar "acadver"))))
  4.         prog_dir  (getenv "programdata")
  5.         name_cuix (strcat name ".cuix")
  6.         ) ;_ end of setq
  7.   (if (and pas
  8.            (not (wcmatch pas "*ProgramData*"))
  9.            (setq supp_dir (findfile name_cuix))
  10.            (setq temp (findfile
  11.                         (strcat (strcat prog_dir "\\Autodesk\\ApplicationPlugins\\" bundle_name "\\Contents\\Resources" r)
  12.                                 "\\"
  13.                                 name_cuix
  14.                                 ) ;_ end of strcat
  15.                         ) ;_ end of findfile
  16.                  ) ;_ end of setq
  17.            ) ;_ end of and
  18.     (progn (command "_.menuunload" name)
  19.            (foreach file (vl-directory-files (vl-filename-directory name) (strcat (vl-filename-base name) ".*") 1)
  20.              (vl-file-delete file)
  21.              ) ;_ end of foreach
  22.            (foreach file (vl-directory-files (vl-filename-directory temp) (strcat (vl-filename-base temp) ".*") 1)
  23.              (if (and (vl-filename-extension file)
  24.                       (wcmatch (vl-string-trim "." (strcase (vl-filename-extension file))) "MN[RC]")
  25.                       ) ;_ end of and
  26.                (vl-file-delete file)
  27.                ) ;_ end of if
  28.              ) ;_ end of foreach
  29.            (command "_.menuload" temp)
  30.            (if (setq wscurrent (getvar "wscurrent"))
  31.              (command "_.wssave" wscurrent "_y")
  32.              ) ;_ end of if
  33.            ) ;_ end of progn
  34.     ) ;_ end of if
  35.   ) ;_ end of defun
Все, что сказано - личное мнение.

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

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