Создание и интеграция Help файла с меню (лентой) Autocad

Автор Тема: Создание и интеграция Help файла с меню (лентой) Autocad  (Прочитано 33699 раз)

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

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

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Из функции сделать команду и на нее уже "вешать" вызов справки. Можно и так:
^C^C^P(defun c:tmp() (afxy));(setfunhelp "tmp" <...> <...>);tmp;У меня по такому принципу много всякого построено - работает без вопросов
Не вариант. Прозрачные функции, должны вызываться внутри других команд на getpoint() и т.п. Обычными командами их не заменишь. Даже без ^C^C впереди макроса F1-справка уже работать не будет. Думаю сделать это невозможно.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Думаю сделать это невозможно.
Значит это должно быть сделано в mnl-файле. А макрос должен содержать только команды.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Значит это должно быть сделано в mnl-файле. А макрос должен содержать только команды.
Со вторым разобрались, а первое предложение для Автодеска? F1 у них по своей сути только для команд, а не для функций и т.п. Как можно просто в mnl это сделать не представляю. У Автодеска эта тема не проработана до конца.   

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
F1 у них по своей сути только для команд
Именно так и никак иначе. Стандарт макросов от Autodesk для AutoCAD - это команды. Попробуй найти в стандартных cuix-файлах макросы в виде lisp-функций.
В mnl-файле ты можешь оформить свои функции в виде команд, как показал Алексей Кулик. Альтернативный вариант - использование функции (vlax-add-cmd): http://help.autodesk.com/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-42392DA4-4A2B-4D34-AA7B-A5ACAF727E54.htm
А в меню будут только команды. Если перед тобой стоит цель сделать так, чтобы по F1 в Ленте вызывалась твоя справка, то это единственный способ.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
В mnl-файле ты можешь оформить свои функции в виде команд, как показал Алексей Кулик. Альтернативный вариант - использование функции (vlax-add-cmd): http://help.autodesk.com/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-42392DA4-4A2B-4D34-AA7B-A5ACAF727E54.htmА в меню будут только команды. Если перед тобой стоит цель сделать так, чтобы по F1 в Ленте вызывалась твоя справка, то это единственный способ.
Это не решение. Сама функция как прозрачная уже работать не будет как команда с флагом прозрачности. При этом F1 вызываться будет это понятно, но команда будет нерабочей - не будет работать внутри другой команды.

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

  • Administrator
  • *****
  • Сообщений: 1116
  • Карма: 173
Виталий, а кто мешает оформить примерно следующим образом (говорю про lisp):
(defun func_name() <...>)

(defun func_name2()
  <...>
  (func_name)
  <...>
  )

(defun c:cmd-from-menu()
  (func_name)
  )
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Виталий
Смотри внимательно: https://screencast.autodesk.com/main/details/c55581fc-d818-4285-ad65-6f5e566a0911
Вся хитрость в mnl-файле (а именно в том, что имя функции и имя команды совпадают):
Код - Auto/Visual Lisp [Выбрать]
  1. (progn
  2.   (setfunhelp "C:TEST1" "C:/TEST_CHM/TEST_CHM.CHM" "TEST1")
  3.   (setfunhelp "C:TEST2" "C:/TEST_CHM/TEST_CHM.CHM" "TEST2")
  4.   (setfunhelp "C:TEST3" "C:/TEST_CHM/TEST_CHM.CHM" "TEST3")
  5.   (princ)
  6. )
  7. (defun C:Test1 (/)
  8.   ;; Тут может быть вообще всё что угодно
  9. )
  10. (defun Test1 (/ p ang dist)
  11.   (initget 3) (setq p (getpoint "\nУкажите базовую точку: "))
  12.   (initget 3) (setq ang (getangle p "\nУкажите направление: "))
  13.   (initget 3) (setq dist (getdist p "\nУкажите расстояние: "))
  14.   (polar p ang dist)
  15. )
  16. (defun C:Test2 (/)
  17.   (alert "TEST2: Нажмите F1: ")
  18. )
  19. (defun C:Test3 (/)
  20.   (entsel "\nTEST3: Выберите примитив или нажмите F1: ")
  21. )
Ну и понятно, что если ты нажмешь F1 во время выполнения основной команды, то справка будет по ней, а не по твоей функции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
А вот так будет для прозрачной команды 'TEST2:
Код - Auto/Visual Lisp [Выбрать]
  1. (progn
  2.   (setfunhelp "C:TEST1" "C:/TEST_CHM/TEST_CHM.CHM" "TEST1")
  3.   (setfunhelp "C:TEST2" "C:/TEST_CHM/TEST_CHM.CHM" "TEST2")
  4.   (setfunhelp "C:TEST3" "C:/TEST_CHM/TEST_CHM.CHM" "TEST3")
  5.   (princ)
  6. )
  7. (defun C:Test1 (/)
  8.   (Test1)
  9. )
  10. (defun Test1 (/ p ang dist)
  11.   (initget 3) (setq p (getpoint "\nУкажите базовую точку: "))
  12.   (initget 3) (setq ang (getangle p "\nУкажите направление: "))
  13.   (initget 3) (setq dist (getdist p "\nУкажите расстояние: "))
  14.   (polar p ang dist)
  15. )
  16. (defun C:Test2 ( / )
  17.   (initget 3) (setq p (getpoint "\nУкажите базовую точку: "))
  18.   (initget 3) (setq ang (getangle p "\nУкажите направление: "))
  19.   (initget 3) (setq dist (getdist p "\nУкажите расстояние: "))
  20.   (polar p ang dist)
  21. )
  22. (defun C:Test3 (/)
  23.   (entsel "\nTEST3: Выберите примитив или нажмите F1: ")
  24. )
  25.  

Так это выглядит: https://screencast.autodesk.com/main/details/193380d1-1bb0-4b7a-823f-9fe57af043f8
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Вся хитрость в mnl-файле (а именно в том, что имя функции и имя команды совпадают):
Спасибо, получилось, отталкиваясь от этой хитрости, но не чисто как написали, не без новых нюансов. Без ваших советов никогда бы не разобрался, оставил бы как есть. Но радости мало в виду того, что ни мне ни моим пользователям Справка не нужна. Приходится делать это ради требования Автодеска.  Это ему все нужно, т.е. была документация на PDF, есть уже Help .chm, связь всех пунктов меню со справкой через F1, подсказки к каждому пункту (были), может еще что нужно. Все это дублируется, передублируется, а в реалии для многих команд достаточно подсказки или разок взглянуть на документацию. Времени жалко на такое. При этом на основе последнего опыта убежден, что система связки пунктов меню со справкой через F1 очень неудачная, неоднозначная и запутанная. Посоветовал бы Автодеску разобраться с кучей непонятно для чего полей у каждой команды/пункта в cuix. Достаточно было одного: "Код элемента", например и не связываться с макросами, которые могут быть любыми и что на каждый вариант городить новый огород?
В прилагаемой картинке показано поле имеющее смысл, думаю, на тот случай когда макрос не  команда, а что-то другое. 

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Это ему все нужно
А я почему-то решил, что это вам нужно чтобы приложение попало в Магазин Приложений Autodesk. Или я не прав? ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
А я почему-то решил, что это вам нужно чтобы приложение попало в Магазин Приложений Autodesk. Или я не прав?
Все верно, чтобы попасть в Магазин. Процесс не простой! Если попадет, дальше буду анализировать "стоит ли овчинка выделки".