Твердотельная 3D-геометрия (класс Solid)#

Общий класс Solid не имеет конструктора. Содержит функции, порождающие твердотельную геометрию. Служит для построения 3D-геометрии объектов.

Порождающие функции#

Параллелепипед#

Четырехугольная призма, все грани которой являются прямоугольниками (прямоугольный параллелепипед).

CreateBlock(length, width, height, placement)#
Parameters:
  • length (Number) – Задает длину параллелепипеда.

  • width (Number) – Задает глубину параллелепипеда.

  • height (Number) – Задает высоту параллелепипеда.

  • placement (Placement3D) – (optional) Задает локальную систему координат, в которой строится тело. Если не задана, то для построения используется глобальная система координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример 1. Создание куба.#
1local detailedGeometry = ModelGeometry()
2local cubeSolid = CreateBlock(20, 20, 20)
3detailedGeometry:AddSolid(cubeSolid)
4Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Cube.png
Пример 2. Создание параллелепипеда.#
1local detailedGeometry = ModelGeometry()
2local boxSolid = CreateBlock(40, 15, 20)
3detailedGeometry:AddSolid(boxSolid)
4Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Box.png

Сфера#

CreateSphere(radius, originPoint)#
Parameters:
  • radius (Number) – Задает радиус сферы.

  • originPoint (Point3D) – (optional) Задает точку центра сферы. Если не задана, соответствует началу координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример 3.#
1local detailedGeometry = ModelGeometry()
2local bearingSolid = CreateSphere(10)
3detailedGeometry:AddSolid(bearingSolid:ShowTangentEdges(false))
4Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Sphere.png

Правильный круговой цилиндр#

Тело, ограниченное цилиндрической поверхностью и двумя параллельными плоскостями, пересекающими её.

CreateRightCircularCylinder(radius, height, placement)#
Parameters:
  • radius (Number) – Задает радиус цилиндра.

  • height (Number) – Задает высоту цилиндра.

  • placement (Placement3D) – (optional) Задает локальную систему координат, в которой строится тело. Если не задана, то для построения используется глобальная система координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример 4.#
1local detailedGeometry = ModelGeometry()
2local pinSolid = CreateRightCircularCylinder(10, 40)
3detailedGeometry:AddSolid(pinSolid:ShowTangentEdges(false))
4Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Cylinder.png

Правильный эллиптический цилиндр#

CreateRightEllipticalCylinder(halfRadiusX, halfRadiusY, height, placement)#
Parameters:
  • halfRadiusX (Number) – Задает радиус полуоси вдоль оси X.

  • halfRadiusY (Number) – Задает радиус полуоси вдоль оси Y.

  • height (Number) – Задает высоту цилиндра по оси Y.

  • placement (Placement3D) – (optional) Задает локальную систему координат, в которой строится тело. Если не задана, то для построения используется глобальная система координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Правильный круговой конус#

Прямой конус, основанием которого является окружность и ортогональная проекция вершины конуса на плоскость основания совпадает с этим центром.

CreateRightCircularCone(radius, height, placement)#
Parameters:
  • radius (Number) – Задает радиус конуса.

  • height (Number) – Задает высоту конуса.

  • placement (Placement3D) – (optional) Задает локальную систему координат, в которой строится тело. Если не задана, то для построения используется глобальная система координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример 5.#
1local detailedGeometry = ModelGeometry()
2local coneSolid = CreateRightCircularCone(10, 40)
3detailedGeometry:AddSolid(coneSolid:ShowTangentEdges(false))
4Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Cone.png

Правильная призма#

Основанием является многоугольник, заданый массивом точек-вершин. Боковые грани — прямоугольники.

CreateRightPrism({points}, height, placement)#
Parameters:
  • points (table of Points2D) – Задает таблицу точек, определяющих ребра многоугольника - основания призмы.

  • height (Number) – Задает высоту призмы.

  • placement (Placement3D) – (optional) Задает локальную систему координат, в которой строится тело. Если не задана, то для построения используется глобальная система координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пирамида с прямоугольным основанием#

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

CreateRectangularPyramid(width, depth, height, placement)#
Parameters:
  • width (Number) – Задает размер основания пирамиды по оси X.

  • depth (Number) – Задает размер основания пирамиды по оси Y.

  • height (Number) – Задает высоту пирамиды.

  • placement (Placement3D) – (optional) Задает локальную систему координат, в которой строится тело. Если не задана, то для построения используется глобальная система координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример 6.#
1local detailedGeometry = ModelGeometry()
2local baseSolid = CreateRectangularPyramid(25, 15, 20)
3detailedGeometry:AddSolid(baseSolid)
4Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Pyramid.png

Тело перемещения диска по пути#

Строится путем перемещения круглого диска по трехмерной кривой.

