Создание горячих клавиш для команд отсутствующих в Адаптации

Автор Тема: Создание горячих клавиш для команд отсутствующих в Адаптации  (Прочитано 8325 раз)

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

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

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Здравствуйте, прошу помочь в создании горячих клавиш команд графического интерфейса, которые невозможно присвоить стандартным способом (Инструменты-Адаптация-Клавиатура)-их там попросту нет.
1.   В открытой сборке ПКМ на входящих детали или узле (контекстное меню)-Открыть (входящий компонент).
2.   В открытой сборке ПКМ на массиве (контекстное меню)-Правка (Редактирование массива компонентов).
Как я понял это вроде бы возможно реализовать через макрос, но сам не владею программированием, прошу хотя бы общую картину решения подсказать или прототип кода.

Autodesk Inventor 2021


Отмечено как Решение Sektor 05-02-2023, 12:09:39

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Можно сделать свою команду, вот здесь описано как, только там на VB.NET и C#
https://drive.google.com/file/d/1hfJ4zOdmpxhVSI6EiRGeNm_usAlvPCye/view
эта команда должна появится в списках настройки интерфейса
и в своей команде вызывать открытие компонента
В низу манула есть пример как отловить название встроенных команд, может там сразу есть готовая команда.
А если нет то надо через методы вызывать открытие.

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

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Большое вам спасибо за все!
Так как очень далек от программирования, разбирался всю неделю. Установил VS2019 и у меня получилось запустить приложение из нижней части вашего мануала на VB.net и узнать названия нужных мне встроенных команд: AssemblyOpenComponentCmd (для открытия входящего в сборку компонента) и AssemblyEditComponentPatternCtxCmd (для редактирования массива компонентов в сборке).
Из верхней части мануала также получилось создать свою новую команду в списке Инструменты-Адаптация-Клавиатура. Но я не понимаю, что писать в той части манула где "ВАШ ПРОГРАММНЫЙ КОД". То есть как мне в коде вызвать запуск AssemblyOpenComponentCmd?

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Я так понимаю нужно через свою команду вызвать нужную вам команду:
invApp.CommandManager.ControlDefinitions("AssemblyOpenComponentCmd").Execute()

Вот тут кстати все мои мануалы для начинающих
https://mihakazakov.wixsite.com/inventor-api/nachinayushim

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

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Да, все работает! Спасибо вам еще раз! Осталось теперь еще все это как АддИн оформить. Буду разбираться дальше

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

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Здравствуйте, вынужден просить помощи снова. У меня не получается перевести код из консольного приложения в форму Адд-ин. Установил SDK от Inventor 2021 и использую готовый шаблон VB Addin. Еще доустановил .Net Framework 4.8.
Как я понял функция Function getInventorApplication в Аддине не требуется, так как надстройка уже имеет доступ к объекту Application. Поэтому эту функцию я из кода убрал. Упаковка в модуль тоже не требуется, как и упаковка в процедуру Sub Main(). Эту часть кода я добавить в процедуру Public Sub Activate:

Извините, вам запрещён просмотр содержимого спойлеров.

Поместил подпроцедуру Sub MyCommand_OnExecute в модуль Module Globals:

Извините, вам запрещён просмотр содержимого спойлеров.

В итоге приложение компилируется, и запускается на отладку, но результата в самом Инвенторе никакого нет, даже дополнительные команды в Адаптации не создаются. Аддин автоматически определяется Инвентором, но если при первом запуске снять галочку Блокировать и поставить остальные две, то при следующем запуске Инвентора галочка Загрузка будет отжата. Сориентируйте, пожалуйста, какие правки по коду надо сделать или может настройки по  проекту VB. Прочитал ваше руководство по созданию Аддина, но в силу своей компетенции решения там не нашел. Галочка Сделать видимой сборку по COM стоит.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Надо посмотреть какой фреймворк поддерживает 2021 инвентор, это прописано в фале
C:\Program Files\Autodesk\Inventor 2023\Bin\Inventor.exe.config
Откройте этот файл блокнотом, там есть строчка ближе к концу, у меня на Инвенторе 2023 такая:
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
Я думаю Инвентор 2021 не поддержививает фреймворк 4.8, нужно переопределить фреймворк в Вижуал Студио.
Это конечно одна из проблем, которая может не давать запускаться.
Так же нужно убедится, что dll компилируется под 64 бита, показан правильный путь к dll. И там еще посмотреть в свойствах на библиотеку типов, что бы не включались используемые типы в саму dll (я об этом везде писал). VB NET вроде по умолчанию однопоточный, поэтому проблем быть не должно.

Да действительно процедура Sub Main для эддина не нужна, там свой интерфейс реализуется как точка входа, и ссылка на инвентор передается в первую функцию интерфейса автоматом самим инвентором.

А вот пользоваться глобальными переменными - это дурной тон считается в программировании, потому как там можно наворотить такого, что потом без бутылки не разберешся. Культурный код написать, нужно так: что бы ты добавил класс или убрал и по возможности сосоедние классы ты не исправляешь, откомпилировал и оно работает. В том числе для это и придумали события.

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

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
У меня получилось создать работающий Аддин. Выкладываю код (может кому-то пригодится) и файлы Аддина.

Извините, вам запрещён просмотр содержимого спойлеров.



Полезная ссылочка:
http://hjalte.nl/tutorials/68-addin-wont-load
Вообще полезный сайт, там и другие статьи есть.
Также очень мне помог ChatGPT.
« Последнее редактирование: 19-03-2023, 21:49:38 от Sektor »