Forge, API и программирование – Русский – только для чтения
Задавайте вопросы и делитесь знаниями по Autodesk Forge и программированию на API программного обеспечения Autodesk
отмена
Отображаются результаты для 
Показать  только  | Вместо этого искать 
Вы имели в виду: 

Document.Editor.Command(...) и т.п. = eInvalidInput на AutoCAD 2016

2 ОТВЕТ 2
РЕШЕНО
Ответить
Сообщение 1 из 3
arist77
785 просмотров, 2 ответов

Document.Editor.Command(...) и т.п. = eInvalidInput на AutoCAD 2016

Добрый день!

Суть проекта - выполнение исходного кода на C# в AutoCAD (динамическая компиляция и всё такое...).

Есть сборка на C# с классом от IExtensionApplication. Грузится в AutoCAD при его запуске (через реестр).

В ней в Initialize и DocumentManager_DocumentCreated подписываемся на нужные события. Здесь ничего особенного...

В итоге имеем обработчики событий типа 

 

doc.CommandEnded += Doc_CommandEnded;

 

В таких обработчиках код типа:

 

compile_and_load_module(ctx);

В ctx всякие параметры для компиляции - пути к исходникам, пути к ссылкам, тип, запускаемый метод и т.п.

 

compile_and_load_module выполняет компиляцию исходников (CSharpCodeProvider.CompileAssemblyFromFile), сохраняет сборку на диске, загружает её в текущий AppDomain (т.е. в AutoCAD), ищет тип (из ctx) и выполняет метод (из ctx).

Скомпилированный метод делает какую-либо полезную работу, например вызывает другие команды AutoCAD...

 

var dm = Application.DocumentManager;
var doc = dm.MdiActiveDocument;
var ed = doc.Editor;
ctx.acad_dwg.Editor.WriteMessage("Перед Editor.Command() 5 ...");
await dm.ExecuteInCommandContextAsync(async (obj) =>
  {
    ed.WriteMessage("10000000000000000...");
    ed.Command("_ATTSYNC", "_N", n);
    ed.WriteMessage("20000000000000000...");
  },
  null
);

Вызов команды я пытался сделать и как await ed.CommandAsync и через ExecuteInCommandContextAsync и без неё.

Читал это и это и много чего ещё.

Там написано, что так всё должно работать и работает, но у меня не работает. Возможно это из-за более длинной цепочки компиляции, загрузки, выполнения и т.п. Раньше это всё у меня работало через acedCmd...

Может кто-нибудь подскажет куда копать?..

 

2 ОТВЕТ 2
Сообщение 2 из 3
Alexander.Rivilis
в ответ: arist77

Переходи сюда: http://adn-cis.org/forum/index.php?board=4.0

Постараемся помочь.

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Сообщение 3 из 3

Похоже решение найдено: http://adn-cis.org/forum/index.php?topic=3346.msg14286#msg14286

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"


Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Expert Elite Member

Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.

Новая тема  

Autodesk Design & Make Report