ADN Club > Fusion 360 API
Fusion360 API C++
Валериян:
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.
Навигация
Перейти к полной версии