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

30/05/2015

Основные понятия API Fusion

Есть некоторые основные понятия, которые являются общими для всего Fusion API. Понимание этих понятий сделает использование API гораздо проще.

Объекты

Fusion API является объектно-ориентированным API, и описывается при помощи набора объектов. Многие из этих объектов имеют соответствие между командами и параметрами, с которыми вы знакомы как пользователь Fusion. Например, выдавливание в модели Fusion представлена в API объектом ExtrudeFeature. Объект ExtrudeFeature является программным эквивалентом команды и параметров в пользовательском интерфейсе Fusion, которая отвечает за создание и редактирование выдавливаний. Посредством объекта ExtrudeFeature вы можете осуществлять все, что вы можете сделать при помощью пользовательского интерфейса. Например, вы можете получить и установить имя выдавливания в браузере, можете подавить эту функцию, или удалить её, или даже получить и редактировать связанные эскизы.

В дополнение к объектам API, которые представляют эквивалентные команды и параметры в интерфейсе Fusion, есть объекты "только API", которые обеспечивают функциональность, уникальную для работы с API. Например, с помощью API, можно запросить модель и извлечь всю её геометрию. Другой пример "Только API": способность создавать новые команды и добавлять их на панель инструментов Fusion.

Модель объектов

Одним из основных различий между использованием пользовательского интерфейса Fusion и API - это способ доступа к конкретным объектам. С пользовательским интерфейсом, вы графически выбираете (нажмите на) вещи в браузере и временной ленте. Новые объекты создаются при помощи специальных команд, таких как "Extrude", чтобы создать экструзию или "ящик", для создания нового ящика. С API, объекты доступны через то, что называется "объектная модель". Объектная модель предоставляет различные типы объектов, которые поддерживают такую же функциональность, как команды и опции, найденные в пользовательском интерфейсе Fusion. Объектная модель Fusion представляет собой иерархическую структуру объектов, которые представлены в таблице, показанной ниже. Этот график является полезным инструментом при работе с API. Вы можете скачать версию для печати в формате PDF здесь .

 

Показанная ниже часть объектной модели, используется при создании выдавливания. Объект Приложение, на верхнем уровне, представляет весь Fusion. Объект Приложение предоставляет доступ к широким свойствам приложения, а также к его прямым детям (документам, являющимся наиболее важными). Документы могут содержать различные типы данных, такие как моделирование или данные CAM. Объект Проект представляет все данные моделирования в документе. Объект Проект включает в себя один компонент, на высшем уровне, известный как корневой компонент. Все эскизы, параметры, конструкционная геометрия, компоненты и т.д., содержащееся в проекте, доступны из корневого компонента.

 

Общая функциональность объекта

Все объекты в Fusion поддерживает следующие свойства:

  • objectType - Возвращает строку, указывающую на тип объекта.
  • IsValid - Возвращает логическое значение, указывающее, остается ли в силе ссылка на объект (то есть не был ли удален или признан недействительным по каким-то другим действиям).

Коллекции

Коллекции обеспечивают доступ к набору общих объектов. Например, объект коллекции ExtrudeFeatures обеспечивает доступ ко всем функциями выдавливаний внутри компонента. Коллекции поддерживают свойство количества и метод элемента. Свойство Количество возвращает количество элементов в коллекции и метод элемента возвращает конкретный объект в коллекции.

Все коллекции поддерживают метода элемента, который принимает в качестве входных данных индекс и возвращает объект по этому индексу. Первый элемент в коллекции имеет индекс 0. Последний элемент имеет индекс, равный количеству-1. Многие коллекции также поддерживает другие типы методов элемента, наиболее распространенными из которых являются itemByName. Когда элементы в коллекции имеют уникальные имена, itemByName может быть использован, для того, чтобы получить элемент из коллекции, указав его имя.

Коллекции, как правило, обеспечивают поддержку создания новых объектов (т.е. типа, содержащегося в коллекции) с помощью различных методов добавления. Например, объект SketchArcs обеспечивает доступ ко всем существующим дугам внутри эскиза вместе с несколькими разными методами добавления (т.е. методы addByCenterStartSweep, addByThreePoints и addFillet) для создания новых дуг в эскизе.

Ниже приведен пример, начала с эскиза объекта, получение коллекции SketchCircles, а затем создания нового круга.

JavaScript

Код - JavaScript: [Выделить]
  1. // Получение коллекции SketchCircles из существующего эскиза.
  2. var circles = sketch.sketchCurves.sketchCircles;
  3. // Вызов метода надстройки над коллекцией для создания нового круга.
  4. var circle1 = circles.addByCenterRadius(adsk.core.Point3D.create(0,0,0), 2);

Python

Код - Python: [Выделить]
  1. # Получить коллекцию SketchCircles из существующего эскиза.
  2. circles = sketch.sketchCurves.sketchCircles
  3. # Вызов метода добавления над коллекцией для создания нового круга.
  4. circle1 = circles.addByCenterRadius(adsk.core.Point3D.create(0,0,0), 2)

Списки

