Построение элементарного тела
Функция
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):
Рис. 1
При построении тора точка points[0] определяет центр тора, точка points[1] определяет направление оси axisX локальной системы координат тора, точка points[2] вместе с предыдущими точками определяет плоскость, в которой располагаются оси axisX и axisZ локальной системы координат тора. Расстояние между точками points[0] и points[1] определяет больший радиус тора, расстояние между точками points[1] и points[2] определяет меньший радиус тора (рис. 2):
Рис. 2
При построении цилиндра точка множества points[0] определяет центр нижнего основания цилиндра, точка points[1] определяет центр верхнего основания цилиндра и направление оси axisZ локальной системы координат цилиндра, точка points[2] вместе с предыдущими точками определяет плоскость расположения осей axisX и axisZ локальной системы координат цилиндра. Расстояние между точками points[0] и points[1] определяет высоту цилиндра, расстояние от оси axisZ до точки points[2] определяет радиус цилиндра (рис. 3):
Рис. 3
При построении конуса точка множества points[0] определяет вершину конуса, точка points[1] определяет центр основания конуса и направление оси axisZ локальной системы координат конуса, точка points[2] вместе с предыдущими точками определяет плоскость расположения осей axisX и axisZ локальной системы координат конуса. Расстояние между точками points[0] и points[1] определяет высоту конуса, угол конуса определяется из условия, что точка points[2] лежит на боковой поверхности конуса (рис. 4):
Рис. 4
При построении усеченного конуса точка множества points[0] определяет вершину конуса, точка points[1] определяет центр большего основания конуса и направление оси axisZ локальной системы координат конуса, точка points[2] определяет центр меньшего основания конуса, точка points[3] вместе с предыдущими точками определяет плоскость расположения осей axisX и axisZ локальной системы координат конуса. Расстояние между точками points[1] и points[2] определяет высоту усеченного конуса, угол конуса определяется из условия, что точка points[3] лежит на боковой поверхности конуса (рис. 5):
Рис. 5
При построении прямоугольного блока точки множества points[0] и points[1] определяют ребро и две вершины блока, точка points[2] вместе с предыдущими точками определяет плоскость нижнего основания блока. Через точку points[2] проходит ребро блока, параллельное ребру points[0]– points[1]. Точка points[3] определяет плоскость верхнего основания блока (рис. 6):
Рис. 6
При построении прямоугольного клина точки множества points[0] и points[1] определяют ребро и две вершины клина, точка points[2] вместе с предыдущими точками определяет плоскость нижнего основания клина и его вершину. Через точку points[2] проходит ребро клина, параллельное ребру points[0]– points[1]. Точка points[3] определяет плоскость верхнего основания клина (рис. 7):
Рис. 7
При построении плиты с цилиндрическими торцами точки множества points[0] и points[1] определяют ребро и две вершины плиты, точка points[2] вместе с предыдущими точками определяет плоскость нижнего основания пластины. Через точку points[2] проходит ребро плиты, параллельное ребру points[0]– points[1]. Точка points[3] определяет плоскость верхнего основания пластины (рис. 8):
Рис. 8
При построении прямой призмы точки points[0], points[1], …, points[n-1] определяют многоугольник основания. Высоту призмы определяет расстояние от плоскости нижнего основания до последней точки points[n]. На рис. 9 приведена прямая призма с пятиугольным основанием:
Рис. 9
При построении пирамиды с многоугольником в основании точки points[0], points[1], …, points[n-1] определяют многоугольник основания, последняя точка points[n] определяет вершину пирамиды. На рис. 10 приведена пирамида с пятиугольным основанием:
Рис. 10
Многоугольник основания призмы или пирамиды может быть произвольным.
При построении икосаэдра точки points[0], points[1], points[2] определяют вершины и плоскости всех граней фигуры (рис. 11):
Рис. 11
Построение элементарного тела по заданной поверхности
Для создания тел по элементарной поверхности необходимо использовать функцию ElementarySolid() с использованием следующего конструктора для инициализации объекта params с параметрами операции (см. op_shell_parameter.h):
MbElementarySolidParams( const SPtr<const MbElementarySurface> & surface,
const MbSNameMaker & operNames );
с параметрами:
surface — элементарная поверхность (сфера, тор, цилиндр, конус);
operNames — именователь операции.
Элементарной поверхностью может быть сфера MbSphere, поверхность тора MbTorus, цилиндрическая поверхность MbCylinder, коническая поверхность MbCone. На рис. 12 приведена сферическая поверхность и построенное по ней тело:
Рис. 12
На рис. 13 приведена поверхность тора и построенное по ней тело:
Рис. 13
На рис. 14 приведена цилиндрическая поверхность и построенное по ней тело:
Рис. 14
На рис. 15 приведена коническая поверхность и построенное по ней тело:
Рис. 15
Если перечисленные поверхности являются циклически замкнутыми, то построенные по ним тела будут иметь соответствующую форму. Если поверхность не является ни одной из перечисленных элементарных поверхностей, функция возвращает код ошибки rt_Error.
Функция ElementarySolid() добавляет в журнал построенного тела builder MbElementarySolid (объявлен в файле cr_elementary_solid.h).
В тестовом приложении test.exe построение элементарного тела выполняется командами меню «Создать→Тело→По точкам» и «Создать→Тело→На базе поверхности→По элементарной поверхности».