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

29/07/2015

Твердые тела и поверхности Fusion - Часть 1

Твердотельные модели в Fusion представлены группой поверхностей, образующих плотно замкнутый объем. Это широко известный как моделирование представлением границ (Boundary-Representation) или B-Rep. Модель B-Rep предоставляет полное геометрическое описание твердой поверхности или модели. Для твердых тел, определяющие поверхности тесно связаны, по всем краям, образуя замкнутый ("водонепроницаемый", "water tight") объем. С этим объемом, Fusion способен вычислять такие вещи, как массовые свойства и выполнять операции над поверхностями, как будто они были фактическими твердыми предметами "реального мира". Когда определена новая функция, Fusion создает поверхности, необходимые для представления функции, пересекает их с существующим телом, а затем обрезает поддавшиеся воздействию поверхности таким образом, чтобы все швы стали герметичны.

Модель B-Rep определяется двумя вещами: топологией и геометрией. В нижеследующих разделах описаны концепции топологии и геометрии, а также функциональность API, который обеспечивает доступ к топологическому и геометрическому определению твердого тела. Редактирование модели Fusion достигается при помощи функций в параметрической модели, или путем прямого изменения в прямом редактировании (непараметрическом) модели.

Определение топологии

Топология модели определяется иерархической структурой объектов. Полная иерархия объектов API для топологии B-Rep показана на следующем рисунке. Обсуждение, которое следует, описывает каждый из объектов в иерархии. Вы, возможно, заметили, что на графике, некоторые из объектов могут быть получены различными способами. Например, вы можете получить BRepFaces из объекта BRepBody, BRepLump или BrepShell. Вы сами решаете, какой объект использовать, чтобы получить грани в зависимости от того, какой набор граней вы хотите получить. Получение граней из тела будет возвращать все грани в теле. Получение грани из оболочки будет возвращать только грани, принадлежащие к той оболочке, которая будет подмножеством граней в теле. Это было бы похоже на получение списка всех людей в целом здании, в сравнении с перечнем людей в одной комнате в этом здании. Список комнат - это подмножество списка здания.

 

BRepBody

Модель B-Rep доступна через объект компонент. Компонент может содержать от нуля до любого количества тел. Объект верхнего уровня - это объект BRepBody (или "тело"). Изображение ниже иллюстрирует иерархию API, по пути к телу. Объекты BRepBody доступны из объекта-коллекции BRepBodies. Объект коллекции BRepBodies получается из компонента.

 

BRepLump

BRepLump (или "Lump", "кусковой") объект представляет единый набор соединенных граней и любые вычлененные объемы в пределах этого набора граней. Теоретически для тела возможно иметь несколько кусков, однако Fusion обеспечивает соблюдение того, что тело будет всегда содержать только один кусок. В приведенном ниже примере, отверстие в детали было увеличено настолько, чтобы разделить деталь на две части. Если поддерживается несколько кусков, то результатом будет одно тело, который содержит два куска. Тем не менее, Fusion будет создать новое тело в этом случае, так что результатом будет два тела, каждое из которых содержит один кусок. Если какая-либо из частей была извлечена с помощью функции Shell без каких-либо открытых граней, то мы будем по-прежнему иметь одно тело и кусок и новые поверхности, определяющие внутреннюю пустоту также будут частью общего куска.

 

Объекты BRepLump в теле доступны через коллекцию BRepLumps, который получается из родительского объекта BRepBody.

 

BRepShell

Объект BRepShell (или "Shell", "раковина") представляет собой единый набор связанных граней. Для большинства тел есть один BRepLump, который состоит из одного BRepShell. Тем не менее, тела возможно иметь несколько оболочек. Это показано в примере ниже, где сфера была изъята при помощи функции Shell. Результатом является одно тело, содержащее один кусок, который имеет две оболочки: внешняя и внутренний набор граней. Создание отверстия в этой модели будет сводить её к одной оболочке, поскольку грань, представляющая отверстие будет соединить внутренние и наружные грани результатом чего будет один набор соединенных граней.

 

Чтобы определить, является ли наружная оболочка частью снаружи или представляет пустоту внутри части, используйте свойство isVoid к объекту BRepShell.

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

 

BRepFace

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

 

BRepLoop

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

 

BRepEdge

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

 

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

 

BRepVertex

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

 

BRepCoEdge

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

 

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

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

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

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