CreateSweptDiskSolid(radius, holeRadius, guideCurve)#
Parameters:
  • radius (Number) – Задает радиус круглого диска для перемещения по пути.

  • holeRadius (Number) – Задает радиус круглого отверстия в центре диска.

  • guideCurve (Curve3D) – Задает направляющую трёхмерную кривую.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Тело выдавливания#

Extrude(contour, extrusionParameters, placement)#
Parameters:
  • contour (Curve2D) – Задает плоский контур выдавливания.

  • extrusionParameters (ExtrusionParameters) – Задает дополнительные параметры построения.

  • placement (Placement3D) – (optional) Задает локальную систему координат, в которой строится тело. Если не задана, то для построения используется глобальная система координат.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Дополнительные параметры построения для функции Extrude#

ExtrusionParameters(ForwardDirectionDepth, ReverseDirectionDepth)#
Parameters:
  • ForwardDirectionDepth (Number) – Задает глубину выдавливания в прямом направлении.

  • ReverseDirectionDepth (Number) – (optional) Задает глубину выдавливания в обратном направлении. Значение по умолчанию равно 0.

MEMBERS:
  • OutwardOffset (Number) - Задает отступ наружу от образующей кривой. Значение по умолчанию равно 0.

  • InwardOffset (Number) - Задает отступ внутрь от образующей кривой. Значение по умолчанию равно 0.

Примечание

Используются для построения тонкостенного тела. При OutwardOffset = 0 и InwardOffset = 0 строится сплошное тело по контуру.

  • ForwardDirectionDraftAngle (Number) - Задает угол наклона при выдавливании в прямом направлении в радианах. Значение по умолчанию равно 0.

  • ReverseDirectionDraftAngle (Number) - Задает угол наклона при выдавливании в обратном направлении в радианах. Значение по умолчанию равно 0.

Примечание

При положительном значении происходит сужение. При отрицательном - расширение. Используются только при выдавливании по направлению вдоль оси Z.

  • Direction (Vector3D) - Задает направление выдавливания. По умолчанию равно направлению оси Z.

Пример 7. Построение полнотелого тела, путем задания контура и направления выдавливания - вертикально вверх.#
 1local detailedGeometry = ModelGeometry()
 2local points = {Point2D(0, 0),
 3                Point2D(0, 10),
 4                Point2D(10, 10),
 5                Point2D(10, 8),
 6                Point2D(8, 8),
 7                Point2D(8, 6),
 8                Point2D(6, 6),
 9                Point2D(6, 4),
10                Point2D(4, 4),
11                Point2D(4, 2),
12                Point2D(2, 2),
13                Point2D(2, 0),
14                Point2D(0, 0)}
15local extrusionContour = CreatePolyline2D(points)
16-- глубина выдавливания в прямом направлении = 40, в обратном направлении - по умолчанию = 0:
17local params = ExtrusionParameters(40)
18-- значения дополнительным атрибутам ExtrusionParameters() не задаем, значения принимаются по умолчанию
19local moldingSolid = Extrude(extrusionContour,
20                             params)
21detailedGeometry:AddSolid(moldingSolid)
22Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Extrusion.png
Пример 8. Построение тонкостенного тела, путем задания контура и направления выдавливания - вертикально вверх.#
 1local detailedGeometry = ModelGeometry()
 2local points = {Point2D(0, 0),
 3                Point2D(0, 10),
 4                Point2D(10, 10),
 5                Point2D(10, 8),
 6                Point2D(8, 8),
 7                Point2D(8, 6),
 8                Point2D(6, 6),
 9                Point2D(6, 4),
10                Point2D(4, 4),
11                Point2D(4, 2),
12                Point2D(2, 2),
13                Point2D(2, 0),
14                Point2D(0, 0)}
15local profileContour = CreatePolyline2D(points)
16-- глубина выдавливания в прямом направлении = 15, в обратном направлении - по умолчанию = 0:
17local params = ExtrusionParameters(15)
18-- толщина отступа наружу и внутрь относительно заданного контура = 0.5:
19params.OutwardOffset = params.InwardOffset = 0.5
20local thinSolid = Extrude(profileContour,
21                          params)
22detailedGeometry:AddSolid(thinSolid)
23Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/ExtrusionWithThickness.png

Построение тела по плоским сечениям#

Размер массива profiles должен быть равен размеру массива placements.

Loft({profiles}, {placements}, loftParameters)#
Parameters:
  • {profiles} (table of Curves2D) – Задает таблицу плоских контуров.

  • {placements} (table of Placements3D) – Задает таблицу координатных плоскостей в 3D пространстве.

  • loftParameters (LoftParameters) – (optional) Задает дополнительные параметры построения.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Дополнительные параметры построения для функции Loft#

LoftParameters()#
MEMBERS:
  • OutwardOffset (Number) - Задает отступ наружу от образующей кривой. Значение по умолчанию равно 0.

  • InwardOffset (Number) - Задает отступ внутрь от образующей кривой. Значение по умолчанию равно 0.

