Передача параметров плагинам AutoCAD

Автор Тема: Передача параметров плагинам AutoCAD  (Прочитано 10721 раз)

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

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Здравствуйте!
Имеется плагин (dll), который автоматически запускается при открытии документа. Так же имеется необходимость передачи некоторого строкового параметра этому плагину. Как подобное можно реализовать? Может, существуют плагины для автокад, которые принимают некие параметры, аргументы.
Автокад запускаю через командную строку (cmd) следующим образом:
acad.exe D:\1.dwg /b D:\1.scr
Где:
/b D:\1.scr - путь к скрипту следующего содержания:

netload
"D:/Мой_плагин.dll"


Сделал это исходя из соображений, что создавать запись в реестре для автозагрузки dll - не очень хорошая идея, поскольку плагин необходимо запускать, в том числе, на ПК без права на внесение изменений в реестр.

Итак, основной вопрос - каким образом можно передать строковый параметр своему плагину? Возможно, с помощью того же скрипта?

Спасибо за внимание.

Отмечено как Решение strayker1206 01-02-2017, 11:12:46

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Передача параметров плагинам AutoCAD
« Ответ #1 : 30-01-2017, 20:40:27 »
Как самый простой вариант, который в голову пришел.
Задаем переменной USERS1 нужное значение в файле сценария перед запуском плагина. Типа такого, наверное:
Код - C# [Выбрать]
  1. _.setvar
  2. users1
  3. "parameter"
  4. _.netload
  5. "D:/Мой_плагин.dll"
А в плагине считывать эту переменную.
Не проверял, просто как идея.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Передача параметров плагинам AutoCAD
« Ответ #2 : 30-01-2017, 21:17:27 »
Можно создать автолисп функцию - аттрибут LispFunction - достаточно широко тему раскрывали здесь, ну а в принципе вызывающий метод может предварительно "положить" необходимые данные куда угодно - например в БД.

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Передача параметров плагинам AutoCAD
« Ответ #3 : 30-01-2017, 21:28:56 »
Сделал это исходя из соображений, что создавать запись в реестре для автозагрузки dll - не очень хорошая идея, поскольку плагин необходимо запускать, в том числе, на ПК без права на внесение изменений в реестр.
Так как автозагрузку можно реализовать через HKEY_CURRENT_USER, то это должно быть доступно всегда (иначе сам AutoCAD работать не будет).
Итак, основной вопрос - каким образом можно передать строковый параметр своему плагину? Возможно, с помощью того же скрипта?
Пользуйся поиском. Пример: http://adn-cis.org/forum/index.php?topic=1036.msg4843#msg4843
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Передача параметров плагинам AutoCAD
« Ответ #4 : 01-02-2017, 11:05:58 »
Спасибо всем большое за помощь!
Сделал следующим образом:
Скрипт:
._setvar
USERS1
"параметр"
netload
"D:\мой_плагин.dll"

А в плагине пишу:
Код - C# [Выбрать]
  1. string parametr = Application.GetSystemVariable("USERS1").ToString();

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Передача параметров плагинам AutoCAD
« Ответ #5 : 03-02-2017, 10:32:37 »
Сугубо ИМХО. Я бы не стал полагаться на безошибочность такого решения: в AutoCAD может быть загружено другое приложение, которое обращается к USERS*. Может быть, проще будет использовать нечто типа
(setenv "MyCoolPluginParameter1" "Параметр")
_.netload
"d:\MYCoolPlugin.dll"
А в плагине
string param = Application.GetEnvironmentVariable("MyCoolPluginParameter1").ToString();
Или что-то наподобие. На .NET не пишу, со всеми вытекающими.
Все, что сказано - личное мнение.

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

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

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Передача параметров плагинам AutoCAD
« Ответ #6 : 03-02-2017, 14:24:09 »
Алексей Кулик, полагаю, Ваше решение более безопасное, однако я не нашёл возможность считать созданную переменную. Метода Application.GetEnvironmentVariable нет..

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Передача параметров плагинам AutoCAD
« Ответ #7 : 03-02-2017, 14:28:51 »
Метода Application.GetEnvironmentVariable нет..
System.Environment.GetEnvironmentVariable

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Передача параметров плагинам AutoCAD
« Ответ #9 : 03-02-2017, 14:35:39 »
Дмитрий Загорулькин, по-моему, твое решение больше касается системных переменных окружения. Я говорил о переменных окружения для AutoCAD
Все, что сказано - личное мнение.

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

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Передача параметров плагинам AutoCAD
« Ответ #10 : 03-02-2017, 15:06:49 »
А... Семен-Семеныч... Ну да. Тогда так:
Код - C# [Выбрать]
  1. HostApplicationServices.Current.GetEnvironmentVariable("MyCoolPluginParameter1");
Кстати, Алексей, то ли изначально тут не совсем точная информация: http://autolisp.ru/2013/12/11/environtment-variables/, то ли в уже новых версиях все поменялось.
В том плане, что вместо этого:
Цитировать
Их перечень можно посмотреть в реестре, в ветке HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\Profiles\ИмяПрофиля\General
У меня так:
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\FixedProfile\General

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

  • Administrator
  • *****
  • Сообщений: 13832
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Передача параметров плагинам AutoCAD
« Ответ #11 : 03-02-2017, 15:12:55 »
Кстати, Алексей, то ли изначально тут не совсем точная информация: http://autolisp.ru/2013/12/11/environtment-variables/, то ли в уже новых версиях все поменялось.
В том плане, что вместо этого:
Цитировать

    Их перечень можно посмотреть в реестре, в ветке HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\Profiles\ИмяПрофиля\General

У меня так:
Код: [Выделить]

HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\FixedProfile\General

Они в действительности разбросаны по разным веткам реестра. Стандартные обычно в ...Profiles\ИмяПрофиля\General, собственные в ...FixedProfile\General
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1097
  • Карма: 172
Re: Передача параметров плагинам AutoCAD
« Ответ #12 : 03-02-2017, 15:37:59 »
Как только немного времени появится, дополню информацию, спасибо :)
Все, что сказано - личное мнение.

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

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Передача параметров плагинам AutoCAD
« Ответ #13 : 03-02-2017, 15:47:33 »
Я сильно не тестировал, но, вроде как, ситуация такая:
(setenv "параметр" "значение") пишет пользовательские параметры в FixedProfile
(getenv "параметр") читает пользовательские параметры из FixedProfile и стандартные значения вроде из Profiles\ИмяПрофиля. По крайней мере, (getenv "ACAD") значение выдает, но в FixedProfile его нет.
Но если вручную создать в реестре параметр в Profiles\ИмяПрофиля\General, то его не читает ни getenv, ни HostApplicationServices.Current.GetEnvironmentVariable

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

  • ADN OPEN
  • Сообщений: 25
  • Карма: 0
Re: Передача параметров плагинам AutoCAD
« Ответ #14 : 03-02-2017, 16:01:03 »
Алексей Кулик, Дмитрий Загорулькин, спасибо за предложенный вариант, всё заработало =)
Один вопрос:
После завершения сессии (после закрытия автокада), наша переменная остаётся в реестре. Неплохо бы, наверно, подчистить за собой?
Пробежался по форумам, но везде сказано, как записать и считать переменную, но нигде не сказано, что она остаётся в реестре и как с этим бороться. Может, это не так важно, не знаю..