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

ADN Club => Fusion 360 API => Тема начата: Валериян от 21-02-2016, 14:02:00

Название: Fusion360 API
Отправлено: Валериян от 21-02-2016, 14:02:00
В моем приложении весь функционал содержится в DLL-программе.

В API AutoCAD есть много вариантов вызова DLL-программы. Там все прекрасно.

К сожалению, в API Fusion я не нашел команд вызова DLL-программы в скриптах JScript, Python.
Может эти команды есть?
Слишком важная команда для любого API.


Недавно в API Fusion появилась возможность написания скриптов на C++.
Попробовал отредактировать простейший пример TestScript.
Кнопка Edit. Переходит в Vision Studio C++.
При перестройке проекта транслятор дает множество ошибок типа

Ошибка   1   error MSB8008: указанный набор инструментов платформы (v110) не установлен или недопустим. Убедитесь, что выбрано поддерживаемое значение PlatformToolset.   C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Microsoft.Cpp.x64.Targets   514   6   TestScript
   13   IntelliSense: встроенный спецификатор можно использовать только в объявлениях функций   c:\users\муфтеев\appdata\roaming\autodesk\autodesk fusion 360\api\cpp\include\core\application\application.h   315   1   
   40   IntelliSense: идентификатор "BOOL" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   30   1   TestScript
   45   IntelliSense: идентификатор "DLL_PROCESS_ATTACH" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   34   7   TestScript
   48   IntelliSense: идентификатор "DLL_PROCESS_DETACH" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   37   7   TestScript
   46   IntelliSense: идентификатор "DLL_THREAD_ATTACH" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   35   7   TestScript
   47   IntelliSense: идентификатор "DLL_THREAD_DETACH" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   36   7   TestScript
   43   IntelliSense: идентификатор "DWORD" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   30   40   TestScript
   42   IntelliSense: идентификатор "HMODULE" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   30   23   TestScript
   44   IntelliSense: идентификатор "LPVOID" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   30   54   TestScript
   49   IntelliSense: идентификатор "TRUE" не определен   c:\users\муфтеев\appdata\local\autodesk\webdeploy\production\66ed5e8cf991ec00ace7e4d2638113959b38c0dd\cpp\samples\testscript\testscript.cpp   40   9   TestScript
   7   IntelliSense: имя, за которым следует выражение "::", должно определять класс или пространство имен   c:\users\муфтеев\appdata\roaming\autodesk\autodesk fusion 360\api\cpp\include\core\application\application.h   107   22   
   8   IntelliSense: имя, за которым следует выражение "::", должно определять класс или пространство имен   c:\users\муфтеев\appdata\roaming\autodesk\autodesk fusion 360\api\cpp\include\core\application\application.h   126   5   
   10   IntelliSense: имя, за которым следует выражение "::", должно определять класс или пространство имен   c:\users\муфтеев\appdata\roaming\autodesk\autodesk fusion 360\api\cpp\include\core\application\application.h   133   5   


Видимо, нужно правильно установить системные переменные в Windows?

Где найти руководство по созданию проекта C++ Visual Studio 10 или 12 для скриптов Fusion?


Название: Re: Fusion360 API
Отправлено: Александр Ривилис от 21-02-2016, 14:51:42
Ошибка   1   error MSB8008: указанный набор инструментов платформы (v110) не установлен или недопустим. Убедитесь, что выбрано поддерживаемое значение PlatformToolset.
Требуется установленный VS 2012 (т.е. v110). Ну или попробуй поменять Platform Toolset на тот, который соответствует твоему Visual Studio:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F66529%2F7842324.5%2F0_11a354_4b86ca68_orig.png&hash=348b942bb9992f6ca830603b2f7f6640)

Судя по этой теме можно использовать практически любую C++ IDE. Во всяком случае любую VS C++ IDE:
http://forums.autodesk.com/t5/api-and-scripts/question-on-fusion-360-ide-for-cpp-programming/td-p/5804258

К сожалению, в API Fusion я не нашел команд вызова DLL-программы в скриптах JScript, Python.
Может эти команды есть?
Слишком важная команда для любого API.
Увы. Судя по всему тебе придётся переписать этот функционал. Или написать C++ addon из которого при помощи LoadLibrary() загружать свой dll-файл, ну и как-то вызывать из него нужные тебе функции (надеюсь, что они не используют никакой AutoCAD API)
Название: Re: Fusion360 API
Отправлено: Валериян от 21-02-2016, 15:34:39
Отлично. Спасибо! Это решение. (не знаю где кнопка Решение)
Поменял на 100 для VS 10.

Буду разбираться с DLL.
Название: Re: Fusion360 API
Отправлено: Валериян от 26-02-2016, 15:50:40
Спасибо, Александр.
Сейчас уперся в следующую проблему.
Перевожу программу JScript на С++.
Фрагмент на JScript
Код - Javascript [Выбрать]
  1. for (var x = 0; x < selectionInput.selectionCount; ++x) {
  2.             var selection = selectionInput.selection(x);
  3.             var selectedObj = selection.entity;
  4.            
  5.                    
  6.                      
  7.                         if (selectedObj instanceof adsk.fusion.SketchPoint){
  8.                            
  9.                              Points[nPoints] = selectedObj;
  10.                              nPoints++;
  11.                         }
  12. ...
  13.  
  14.  
Код на С++
Код - C++ [Выбрать]
  1. Ptr<SelectionCommandInput> selectionInput = inputs->itemById(commandId + "_selection");
  2. size_t k = 0;
  3. if(selectionInput) k = selectionInput->selectionCount();
  4. for( int ir = 0; ir < k; ir++){
  5.     Ptr<Selection> selection = selectionInput->selection(ir);
  6.  ??? ?
  7.  ??? ?
  8.  
  9.  
  10.  
  11. }
Как закодировать на С++ место на JScript
Код - Javascript [Выбрать]
  1.  var selectedObj = selection.entity;                                                                           if (selectedObj instanceof adsk.fusion.SketchPoint){                                                        Points = selectedObj;                             nPoints++;                        }...
  2.  
??
В Help Fusion отсутствуют примеры С++ с выбором объектов и анализом.

Название: Re: Fusion360 API
Отправлено: Александр Ривилис от 26-02-2016, 16:00:18
1. Один вопрос - одна тема.
2. Нормально форматируй код.