ADN Club > Fusion 360 API

Fusion360 API C++

(1/2) > >>

Валериян:
Fusion 360 C++.
Сейчас уперся в следующую проблему.
Перевожу программу JScript на С++.
Фрагмент на JScript

--- Код - Javascript [Выбрать] ---for (var x = 0; x < selectionInput.selectionCount; ++x) {            var selection = selectionInput.selection(x);            var selectedObj = selection.entity;                                                                           if (selectedObj instanceof adsk.fusion.SketchPoint){                                                        Points[nPoints] = selectedObj;                             nPoints++;                        }... 
Код на С++

--- Код - C++ [Выбрать] ---Ptr<SelectionCommandInput> selectionInput = inputs->itemById(commandId + "_selection");size_t k = 0;if(selectionInput) k = selectionInput->selectionCount();for( int ir = 0; ir < k; ir++){    Ptr<Selection> selection = selectionInput->selection(ir); ??? ?  ??? ?   }Как закодировать на С++ место на JScript




--- Код - Javascript [Выбрать] --- var selectedObj = selection.entity;                                                                           if (selectedObj instanceof adsk.fusion.SketchPoint){                                                            Points = selectedObj;                                nPoints++;                        }...
??
В Help Fusion отсутствуют примеры С++ с выбором объектов и анализом.

Александр Ривилис:
Из указанного кода я ничего не понял. В очередной раз прошу нормально форматировать код.

Александр Ривилис:

--- Цитата: Валериян от 26-02-2016, 16:22:01 ---В Help Fusion отсутствуют примеры С++ с выбором объектов и анализом.
--- Конец цитаты ---
Плохо искал. Там есть отдельная статья: http://fusion360.autodesk.com/learning/learning.html?guid=GUID-ECC0A398-4D89-4776-A054-F7B432F7FCF6
В ней раздел Object Types and Casting, в котором совершенно четко написано:

--- Код - C++ [Выбрать] ---Ptr<Selection> selection = ui->activeSelections()->item(0);Ptr<Base> selectedEnt = selection->entity(); if (selectedEnt->objectType() == adsk::fusion::SketchLine::classType())    ui->messageBox("Selected entity is a sketch line.");else    ui->messageBox("Selected entity is NOT a sketch line."); 
Ну и так далее по тексту...

И конечно перевод: Особенности, характерные для C++ - Часть 2

Валериян:
Однако, проблема осталась.
За основу взял работающий пример формы ввода данных из Help Fusion
Samples Programs > Command Input

Добавил в Header


--- Код - C++ [Выбрать] ---// Added#include <Core/UserInterface/Selections.h>
В форме ввода данных поставил фильтры для точек


--- Код - C++ [Выбрать] ---// Create selection inputPtr<SelectionCommandInput> selectionInput = tab1ChildInputs->addSelectionInput(commandId + "_selection", "Select", "Basic select command input");if (!selectionInput)        return;selectionInput->setSelectionLimits(0);selectionInput->addSelectionFilter("SketchPoint");selectionInput->addSelectionFilter("BRepVertex"); 
В  CommandExecuted event handler
добавил



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

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

Александр Ривилис:
Боюсь, что это проблема с твоей версией VS. Для проверки перекомпилируй все примеры из Fusion 360 и убедись, что они все нормально компилируются. Если нет - требуется более свежая версия VS.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии