Построение элементарного тела

Функция

MbResultType ElementarySolid( const MbElementarySolidParams  & params,
                                    MbElementarySolidResults & results );

выполняет построение элементарного тела по заданным точкам и типу создаваемого тела (см. таблицу 1), а также по элементарной поверхности (сфера, тор, конус, цилиндр).

Входным параметром является объект params класса MbElementarySolidParams (см. определение в op_shell_parameter.h), который содержит исходные данные для операции создания тела.

Выходным параметром функции является объект results класса MbElementarySolidResults, наследника класса MbOperationResults (см. определение в op_shell_parameter.h), содержащий построенное тело и обобщенные результаты выполнения функции.

Функция возвращает код результата операции из перечисления MbResultType.

Функция объявлена в файле action_solid.h.

Построение элементарного тела по контрольным точкам

При построении тел по контрольным точкам для инициализации объекта params с параметрами операции в классе MbElementarySolidParams определен следующий конструктор (см. op_shell_parameter.h):

MbElementarySolidParams( const ElementaryShellType      & solidType,
                         const c3d::SpacePointsVector   & points,
                         const MbSNameMaker             & operNames );

с параметрами:

  • solidType — тип создаваемого тела;

  • points — множество точек;

  • operNames — именователь операции.

Для разных типов создаваемого тела требуется разное количество контрольных точек. В таблице 1 приведено количество контрольных точек, необходимое для создания тела типа solidType:

Таблица 1 - Количество контрольных точек для различных типов элементарных тел

solidType

Тип тела

Количество контрольных точек

et_Sphere

шар

3 точки

et_Torus

тор

3 точки

et_Cylinder

цилиндр

3 точки

et_Cone

конус

3 точки

et_Cone

усеченный конус

4 точки

et_Block

блок

4 точки

et_Wedge

клин

4 точки

et_Prism

призма

количество вершин основания + 1 точка

et_Pyramid

пирамида

количество вершин основания + 1 точка

et_Plate

плита

4 точки

et_Icosahedron

икосаэдр

3 точки

et_Polyhedron

многогранник

3 точки

et_Tetrapipe

тетра-труба

3 точки

et_Octapipe

окта-труба

3 точки

При построении сферы точка points[0] определяет центр сферы, точка points[1] определяет направление оси axisZ локальной системы координат сферы, точка points[2] вместе с предыдущими точками определяет плоскость расположения осей axisX и axisZ локальной системы координат сферы. Расстояние между точками points[0] и points[2] определяет радиус сферы (см. рис. 1):

../../../../_images/M.1.1.1.png

Рис. 1

При построении тора точка points[0] определяет центр тора, точка points[1] определяет направление оси axisX локальной системы координат тора, точка points[2] вместе с предыдущими точками определяет плоскость, в которой располагаются оси axisX и axisZ локальной системы координат тора. Расстояние между точками points[0] и points[1] определяет больший радиус тора, расстояние между точками points[1] и points[2] определяет меньший радиус тора (рис. 2):

../../../../_images/M.1.1.2.png

Рис. 2

При построении цилиндра точка множества points[0] определяет центр нижнего основания цилиндра, точка points[1] определяет центр верхнего основания цилиндра и направление оси axisZ локальной системы координат цилиндра, точка points[2] вместе с предыдущими точками определяет плоскость расположения осей axisX и axisZ локальной системы координат цилиндра. Расстояние между точками points[0] и points[1] определяет высоту цилиндра, расстояние от оси axisZ до точки points[2] определяет радиус цилиндра (рис. 3):

../../../../_images/M.1.1.3.png

Рис. 3

При построении конуса точка множества points[0] определяет вершину конуса, точка points[1] определяет центр основания конуса и направление оси axisZ локальной системы координат конуса, точка points[2] вместе с предыдущими точками определяет плоскость расположения осей axisX и axisZ локальной системы координат конуса. Расстояние между точками points[0] и points[1] определяет высоту конуса, угол конуса определяется из условия, что точка points[2] лежит на боковой поверхности конуса (рис. 4):

../../../../_images/M.1.1.4.png

Рис. 4

