Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Алексей Кулик от 15-05-2018, 22:58:44

Название: Удалить упоминания о незагруженных CUIX
Отправлено: Алексей Кулик от 15-05-2018, 22:58:44
Собственно вопрос: вполне возможна ситуация, когда при загрузке частичных CUIX-файлов эти самые CUIX-файлы на самом деле не грузятся. Ну, например, их просто не существует. Возможно ли средствами LISP вычислить эти незагруженные CUIX? menugroup и (vla-item (vla-get-MenuGroups (vlax-get-acad-object)) <...>) могут возвращать какие-то данные, но никак не ошибки...
Или тут только один вариант - проверять элемент, проверять его файл меню? Но ведь файл меню может быть и поврежден (и, следовательно, не загружен)?
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Александр Ривилис от 15-05-2018, 23:02:40
вполне возможна ситуация, когда при загрузке частичных CUIX-файлов эти самые CUIX-файлы на самом деле не грузятся. Ну, например, их просто не существует. Возможно ли средствами LISP вычислить эти незагруженные CUIX?
Ну их в этом случае в списке MenuGroups быть не должно. Или ты утверждаешь обратное? Честно говоря я с таким не сталкивался.
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Алексей Кулик от 15-05-2018, 23:28:01
То есть ты предлагаешь сравнивать menugroup и элементы vla-get-menugroups? Попробую ;)
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Александр Ривилис от 15-05-2018, 23:33:31
Я видимо не понял твой вопрос. Ты имеешь в виду вычислить cui(x)-файл, который нельзя загрузить в AutoCAD? Если да, то такой вряд ли можно найти, а тем более средствами VisualLisp. Но если он не загружается по какой-либо причине, то его menugroup не должно быть в menugroups.
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Алексей Кулик от 15-05-2018, 23:51:29
Не столько "нельзя", сколько "не удалось". В любом случае - "прямщас" я уже спать ;)
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Алексей Кулик от 16-05-2018, 06:45:57
Во, вспомнил подробности.
Для выделенных частичных меню возвращается:
Код - Auto/Visual Lisp [Выбрать]
  1. _$ (menugroup "pik-industry-cad")
  2. nil
  3. _$
  4. _$ (vla-item (vla-get-MenuGroups (vlax-get-acad-object)) "pik-industry-cad")
  5. ; error: Automation Error. Invalid argument pik-industry-cad in Item
При этом загрузить их не удается:
Код - Auto/Visual Lisp [Выбрать]
  1. _$ (setq path "d:\\tmp\\pik-industry-cad.cuix")
  2. "d:\\tmp\\pik-industry-cad.cuix"
  3. _$ (findfile path)
  4. "D:\\tmp\\pik-industry-cad.cuix"
  5. _$ (command-s "_.menuload" path)
  6. nil
  7. _$ (vla-item (vla-get-MenuGroups (vlax-get-acad-object)) "pik-industry-cad")
  8. ; error: Automation Error. Invalid argument pik-industry-cad in Item
  9. _1$
  10. ; quit after error
  11. _$ (menugroup "pik-industry-cad")
  12. nil
После перезагрузки частичные меню все еще помечены как unresolved. Их можно вручную удалить из списка частичных меню - и после этого загрузка выполняется вполне корректно.
Но мне-то хочется сделать это программно ;) Возможно ли это выполнить лиспом?
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Александр Ривилис от 16-05-2018, 11:32:50
Возможно ли это выполнить лиспом?
Лиспом думаю что нет. Только через .NET
Хотя я так и не могу понять почему возникает эта ошибка, если меню нормальное. А то что оно нормальное говорит тот факт, что ты его потом нормально загружаешь.
Цитировать
; error: Automation Error. Invalid argument pik-industry-cad in Item
Может попробовать вместо
Код - Text [Выбрать]
  1. (command-s "_.menuload" path)
использовать:
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-Load (vla-get-MenuGroups (vlax-get-acad-object)) path)
?
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Александр Ривилис от 16-05-2018, 11:50:56
Список частичных (Partial) меню содержится в cuix-файле в Header.cui
Можно конечно как-то вытащить его из cuix-файла (это фактически zip-файл), покорректировать (как xml-файл), засунуть обратно и перезагрузить. Но мне кажется, что на лисп это будет достаточно сложно. На .NET это реализуется через AcCui.dll - пространство имён Autodesk.AutoCAD.Customization.
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Алексей Кулик от 16-05-2018, 20:41:50
Файл мог быть удален (по разным причинам) при выключенном ACAD'e. Соответственно при следующей загрузке ACAD'a получаем подобное сообщение.
За намек спасибо, буду разбираться :)
Название: Re: Удалить упоминания о незагруженных CUIX
Отправлено: Александр Ривилис от 16-05-2018, 20:44:36
Файл мог быть удален (по разным причинам) при выключенном ACAD'e. Соответственно при следующей загрузке ACAD'a получаем подобное сообщение.
Да. Именно таким способом я у себя и получил картинку, аналогичную твоей.