Примечание

Используются для построения тонкостенного тела. При OutwardOffset = 0 и InwardOffset = 0 строится сплошное тело по контуру.

  • GuideCurve (Curve3D) - (optional) Задает направляющую кривую. Если не задана, то соединение кривых будет осуществлено по кратчайшему пути.

  • ControlPoints (table of Points3D) - (optional) Задает контрольные точки. Если список точек не пустой, то он должен быть согласован со списком кривых сечений profiles и систем координат placements.

Примечание

С помощью контрольных точек управляется положение ребер, соединяющих вершины разных контуров множества profiles.

Пример 9.#
 1local detailedGeometry = ModelGeometry()
 2local profiles = {
 3    CreateRectangle2D(Point2D(0, 0), 0, 30, 30),
 4    CreateCircle2D(Point2D(0, 0), 10)}
 5local placements = {
 6    Placement3D(Point3D(0, 0, 0),
 7                Vector3D(1, 0, 0),
 8                Vector3D(0, 1, 0)),
 9    Placement3D(Point3D(40, 0, 0),
10                Vector3D(1, 0, 0),
11                Vector3D(0, 1, 0))}
12-- дополнительные параметры LoftParameters() не указаны, соединение контуров будет выполнятся по кратчайшему пути
13local loftedSolid = Loft(profiles, placements)
14detailedGeometry:AddSolid(loftedSolid)
15Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/CreateLoftedSolid.png
Пример 10.#
 1local detailedGeometry = ModelGeometry()
 2local profiles = {
 3    CreateRectangle2D(Point2D(0, 0), 0, 30, 30),
 4    CreateCircle2D(Point2D(0, 0), 10)}
 5local placements = {
 6    Placement3D(Point3D(0, 0, 0),
 7                Vector3D(1, 0, 0),
 8                Vector3D(0, 1, 0)),
 9    Placement3D(Point3D(30, 0, 30),
10                Vector3D(0, 0, 1),
11                Vector3D(1, 0, 0))}
12-- создаем направляющую кривую
13local guideArc3D = CreateArc3DByCenterStartEndPoints(Point3D(0, 0, 30),
14                                                    Point3D(0, 0, 0),
15                                                    Point3D(30, 0, 30),
16                                                    false)
17-- указываем направляющую кривую в дополнительных параметрах LoftParameters()
18local loftParams = LoftParameters()
19loftParams.GuideCurve = guideArc3D
20local loftedSolid = Loft(profiles, placements, loftParams)
21detailedGeometry:AddSolid(loftedSolid)
22Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/LoftedSolidByProfilesAndPath.png

Тело вращения#

Вращение плоского замкнутого контура вокруг заданной оси на указанный угол.

Revolve(contour, placement, axis, revolutionParameters)#
Parameters:
  • contour (Curve2D) – Задает плоский контур.

  • placement (Placement3D) – Задает координатную плоскость.

  • axis (Axis3D) – Задает ось вращения.

  • revolutionParameters (RevolutionParameters) – Задает дополнительные параметры построения.

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Дополнительные параметры построения для функции Revolve#

RevolutionParameters(counterClockwiseAngle)#
Parameters:

counterClockwiseAngle (Number) – Задает угол вращения против часовой стрелки в радианах.

MEMBERS:
  • OutwardOffset (Number) - Задает отступ наружу от образующей кривой. Значение по умолчанию равно 0.

  • InwardOffset (Number) - Задает отступ внутрь от образующей кривой. Значение по умолчанию равно 0.

Примечание

Используются для построения тонкостенного тела. При OutwardOffset = 0 и InwardOffset = 0 строится сплошное тело по контуру.

  • CounterClockwiseRotationAngle (Number) - Задает угол вращения против часовой стрелки в радианах.

  • ClockwiseRotationAngle (Number) - Задает угол вращения по часовой стрелке в радианах.

Пример 11.#
 1local detailedGeometry = ModelGeometry()
 2local placement = Placement3D(Point3D(0, 0, 0),
 3                            Vector3D(1, 0, 0),
 4                            Vector3D(0, 1, 0))
 5local contour = CreateRectangle2D(Point2D(0, 0), 0, 6, 15)
 6FilletCornerAfterSegment2D(contour, 3, 3)
 7FilletCornerAfterSegment2D(contour, 5, 3)
 8-- дополнительные параметры построение RevolutionParameters()
 9local params = RevolutionParameters(0)
10params.ClockwiseRotationAngle = math.rad(270)
11-- создание геометрии
12local revolutionSolid = Revolve(contour,
13                                placement,
14                                Axis3D(Point3D(0, 10, 0), Vector3D(0, -0.5, 1)),
15                                params)
16detailedGeometry:AddSolid(revolutionSolid:ShowTangentEdges(false))
17Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Revolution.png