Список является особый типом коллекции, который также используется для возврата набора типизированных объектов. Списки поддерживают свойство подсчета элементов и метод элемента, но не обеспечивают никаких методов добавления. Одним из примеров, где используется список является создание прямоугольников в эскизе. Создание прямоугольника использует один из методов добавления на основании результатов объекта Sketchlines в создании четырех новых линий. Возвращаемым типом всех этих методов добавления является объект SketchLineList, который содержит четыре новые линии.

Входные объекты

Объекты ввода используются для определения всех необходимых вводных для создания более сложных объектов. Входной объект можно рассматривать как API эквивалент диалога команды. Чтобы проиллюстрировать это, рассмотрим команду Extrude и связанный диалог. Для создания функции выдавливания при помощи пользовательского интерфейса, выполняется команда Выдавливание, которая вызывает диалоговое окно, где выставляются различные необходимые значения и параметры, и нажимается кнопка "ОК", после чего создается функция.

Создание функции выдавливания требует несколько входов и опций, что показано в диалоговом окне ниже. Выбор различных вариантов иногда включает и/или отключает другие элементы управления ввода в диалоговом окне. Диалоговое окно собирает входные данные и варианты, необходимые для создания выдавливания. Входной объект для функции выдавливания делает то же самое, что и диалоговое окно. Он имеет методы и свойства для определения всех различных входов и вариантов, которые определяют функцию выдавливания.

После того, как определен требуемый ввод, вызывается метод Add, в него передается входной объект. Метод Add является эквивалентом нажатия кнопки "OK" в диалоговом окне.

 

Код ниже демонстрирует рабочий процесс создания выдавливания.

JavaScript

Код - JavaScript: [Выделить]
  1. //Получить первый профиль из существующего эскиза.
  2. var prof = sketch.profiles.item(0);
  3. // Получение коллекции ExtrudeFeatures.
  4. var extrudes = rootComp.features.extrudeFeatures;
  5. //Создание входного объекта выдавливания, который определяет вход для выдавливания.
  6. // При создании объекта ввода, общие входы предоставляется в качестве аргументов.
  7. var extInput = extrudes.createInput(prof, adsk.fusion.FeatureOperations.NewBodyFeatureOperation);
  8. //Определить степень выдавливания на расстоянии 5 см.
  9. var distance = adsk.core.ValueInput.createByReal(5);
  10. extInput.setDistanceExtent(false, distance);
  11.              
  12. // Создание выдавливания с помощью метода Add коллекции ExtrudeFeatures и передача ему объекта ExtrudeInput.
  13. var ext = extrudes.add(extInput);

Python

Код - Python: [Выделить]
  1. # Получить первый профиль из существующего эскиза.
  2. prof = sketch.profiles.item(0)
  3. # Получить коллекцию ExtrudeFeatures.
  4. extrudes = rootComp.features.extrudeFeatures
  5. # Создание входного объекта выдавливания, который определяет вход для выдавливания.
  6. # При создании объекта ввода, общие входы предоставляется в качестве аргументов.
  7. extInput = extrudes.createInput(prof, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
  8. # Определить степень выдавливания на расстоянии 5 см.
  9. distance = adsk.core.ValueInput.createByReal(5)
  10. extInput.setDistanceExtent(false, distance)
  11.              
  12. # Создание выдавливания с помощью метода Add коллекции ExtrudeFeatures и передача ему объекта ExtrudeInput.
  13. ext = extrudes.add(extInput)

Обратите внимание, что в коде выше, что расстояние выдавливания определяется путем предоставления объекта ValueInput. Объект ValueInput используется для определения каких-либо значений, которые в дальнейшем будут храниться в качестве параметров проекта. Объект ValueInput может быть определен с использованием действительных или строковых значений. Действительные значения всегда интерпретируются как единицы базы данных Fusion; длины всегда сантиметры и углы всегда радианы. По умолчанию, строки интерпретируются с использованием текущих единиц документов. Например, "5" для длинны интерпретируется как 5 дюймов в документе с единицами по умолчанию для заданной длины в дюймах. Строки могут также указать непосредственно единицы. Например, строка "15 мм" интерпретируется как 15 миллиметров, а затем передается в качестве эквивалентного значения в текущих единицах документов. Строка может быть также уравнением, которое включает в себя существующие параметры вместе с числами, такие как "D0/2". Любое допустимое уравнение, которое в также может быть записан как значение, в диалоговом окне Fusion может быть использовано в объекте ValueInput.

Определение объектов

Определение объектов, как объектов ввода, используются для определения всех входов для конкретного свойства. Разница, однако, в том, что вместо того, чтобы использовать для создания новых свойств, определение объектов используются для редактирования существующих свойств. Еще одним заметным отличием между входным объектом и объектом определения в том, что свойства (объекта ввода), которые получили объект ValueInput во время создания, теперь только для чтения и возвращают объект параметра. Хотя свойство, которое возвращает параметр, доступный только для чтения, значение параметра может быть изменено, что в свою очередь может изменить свойство.

Источник: http://fusion360.autodesk.com/resources

Автор перевода: Дмитрий Емельянов

Обсуждение: http://adn-cis.org/forum/index.php?topic=2746

Опубликовано 30.05.2015