Fusion360 API C++

Автор Тема: Fusion360 API C++  (Прочитано 17483 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн ВалериянАвтор темы

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
    • spliner.ru
  • Skype: muftejev
Fusion360 API C++
« : 26-02-2016, 16:22:01 »
Fusion 360 C++.
Сейчас уперся в следующую проблему.
Перевожу программу 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.  

Код на С++
Код - 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;                                                                          
  2.  if (selectedObj instanceof adsk.fusion.SketchPoint){                                                        
  3.     Points = selectedObj;                            
  4.     nPoints++;                      
  5.  }
  6. ...

??
В Help Fusion отсутствуют примеры С++ с выбором объектов и анализом.
« Последнее редактирование: 26-02-2016, 17:55:33 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Fusion360 API C++
« Ответ #1 : 26-02-2016, 17:21:47 »
Из указанного кода я ничего не понял. В очередной раз прошу нормально форматировать код.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Fusion360 API C++
« Ответ #2 : 26-02-2016, 17:40:09 »
В Help Fusion отсутствуют примеры С++ с выбором объектов и анализом.
Плохо искал. Там есть отдельная статья: http://fusion360.autodesk.com/learning/learning.html?guid=GUID-ECC0A398-4D89-4776-A054-F7B432F7FCF6
В ней раздел Object Types and Casting, в котором совершенно четко написано:
Код - C++ [Выбрать]
  1. Ptr<Selection> selection = ui->activeSelections()->item(0);
  2. Ptr<Base> selectedEnt = selection->entity();
  3.  
  4. if (selectedEnt->objectType() == adsk::fusion::SketchLine::classType())
  5.     ui->messageBox("Selected entity is a sketch line.");
  6. else
  7.     ui->messageBox("Selected entity is NOT a sketch line.");
  8.  

Ну и так далее по тексту...

И конечно перевод: Особенности, характерные для C++ - Часть 2
« Последнее редактирование: 26-02-2016, 18:29:38 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВалериянАвтор темы

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
    • spliner.ru
  • Skype: muftejev
Re: Fusion360 API C++
« Ответ #3 : 27-02-2016, 11:13:41 »
Однако, проблема осталась.
За основу взял работающий пример формы ввода данных из Help Fusion
Samples Programs > Command Input

Добавил в Header

Код - C++ [Выбрать]
  1. // Added
  2. #include <Core/UserInterface/Selections.h>

В форме ввода данных поставил фильтры для точек

Код - C++ [Выбрать]
  1. // Create selection input
  2. Ptr<SelectionCommandInput> selectionInput = tab1ChildInputs->addSelectionInput(commandId + "_selection", "Select", "Basic select command input");
  3. if (!selectionInput)
  4.         return;
  5. selectionInput->setSelectionLimits(0);
  6. selectionInput->addSelectionFilter("SketchPoint");
  7. selectionInput->addSelectionFilter("BRepVertex");
  8.  

В  CommandExecuted event handler
добавил


Код - C++ [Выбрать]
  1. Ptr<SelectionCommandInput> selectionInput = inputs->itemById(commandId + "_selection");
  2. size_t k = 0;
  3. if(selectionInput) k = selectionInput->selectionCount();
  4.  
  5. for( int ir = 0; ir < k; ir++){
  6.  
  7.         Ptr<Selection> selection = selectionInput->selection(ir);
  8.        
  9.     // Get
  10.     Ptr<Base> enty = selection->entity();
  11.  
  12. }
Транслятор ругается на selection в  Ptr<Base> enty = selection->entity();
Говорит
adsk::core::Ptr<adsk::core::Selection, adsk::core::IcompleteType> selection
Error: использование указателя на тип неполного класса не допускается.

Без этой строки Программа работает. При выборе точек в отладке дает значение k > 0

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Fusion360 API C++
« Ответ #4 : 27-02-2016, 12:07:22 »
Боюсь, что это проблема с твоей версией VS. Для проверки перекомпилируй все примеры из Fusion 360 и убедись, что они все нормально компилируются. Если нет - требуется более свежая версия VS.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 27-02-2016, 13:04:09

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Fusion360 API C++
« Ответ #5 : 27-02-2016, 12:23:47 »
Не хватает еще такой строки:

Код - C++ [Выбрать]
  1. #include <Core/UserInterface/Selection.h>
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВалериянАвтор темы

  • ADN OPEN
  • Сообщений: 37
  • Карма: 0
    • spliner.ru
  • Skype: muftejev
Re: Fusion360 API C++
« Ответ #6 : 27-02-2016, 13:01:28 »
Спасибо. Все OK. Это решение.