B-Rep моделирование через API Fusion 360

Автор: | 04.02.2018

Введение
Иерархическая структура объектов топологии B-Rep модели
Доступ к B-Rep объектам:

BRepBody
BRepLump
BRepShell
BRepFace
BRepLoop
BRepVertex
BRepCoEdge

Другие методы доступа к B-Rep объектам
Оценивание (Evaluating) геометрии через топологию объектов
Доступ к геометрии из объектов B-Rep

Введение

Твердотельные модели Fusion представлены группой поверхностей, образующих плотно замкнутый объем. Это широко известно как моделирование представлением границ (Boundary-Representation или B-Rep). B-Rep обеспечивает полное геометрическое описание твердотельной (solid) или поверхностной (surface) моделей.

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

Модель B-Rep определяется двумя вещами – топологией и геометрией.

Топология определяет только структуру модели, а уже геометрия определяет его форму. Топология может описать модель как имеющая 6 граней и 12 ребер, но такого описания недостаточно, чтобы передать фактическую форму такой модели. Например, на рисунке показаны три разные по форме модели, которые состоят из 6 граней и 12 ребер.

Ниже приведено описание понятий топологии и геометрии, а также функциональные возможности API, которые обеспечивает доступ к топологическому и геометрическому определениям твердого тела. Редактирование модели Fusion осуществляется через features в параметрической модели, или через прямую модификацию непараметрической модели.

Иерархическая структура объектов топологии B-Rep модели

Топология B-Rep модели определяется иерархической структурой объектов.

Вы можете заметить на диаграмме, что некоторые из объектов могут быть получены различными способами. Например, вы можете получить коллекцию граней BRepFaces из объектов BRepBody, BRepLump или BrepShell. При этом Вы сами решаете, какой использовать объект, чтобы получить грань – в зависимости от того, какое множество граней вы хотите. Получение BRepFaces из объекта BRepBody вернет все грани в теле. Получение BRepFaces из объекта BrepShell будет возвращать только грани, принадлежащие оболочке, которая, в свою очередь, является подмножеством граней в теле. Можно привести аналогию с получением списка людей во всем здании, и списка людей в пределах одной комнаты в этом здании. При этом список людей в  комнате представляет собой подмножество списка людей в здании.

Ниже описывается каждый из объектов в иерархии.

Доступ к B-Rep объектам:

BRepBody

Модель B-Rep доступна из объекта Component. Объекты BRepBody доступны из объекта-коллекции BRepBodies, а сама коллекция доступна из объекта Component.

 BRepLump

Твердотельный объект с точки зрения API – набор соединенных граней и вычлененных объемов в пределах этого набора граней.

В приведенном ниже примере  отверстие в детали было увеличено настолько, что в детали вычленились два «куска»  (lumps). Однако деталь по-прежнему остается моделью одного тела (объект BRepBody). При этом каждый «кусок» представлен своим собственным объектом BRepLump. Этот объект доступен через BRepLumps коллекцию, которая может быть получена из объекта BRepBody.

BRepShell

BRepShell объект – единый набор соединенных между собой граней (оболочек или «Shell»). Большинство BRepBody (или BRepLump) объектов состоит из одной оболочки, но могут иметь и несколько оболочек. Это показано в примере, где сфера была создана с помощью Shell feature. В результате получается тело, которое имеет две оболочки (BRepShell объекты) – внешнюю и внутреннюю. Отверстие в этой модели могло бы создать из 2-х одну оболочку, так как поверхность отверстия соединит внутреннюю и внешнюю оболочки.

Объекты BRepShell доступны через коллекцию BRepShells, которая может быть получена из объектов BRepBody или BRepLump. Коллекция из BRepBody содержит все оболочки, которые существуют в пределах тела, а коллекция из BRepLump содержит только BRepShell внутри этого Lump.

BRepFace