При построении усеченного конуса точка множества points[0] определяет вершину конуса, точка points[1] определяет центр большего основания конуса и направление оси axisZ локальной системы координат конуса, точка points[2] определяет центр меньшего основания конуса, точка points[3] вместе с предыдущими точками определяет плоскость расположения осей axisX и axisZ локальной системы координат конуса. Расстояние между точками points[1] и points[2] определяет высоту усеченного конуса, угол конуса определяется из условия, что точка points[3] лежит на боковой поверхности конуса (рис. 5):

../../../../_images/truncated_cone.png

Рис. 5

При построении прямоугольного блока точки множества points[0] и points[1] определяют ребро и две вершины блока, точка points[2] вместе с предыдущими точками определяет плоскость нижнего основания блока. Через точку points[2] проходит ребро блока, параллельное ребру points[0]– points[1]. Точка points[3] определяет плоскость верхнего основания блока (рис. 6):

../../../../_images/M.1.1.5.png

Рис. 6

При построении прямоугольного клина точки множества points[0] и points[1] определяют ребро и две вершины клина, точка points[2] вместе с предыдущими точками определяет плоскость нижнего основания клина и его вершину. Через точку points[2] проходит ребро клина, параллельное ребру points[0]– points[1]. Точка points[3] определяет плоскость верхнего основания клина (рис. 7):

../../../../_images/M.1.1.6.png

Рис. 7

При построении плиты с цилиндрическими торцами точки множества points[0] и points[1] определяют ребро и две вершины плиты, точка points[2] вместе с предыдущими точками определяет плоскость нижнего основания пластины. Через точку points[2] проходит ребро плиты, параллельное ребру points[0]– points[1]. Точка points[3] определяет плоскость верхнего основания пластины (рис. 8):

../../../../_images/M.1.1.7.png

Рис. 8

При построении прямой призмы точки points[0], points[1], …, points[n-1] определяют многоугольник основания. Высоту призмы определяет расстояние от плоскости нижнего основания до последней точки points[n]. На рис. 9 приведена прямая призма с пятиугольным основанием:

../../../../_images/M.1.1.8.png

Рис. 9

При построении пирамиды с многоугольником в основании точки points[0], points[1], …, points[n-1] определяют многоугольник основания, последняя точка points[n] определяет вершину пирамиды. На рис. 10 приведена пирамида с пятиугольным основанием:

../../../../_images/M.1.1.9.png

Рис. 10

Многоугольник основания призмы или пирамиды может быть произвольным.

При построении икосаэдра точки points[0], points[1], points[2] определяют вершины и плоскости всех граней фигуры (рис. 11):

../../../../_images/Icosahedron.png

Рис. 11

Построение элементарного тела по заданной поверхности

Для создания тел по элементарной поверхности необходимо использовать функцию ElementarySolid() с использованием следующего конструктора для инициализации объекта params с параметрами операции (см. op_shell_parameter.h):

MbElementarySolidParams( const SPtr<const MbElementarySurface> & surface,
                         const MbSNameMaker                    & operNames );

с параметрами:

  • surface — элементарная поверхность (сфера, тор, цилиндр, конус);

  • operNames — именователь операции.

Элементарной поверхностью может быть сфера MbSphere, поверхность тора MbTorus, цилиндрическая поверхность MbCylinder, коническая поверхность MbCone. На рис. 12 приведена сферическая поверхность и построенное по ней тело:

../../../../_images/M.1.2.1.png

Рис. 12

На рис. 13 приведена поверхность тора и построенное по ней тело:

../../../../_images/M.1.2.2.png

Рис. 13

На рис. 14 приведена цилиндрическая поверхность и построенное по ней тело:

../../../../_images/M.1.2.3.png

Рис. 14

На рис. 15 приведена коническая поверхность и построенное по ней тело:

../../../../_images/M.1.2.4.png

Рис. 15

Если перечисленные поверхности являются циклически замкнутыми, то построенные по ним тела будут иметь соответствующую форму. Если поверхность не является ни одной из перечисленных элементарных поверхностей, функция возвращает код ошибки rt_Error.

Функция ElementarySolid() добавляет в журнал построенного тела builder MbElementarySolid (объявлен в файле cr_elementary_solid.h).

В тестовом приложении test.exe построение элементарного тела выполняется командами меню «Создать→Тело→По точкам» и «Создать→Тело→На базе поверхности→По элементарной поверхности».