Тело заметания#

Построение кинематического тела путем движения образующей кривой вдоль направляющей кривой.

Evolve(profile, placement, path, evolutionParameters)#
Parameters:
  • profile (Curve2D) – Задает образующую кривую.

  • placement (Placement3D) – Задает локальную систему координат, в плоскости XY которой располагается сечение.

  • path (Curve3D) – Задает направляющую кривую.

  • evolutionParameters (EvolutionParameters) – (optional) Задает дополнительные параметры

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Дополнительные параметры построения для функции Evolve#

EvolutionParameters()#
MEMBERS:
  • OutwardOffset (Number) - Задает отступ наружу от образующей кривой. Значение по умолчанию равно 0.

  • InwardOffset (Number) - Задает отступ внутрь от образующей кривой. Значение по умолчанию равно 0.

Примечание

Используются для построения тонкостенного тела. При OutwardOffset = 0 и InwardOffset = 0 строится сплошное тело по контуру.

Методы класса#

Общие методы твердотельной геометрии Solid.

  • Сместить по осям X, Y, Z

:Shift(dX, dY, dZ)
Parameters:
  • dX (Number) – Задает смещение по оси X.

  • dY (Number) – Задает смещение по оси Y.

  • dZ (Number) – Задает смещение по оси Z.

  • Повернуть относительно оси

:Rotate(axis, angle)
Parameters:
  • axis (Axis3D) – Задает ось вращения.

  • angle (Number) – Задает угол поворота в радианах.

  • Масштабировать относительно точки

:Scale(point, xScale, yScale,zScale)
Parameters:
  • point (Point3D) – Задает точку центра масштабирования.

  • xScale (Number) – Задает коэффициент масштабирования по оси X.

  • yScale (Number) – Задает коэффициент масштабирования по оси Y.

  • yScale – Задает коэффициент масштабирования по оси Z.

  • Преобразовать согласно матрице

:Transform(matrix)
Parameters:

matrix (Matrix3D) – Задает матрицу преобразования в трёхмерном пространстве.

  • Вернуть копию объекта

:Clone()
Returns:

Копия твердотельной 3D-геометрии

Return type:

Solid

  • Установить видимость рёбер на гладких стыках граней

:ShowTangentEdges(isShowing)
Parameters:

isShowing (Boolean) – Устанавливает видимость рёбер на гладких стыках граней. True - видны, False - скрыты.

Операторы#

  • Проверить равенство с другой твёрдотельной 3D-геометрией

==
Результат:

Логическое значение

Тип результата:

Boolean

  • Проверить неравенство с другой твёрдотельной 3D-геометрией

~=
Результат:

Логическое значение

Тип результата:

Boolean

Функции, не члены класса#

  • Булевое сложение

Перегрузка 1:

Unite(solid1, solid2)#
Parameters:
  • solid1 (Solid) – Задает первый операнд операции

  • solid2 (Solid) – Задает второй операнд операции

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Перегрузка 2:

Unite({solids})
Parameters:

solids (table of Solids) – Задает таблицу, содержащую твердотельные тела

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример кода:

Пример 12.#
1local detailedGeometry = ModelGeometry()
2local cube = CreateBlock(20, 20, 20)
3local sphere = CreateSphere(10)
4local compoundSolid = Unite(cube, sphere:Shift(10, 0, 20)):ShowTangentEdges(false)
5detailedGeometry:AddSolid(compoundSolid)
6Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Add_3D.png
  • Булевое вычитание

Subtract(solid1, solid2)#
Parameters:
  • solid1 (Solid) – Задает первый операнд операции

  • solid2 (Solid) – Задает второй операнд операции

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример кода:

Пример 13.#
1local detailedGeometry = ModelGeometry()
2local cube = CreateBlock(20, 20, 20)
3local sphere = CreateSphere(10)
4local compoundSolid = Subtract(cube, sphere:Shift(10, 0, 20)):ShowTangentEdges(false)
5detailedGeometry:AddSolid(compoundSolid)
6Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Sub_3D.png
  • Булевое пересечение

Intersect(solid1, solid2)#
Parameters:
  • solid1 (Solid) – Задает первый операнд операции

  • solid2 (Solid) – Задает второй операнд операции

Returns:

Твердотельная 3D-геометрия.

Return type:

Solid

Пример кода:

Пример 13.#
1local detailedGeometry = ModelGeometry()
2local cube = CreateBlock(20, 20, 20)
3local sphere = CreateSphere(10)
4local compoundSolid = Intersect(cube, sphere:Shift(10, 0, 20)):ShowTangentEdges(false)
5detailedGeometry:AddSolid(compoundSolid)
6Style.SetDetailedGeometry(detailedGeometry)

Результат:

_images/Intersect_3D.png