Объект BRepFace представляет собой конкретную грань в пределах тела. На рисунке показан разнесенный вариант тела, где отдельные грани, которые составляют модель, можно увидеть более четко. Объект BRepFace доступен через коллекцию BRepFaces, которая может быть получена из объектов BRepBody, BRepLump или BRepShell.

BRepLoop

BRepLoop объект определяет границу (контур) конкретной поверхности (грани). Все грани имеют один внешний контур (Loop) и могут иметь ноль и более внутренних контуров. На рисунке  выделены два контура поверхности – внешний контур, состоящий из четырех ребер, и один внутренний контур, который состоит из одной круговой кромки. Объект BRepLoop доступен через коллекцию BRepLoops, которая может быть получена из объекта BRepFace.

BRepEdge

Объект BRepEdge представляет собой отдельную кривую (ребро)  в пределах контура грани. Объект BRepEdge определяет связь между двумя смежными гранями.

Есть несколько способов доступа к ребрам через API. Вы можете запросить все ребра одной грани (коллекция BRepEdges объекта BRepFace) или одного контура (коллекция BRepEdges объекта BRepLoop). Можно также запросить все ребра внутри объектов BRepBody, BRepLump или BRepShell. От ребра можно получить две грани, которые оно соединяет.

BRepVertex

Объекты BRepVertex (вершины) представляют конечные точки ребра. На рисунке вершина выделена красным цветом. Эта вершина соединяет три ребра. Вершины могут быть доступны из коллекции BRepVertices, доступной из объектов BRepBody, BRepLump, BRepShell и BRepFace. Вершины в начале и конце ребра могут быть доступны с помощью свойств StartVertex и EndVertex объекта BRepEdge. Сама вершина обеспечивает доступ к реберам и граням, которые она соединяет.

BRepCoEdge

Объект BRepCoEdge подобен объекту BRepEdge в том, что оба они определяют границы поверхности. Есть два различия между BRepEdge и объектом BRepCoEdge:

    1. Объекты BRepCoEdge являются уникальными для конкретной поверхности, в то время как ребра разделены между поверхностями. Объекты BRepCoEdge находятся в направленной ориентации вдоль границы поверхности, они направлены против часовой стрелки вокруг внешней границы, и по часовой стрелке (материал всегда влево) вокруг внутренней границы. Это невозможно с объектами BRepEdge, так как ребра являются общими для 2-х поверхностей.
    2. Объект BRepCoEdge не является 3D-объектом (все остальные объекты B-Rep являются 3D объектами). Объект BRepCoEdge определяется в 2D параметрическом пространстве родительской поверхности.

Другие методы доступа к BRep объектам

Помимо обхода иерархии объектов есть и другие методы, чтобы получить доступ к объектам B-Rep. В некоторых случаях эти методы более удобны для использования, чем те, которые были рассмотрены выше:

    • Из объектов Features. Свойство Faces объекта Feature может быть использовано, чтобы получить поверхности, которые были созданы с помощью конкретного feature. Некоторые features также обеспечивают доступ к поверхностям, которые они создали, по категориям. Например, extrude feature обеспечивают EndFaces, StartFaces и SideFaces свойства, которые возвращают торцевые и боковые поверхности экструзии.
    • Выборками (by Selection). В тех случаях, когда не представляется возможным определить необходимые объекты автоматически, пользователю может быть предложено выбрать их, используя выборки из solid моделей – объекты BRepBody, BRepFace, BRepEdge или BRepVertex.
    • Через связи (By Association). Конкретный B-Rep примитив также можно получить через свою связь с каким-либо другим объектом. Например, в сборке можно получить два объекта, которые соединены между собой.
  • По геометрическим условиям (By Geometry). Получение B-Rep геометрии, которая соответствует определенным критериям, также возможно за счет использования объектов evaluator (оценщиков). Например, можно было бы запросить все плоские грани, параллельные плоскости XY.

 Оценивание (Evaluating) геометрии через топологию объектов

