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

ADN Club => AutoCAD .NET API => Тема начата: alvimo от 27-03-2022, 05:05:28

Название: Как оптимизировать [CommandMethod("commanda")]
Отправлено: alvimo от 27-03-2022, 05:05:28
Добрый день!
Как сделать так, чтобы не прописывать в коде все мои команды, т.е. каждую команду мы прописываем так:

[CommandMethod("комманд1")]
public static void комманд1() { воид_комманд1(); }
[CommandMethod("комманд2")]
public static void комманд2() { воид_комманд2(); }
...........
[CommandMethod("коммандN")]
public static void коммандN() { воид_коммандN(); }

Вопрос в чем, как загрузить динамически, например из файла, все мои команды, а не прописывать все в коде?
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: avc от 27-03-2022, 05:29:43
Посмотрите в сторону Utils.AddCommand. Возможно это то, что вам нужно.
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: alvimo от 27-03-2022, 12:57:07
Посмотрите в сторону Utils.AddCommand. Возможно это то, что вам нужно.

Благодарю.
В этом случае все равно нужно прописывать каждую команду в коде, но на одну строчку меньше  :D.
Нашел такое:
Код - C# [Выбрать]
  1. Utils.AddCommand("RIVILIS", "TEST1", "ТЕСТ1", CommandFlags.Modal, my_function);

my_function - это функция выполнения команды автокада и нельзя использовать с аргументами.
А так, если можно было использовать аргументы, то было бы в самый раз.
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: Александр Ривилис от 27-03-2022, 14:02:58
alvimo,
Есть еще и lisp-функции, которые можно определять в AutoCAD .NET API - там и аргументы можно передавать.
Код - C# [Выбрать]
  1. Utils.AddCommand("RIVILIS", "TEST1", "ТЕСТ1", CommandFlags.Defun, my_function);
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: Дмитрий Загорулькин от 27-03-2022, 16:13:35
Как сделать так, чтобы не прописывать в коде все мои команды
Можете использовать кодогенерацию (https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview), которая появилась в net 5. На первый взгляд выглядит страшно и непонятно, но штука очень мощная и перспективная.
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: alvimo от 28-03-2022, 16:34:38
alvimo,
Есть еще и lisp-функции, которые можно определять в AutoCAD .NET API - там и аргументы можно передавать.
Код - C# [Выбрать]
  1. Utils.AddCommand("RIVILIS", "TEST1", "ТЕСТ1", CommandFlags.Defun, my_function);

Вообще скудная информация в инете по теме CommandFlags.Defun. Может пример какой есть?
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: alvimo от 28-03-2022, 16:36:51
Как сделать так, чтобы не прописывать в коде все мои команды
Можете использовать кодогенерацию (https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview), которая появилась в net 5. На первый взгляд выглядит страшно и непонятно, но штука очень мощная и перспективная.

У меня нет 4.5 и автокад 15.
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: Александр Ривилис от 28-03-2022, 16:52:00
alvimo,
Есть еще и lisp-функции, которые можно определять в AutoCAD .NET API - там и аргументы можно передавать.
Код - C# [Выбрать]
  1. Utils.AddCommand("RIVILIS", "TEST1", "ТЕСТ1", CommandFlags.Defun, my_function);

Вообще скудная информация в инете по теме CommandFlags.Defun. Может пример какой есть?
Примера нет. Погугли атрибут [LispFunction]
http://docs.autodesk.com/ACD/2011/ENU/filesMDG/WS1a9193826455f5ff-e569a0121d1945c08-17c3.htm
Название: Re: Как оптимизировать [CommandMethod("commanda")]
Отправлено: Дмитрий Загорулькин от 28-03-2022, 16:58:38
У меня нет 4.5
Тогда да, увы:
Цитировать
Проект "..\CommandGenerator\CommandGenerator.csproj" предназначен для целевой платформы "netstandard2.0". На него не следует ссылаться в проекте, предназначенном для целевой платформы ".NETFramework,Version=v4.5".
Нужна минимум 4.6.1 версия: https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard2.0.md