Объект Face (грань) представляет собой поверхность, но не содержит данных о форме поверхности. То же самое относится и к объекту Edge (ребро); он представляет собой кривую, но не содержит данных о форме кривой. Эти объекты определяют, как различные геометрические формы связаны, но не содержат данных, относящихся к геометрии.

Есть некоторые общие запросы, которые могут быть выполнены на объектах B-Rep, которые обеспечивают информацию, относящуюся к форме. Эти запросы выполняются с использованием evaluator objects .

Evaluators (Оценщики) выполняют многие из «оценок», относящихся к параметрическому пространству поверхности или кривой. Что такое параметрическое пространство рассматривается на примерах ниже.

В 3-х мерном пространстве положение точки определяется 3-я координатами X, Y, Z. Любую поверхность можно представить как 2-х мерное пространство, каждая точка, в котором определяется 2-мя параметрами, для обозначения которых обычно используют буквы (U, V). Например, плоская грань с нарисованной на ней сеткой, представляет двухмерное параметрическое пространство.

Диапазон или размер параметрического пространства может изменяться в зависимости от геометрии поверхности и границ, которые ее обрезают. NURBS поверхности  имеют минимальные значения (0, 0) и максимум (1, 1). Цилиндр проходит от -π до π в направлении вокруг цилиндра и бесконечен вдоль оси цилиндра. Плоскость неограниченна и бесконечна в обоих направлениях, но она может быть ограничена ребрами на ней. Параметризация не всегда равномерна по всей поверхности. Это означает, что для NURBS поверхностей точка (0.5,0.5) не обязательно находится в геометрическом центре поверхности.

На рисунке ниже показаны некоторые другие примеры поверхностей, представленных при помощи сетки как параметрическое пространство. Крайнюю левую поверхность можно представить, как разновидность плоской поверхности, которая растягивается и изгибается как резина. Поверхность в середине может быть образована путем прокатки плоской грани в цилиндр. Для создания поверхности справа два края плоской грани были уменьшены до нулевой длины.

Кривые также можно представить как параметрическое пространство, которое одномерно. Это означает, что любая точка на кривой может быть идентифицирована одним параметром. Значения начального и конечного параметров определяют диапазон пространства.

Ниже приведены некоторые из наиболее часто используемых функций объектов-оценщиков.

Функции объекта SurfaceEvaluator:

  • getNormalAtParameter – рассчитывает вектор нормали к поверхности в заданной в 2D параметрическом пространстве точке. Нормаль всегда направлена из тела.
  • getNormalAtPoint – рассчитывает вектор нормали к поверхности в заданной в 3D пространстве точке. Нормаль всегда направлена из тела.
  • getParameterAtPoint – по заданной в 3D пространстве точке возвращает эквивалентную 2D параметрическую точку.
  • getPointAtParameter – по заданной в 2D параметрическом пространстве точке возвращает эквивалентную 3D точку.
  • isParamOnFace – по заданной в 2D параметрическом пространстве точке определяет, принадлежит точка поверхности или выходит за пределы границ (в пустоту).
  • parametricRange – возвращает максимальные и минимальные значения параметров в пространстве грани.

Функции объектов CurveEvaluator3D и CurveEvaluator2D:

  • getEndPoints – возвращает начальную и конечную точки ребра.
  • getLengthAtParameter – возвращает фактическую длину ребра между двумя входными параметрами.
  • getParameterAtLength – возвращает значение параметра точки на заданном расстоянии вдоль кривой от заданной точки.
  • getParameterAtPoint – по заданной в 3D пространстве точке возвращает эквивалентную параметрическую точку вдоль ребра.
  • getPointAtParameter – по заданной параметрической точке возвращает эквивалентную 3D точку.
  • getParameterExtents – возвращает минимальные и максимальные значения параметров в пространстве ребра.

Объект SurfaceEvaluator предоставляет функции для получения нормалей к поверхности, такие как getNormalAtPoint и getNormalAtParameter. Нормаль – вектор, перпендикулярный к поверхности в конкретной точке. Нормали направлены наружу от тела. Нормали к плоской грани все одинаковы, независимо от их расположения на поверхности. Нормали к сферической грани отличаются в каждой точке этой грани. На рисунке показан ряд нормалей, отображаемых на сплайновой поверхности.

Пример JavaScript кода показывает, как найти параметрический центр поверхности, а затем вернуть нормаль к поверхности в этом месте.

function getNormalAtParametricCenter(face) {
// Get the evaluator from the input face.
var surfEval = face.evaluator;
// Get the min and max parameter values for the surface.
var range = surfEval.parametricRange();
// Compute the center point of the parametric range.
var paramPoint = adsk.core.Point2D.create(
(range.minPoint.x + range.maxPoint.x)/2,
(range.minPoint.y + range.maxPoint.y)/2);
// Get the normal at the location defined by the parameter space point.
var normalObj = [];
surfEval.getNormalAtParameter(paramPoint, normalObj);
var normal = normalObj.value;
// Return the normal which is a Vector3D object.
return normal;
}

Доступ к геометрии из объектов B-Rep

Как было сказано выше, топология не описывает форму модели, а скорее, определяет его структуру и то, каким образом различные элементы модели связаны между собой. Именно геометрия описывает форму модели. Геометрия для каждой грани и ребра может быть доступна из объектов BRepFace, BrepEdge или BRepCoEdge с помощью свойства Geometry. Это свойство возвращает один из нескольких различных типов объектов, в зависимости от фактической формы объекта.

Из рисунка видно, что оценщики используются не только для B-Rep объектов, но и для различных типов геометрических объектов. В общем, лучше использовать оценщики на объекты B-Rep, а не объекты геометрии, поскольку оценщики BRep объектов принимают во внимание остальную часть тела. Например, получение нормали при помощи оценщика геометрии не может гарантировать, что нормаль направлена из тела, поскольку оценщик геометрии ничего не знает о структуре тела.

Каждый из объектов геометрии обеспечивает свойства, которые описывают форму геометрии. Например, объект Cylinder обеспечивает свойства axisVector (вектор оси), Basepoint (базовая точка) и radius (радиус), т.е. все необходимое, чтобы определить цилиндр. Объект Plane (плоскость) обеспечивает rootPoint (корневую точку) и свойства нормали. В обоих этих примерах размеры объектов не ограничены. Цилиндр бесконечен в обоих направлениях вдоль своей длины, а плоскость бесконечна во всех направлениях. Границы поверхностей определяются в B-Rep цикле.

Геометрические объекты можно рассматривать как «оторванные» от своего родительского объекта B-Rep. Это означает, что не существует никакого возврата к объекту B-Rep, из которого геометрический объект был получен. Например, объект Cylinder, полученный из объекта BRepFace описывает текущую форму поверхности, но последующие изменения, внесенные в модель поверхности, не будут отражены в полученном ранее объекте Cylinder. Объкты Cylinder и BRepFace являются полностью независимыми.

Обновленная версия объекта Cylinder может быть получено путем повторного вызова свойств геометрии после того, как какие-либо изменения были перенесены на объект BRepFace. В свою очередь, изменения объекта Cylinder (например, его радиуса), не могут быть отражены в объекте BRepFace.

Информация о модели также может быть получена в отличных от B-Rep форм представлений. Например, в настоящее время Fusion использует для графического отображения модели треугольную сетку.

Эта возможность предоставляется через объект MeshManager, который получают объекты BRepBody и BRepFace. А объекты CurveEvaluator3D и CurveEvaluator2D обеспечивают метод getStrokes, который используется для получения точек вдоль кривой, которые определяют аппроксимацию этой кривой в пределах заданного допуска.

Автор: Николай Свирневский

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *