plot::SurfaceSTLИмпорт графических файлов STL
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
plot::SurfaceSTL(filename, <UseNormals = b>, <a = amin .. amax>, options)
plot::SurfaceSTL(filename) создает 3D объект подложки из данных данного графического файла STL, названного “filename”.
Стереолитография (STL) файлы была введена в программном обеспечении 3D Системами Валенсии, CA, как простой метод того, чтобы хранить информацию о 3D объектах.
Файлы STL содержат данные о триангуляции 3D поверхностей. Каждый треугольник хранится как нормальный модуль и три вершины. Нормальное и вершины заданы тремя координатами каждый, таким образом, существует в общей сложности 12 чисел, сохраненных для каждого треугольника. Считайте раздел 'Background' этой страницы справки для получения дальнейшей информации.
В зависимости от вашего оборудования мы рекомендуем построить объекты STL больше чем без 50 000 - 150 000 фасетов (треугольники). Необходимо активировать опцию ‘Accelerate OpenGL®’ в меню параметров VCam.
plot::SurfaceSTL реагирует на переменную окружения MuPAD® READPATH. Например, после
>> READPATH := READPATH, "C:\\STLFILES":
файл ‘C:\STLFILES\xyz.stl’найден командой
>> S := plot::SurfaceSTL("xyz.stl"):
В качестве альтернативы имя файла может быть задано как абсолютный путь:
>> S := plot::SurfaceSTL("C:\\STLFILES\\xyz.stl"):
Если блокнот MuPAD был сохранен в файл, его местоположение доступно в блокноте как переменная окружения NOTEBOOKPATH. Если ваш файл STL находится в той же папке как блокнот, можно вызвать
>> S := plot::SurfaceSTL(NOTEBOOKPATH."xyz.stl"):
При установке атрибута UseNormals к FALSE, нормали, заданные в графическом файле STL, проигнорированы при графическом выводе объекта в MuPAD. Это уменьшает объем данных графического объекта на сеансе MuPAD и улучшает вычислительное время также. Однако это приводит к немного менее яркому изображению. См. Пример 2.
Данные о STL не включают информации о цвете. Следовательно, импортированное изображение реагирует на обычные настройки FillColor, FillColorType и т.д. для поверхностей MuPAD.
Также пользовательские функции управления цветом LineColorFunction и FillColorFunction может использоваться, чтобы окрасить импортированную поверхность. Эти функции вызваны с индексом текущего треугольника как его первый параметр, сопровождаемый x, y и координатой z текущей точки.
Преобразование возражает plot::Rotate3d, plot::Scale3d, plot::Translate3d и plot::Transform3d может быть применен к импортированному объекту STL. См. Пример 7.
Если объект типа plot::SurfaceSTL должен быть построен вместе с другими объектами, нужно знать координаты объектов подложки. С этой целью, объект S := plot::SurfaceSTL(...) предоставляет методам S::center и S::boundingBox.
Вызов S::center() возвращает список 3 значений с плавающей точкой, представляющих 3D центр объекта STL.
Вызов S::boundingBox() возвращает список 3 областей значений значений с плавающей точкой, представляющих области значений для x, y и координат z поверхности STL.
plot::SurfaceSTL::center(S) и plot::SurfaceSTL::boundingBox(S), соответственно, альтернативные вызовы.
Обратите внимание на то, что графический файл STL должен быть считан полностью из вычисления этих данных. Также обратите внимание что после первого вызова S::center() или S::boundingBox(), данные не повторно вычисляются этими функциями даже если объект STL S изменился. Используйте plot::SurfaceSTL::center(S), plot::SurfaceSTL::boundingBox(S) в таком случае.
| Атрибут | Цель | Значение по умолчанию |
|---|---|---|
AffectViewingBox | влияние объектов на ViewingBox из сцены | TRUE |
Color | основной цвет | RGB::Red |
Filled | заполненные или прозрачные области и поверхности | TRUE |
FillColor | цвет областей и поверхностей | RGB::Red |
FillColor2 | второй цвет областей и поверхностей для цветных смешений | RGB::CornflowerBlue |
FillColorType | типы заполнения поверхности | Dichromatic |
FillColorFunction | функциональная область / поверхностная окраска | |
FillColorDirection | направление цветовых переходов на поверхностях | [0, 0, 1] |
FillColorDirectionX | x-компонент направления цветовых переходов на поверхностях | 0 |
FillColorDirectionY | y-компонент направления цветовых переходов на поверхностях | 0 |
FillColorDirectionZ | z-компонент направления цветовых переходов на поверхностях | 1 |
Frames | количество систем координат в анимации | 50 |
InputFile | введите файл для функций импорта | |
Legend | делает запись легенды | |
LegendText | короткий объяснительный текст для легенды | |
LegendEntry | добавить этот объект в легенду? | FALSE |
LineColor | цвет линий | RGB::Black.[0.25] |
LineWidth | ширина линий | 0.35 |
LineColor2 | цвет линий | RGB::DeepPink |
LineStyle | тело, подчеркнутые штриховой линией или пунктирные линии? | Solid |
LineColorType | типы окраски линии | Flat |
LineColorFunction | функциональная окраска линии | |
LineColorDirection | направление цветовых переходов на линиях | [0, 0, 1] |
LineColorDirectionX | x-компонент направления цветовых переходов на линиях | 0 |
LineColorDirectionY | y-компонент направления цветовых переходов на линиях | 0 |
LineColorDirectionZ | z-компонент направления цветовых переходов на линиях | 1 |
MeshVisible | видимость неправильных линий mesh в 3D | FALSE |
Name | имя объекта графика (для браузера и легенды) | |
ParameterEnd | закончите значение параметра анимации | |
ParameterName | имя параметра анимации | |
ParameterBegin | начальное значение параметра анимации | |
ParameterRange | область значений параметра анимации | |
PointSize | размер точек | 1.5 |
PointStyle | стиль презентации точек | FilledCircles |
PointsVisible | видимость точек mesh | FALSE |
Shading | сглаживайте цветное смешение поверхностей | Smooth |
TimeEnd | время окончания анимации | 10.0 |
TimeBegin | время начала анимации | 0.0 |
TimeRange | оперативный промежуток анимации | 0.0.. 10.0 |
Title | объектный заголовок | |
TitleFont | шрифт объектных заголовков | [" sans-serif ", 11] |
TitlePosition | положение объектных заголовков | |
TitleAlignment | выравнивание по горизонтали заголовков w.r.t. их координаты | Center |
TitlePositionX | положение объектных заголовков, x компонент | |
TitlePositionY | положение объектных заголовков, y компонент | |
TitlePositionZ | положение объектных заголовков, z компонент | |
UseNormals | использовать предопределенные нормали? | TRUE |
Visible | видимость | TRUE |
VisibleAfter | объект, видимый после этой временной стоимости | |
VisibleBefore | объект, видимый до этой временной стоимости | |
VisibleFromTo | объект, видимый в это время, располагается | |
VisibleAfterEnd | объект, видимый после его законченного времени анимации? | TRUE |
VisibleBeforeBegin | объект, видимый перед его временем анимации, запускается? | TRUE |
Следующая импортированная графика STL состоит приблизительно из 110 000 треугольников:
plot(plot::SurfaceSTL("hand.stl"),
CameraDirection = [15, 13, 22])
По умолчанию нормали, заданные в графическом файле STL, используются при графическом выводе объекта в MuPAD. Подавление использования этих нормалей может уменьшать объем данных графического объекта и ускорить графический вывод. Однако в целом это приводит к немного менее ярким изображениям. Для сравнения следующая графика STL построена с и не используя ее нормали:
S1 := plot::SurfaceSTL("skin.stl"):
S2 := plot::SurfaceSTL("skin.stl", UseNormals = FALSE):
plot(plot::Scene3d(S1), plot::Scene3d(S2), Layout = Vertical,
Width = 120*unit::mm, Height = 140*unit::mm,
Axes = None, BackgroundStyle = Pyramid):
Мы вычисляем центр и ограничительную рамку поверхности:
S1::center()
![]()
S1::boundingBox()
![]()
Мы вращаем объект вокруг его центра:
plot(plot::Rotate3d(a, S1::center(), [0, 0, 1], S1,
a = 0..2*PI), Axes = None)
delete S1, S2:
Следующая графика STL отображена как поверхностная модель и как каркасная модель:
nut := plot::SurfaceSTL("nut.stl"):
plot(plot::Scene3d(nut, CameraDirection = [10, 15, 30]),
plot::Scene3d(nut, CameraDirection = [10, 15, 30],
MeshVisible = TRUE, Filled = FALSE,
LineColor = RGB::Black),
Axes = None, Layout = Horizontal,
BackgroundStyle = Pyramid):
delete nut:
Для демонстрации дальнейших функций импорта файла STL мы сначала создаем наш собственный графический файл STL, который задает четырехгранник:
stlFile := "demo.stl":
fprint(Unquoted, Text, stlFile,
"SOLID TRI
FACET NORMAL 0.0 0.0 -1.0
OUTER LOOP
VERTEX -1.5 -1.5 1.4
VERTEX 0.0 1.7 1.4
VERTEX 1.5 -1.5 1.4
ENDLOOP
ENDFACET
FACET NORMAL 0.0 0.88148 0.472221
OUTER LOOP
VERTEX -1.5 -1.5 1.4
VERTEX 1.5 -1.5 1.4
VERTEX 0.0 0.0 -1.4
ENDLOOP
ENDFACET
FACET NORMAL -0.876814 -0.411007 0.24954
OUTER LOOP
VERTEX 1.5 -1.5 1.4
VERTEX 0.0 1.7 1.4
VERTEX 0.0 0.0 -1.4
ENDLOOP
ENDFACET
FACET NORMAL 0.876814 -0.411007 0.24954
OUTER LOOP
VERTEX 0.0 1.7 1.4
VERTEX -1.5 -1.5 1.4
VERTEX 0.0 0.0 -1.4
ENDLOOP
ENDFACET
ENDSOLID TRI"
)Этот графический файл STL импортируется как объект графика MuPAD и представляется:
plot(plot::SurfaceSTL(stlFile, MeshVisible = TRUE)):

Мы создаем другой файл STL с помощью export::stl. Это содержит сферу радиуса 1 параметризованный сферическими координатами:
export::stl("sphere.stl", [cos(u)*sin(v), sin(u)*sin(v), cos(v)],
u = 0 .. 2*PI, v = 0 .. 2*PI,
Mesh = [50, 50], Scaling = Constrained,
OutputBox = [-1 .. 1, -1 .. 1, -1 .. 1]):plot(plot::SurfaceSTL("sphere.stl", Scaling = Constrained)):
Мы строим объект, заданный в графическом файле STL Примера 4 с его ограничительной рамкой:
S := plot::SurfaceSTL(stlFile):
plot(S, plot::Box(op(S::boundingBox()),
Color = RGB::Blue.[0.1])):
delete S:
Функция управления цветом FillColorFunction может быть задан. Первый параметр при вызове -- индекс текущей грани, далее x -, y - и z - координата текущей точки.
Мы используем объект, заданный в графическом файле STL Примера 4:
mycolorlist:= [RGB::Red, RGB::Blue, RGB::Green, RGB::Yellow]:
plot(plot::Scene3d(plot::SurfaceSTL(stlFile,
FillColorFunction =
proc(n, x, y, z) begin
mycolorlist[n]
end_proc)),
plot::Scene3d(plot::SurfaceSTL(stlFile,
FillColorFunction =
proc(n, x, y, z) begin
[abs(x)/2, abs(y)/2, abs(z)/2]
end_proc)),
Axes = None, Layout = Horizontal):
Мы задаем LineColorFunction:
plot(plot::Scene3d(plot::SurfaceSTL(stlFile,
LineColorFunction =
proc(n, x, y, z) begin
mycolorlist[n]
end_proc)),
plot::Scene3d(plot::SurfaceSTL(stlFile,
LineColorFunction =
proc(n, x, y, z) begin
[abs(x)/2, abs(y)/2, abs(z)/2]
end_proc)),
Axes = None, Filled = FALSE, MeshVisible = TRUE,
LineWidth = 2*unit::mm, Layout = Horizontal):
delete mycolorlist:
Снова, мы строим объект графического файла STL, заданного в Примере 4. Здесь, мы добавляем вращаемые, масштабируемые и переведенные копии:
plot(
plot::Scene3d(
plot::SurfaceSTL(stlFile),
plot::Scale3d([2, 2, 2],
plot::SurfaceSTL(stlFile, Color = RGB::Blue.[0.1])
)
),
plot::Scene3d(
plot::SurfaceSTL(stlFile),
plot::Rotate3d(PI, Axis = [1, 0, 0],
plot::SurfaceSTL(stlFile, Color = RGB::Blue.[0.1])
)
),
plot::Scene3d(
plot::SurfaceSTL(stlFile),
plot::Translate3d([1, 1, 1],
plot::SurfaceSTL(stlFile, Color = RGB::Blue.[0.1])
)
),
plot::Scene3d(
plot::SurfaceSTL(stlFile),
plot::Transform3d([0, 0, 0], [1, 0, 0, 0, 1, 0, 0, 0, -1],
plot::SurfaceSTL(stlFile, Color = RGB::Blue.[0.1])
)
),
Width = 120*unit::mm, Height = 120*unit::mm):
Объекты STL могут быть анимированы. Четырехгранник, заданный в Примере 4, перемещает поле:
SO := plot::SurfaceSTL(stlFile):
BO := plot::Box(op(SO::boundingBox(SO)), Color = RGB::Blue.[0.1]):
GO := [6*sin(a), -6*cos(a), 4*cos(2*a)], a = 0..2*PI:
CU := plot::Curve3d(GO):
plot(BO, CU, plot::Translate3d(GO, SO),
ViewingBox = [-8..8, -8..8, -6..6]):
Ниже, функция управления цветом FillColorFunction из STL анимирован объект:
plot(plot::SurfaceSTL(stlFile,
MeshVisible = TRUE,
LineColor = RGB::Black,
FillColorFunction =
proc(n, x, y, z) begin
[sin(x + a)^2 ,sin(y + a)^2, sin(z + a)^2]
end_proc,
a = 0..2*PI, TimeRange = 1..4),
Axes = None, Layout = Horizontal)
delete SO, BO, GO, CU, stlFile:
|
Имя файла: символьная строка типа
|
|
Параметр анимации, заданный как |
|
Опция, заданная как
|
Файлы примера STL, представленные на этой странице справки, были взяты из FTP-сайта Университета Клемсона, Южная Каролина, США:
ftp.vr.clemson.edu/pub/rp/STL_objects.
Существует два формата устройства хранения данных, доступные для файлов STL, которые являются ASCII и ДВОИЧНЫМ ФАЙЛОМ. ASCII-файлы человекочитаемы, в то время как Двоичные файлы меньше и быстрее к процессу. Оба формата могут быть считаны plot::SurfaceSTL. Типичный файл STL ASCII выглядит так:
solid sample
facet normal -4.470293E-02 7.003503E-01 -7.123981E-01
outer loop
vertex -2.812284E+00 2.298693E+01 0.000000E+00
vertex -2.812284E+00 2.296699E+01 -1.960784E-02
vertex -3.124760E+00 2.296699E+01 0.000000E+00
endloop
endfacet
...
endsolid sample
Двоичные файлы STL имеют следующий формат:
Bytes Type Description
80 ASCII header, no data significance
4 uint number of facets in file
4 float normal x - start of facet
4 float normal y
4 float normal z
4 float vertex1 x
4 float vertex1 y
4 float vertex1 z
4 float vertex2 x
4 float vertex2 y
4 float vertex2 z
4 float vertex3 x
4 float vertex3 y
4 float vertex3 z
2 byte not used - end of facet
...
Фасетная ориентация: фасеты задают поверхность 3D объекта. По сути, каждый фасет является частью контура между внутренней частью и внешним видом объекта. Ориентация фасетов (какой путь отсутствует и в котором находится путь) задана избыточно двумя способами, которые должны быть сопоставимыми. Во-первых, направление нормального является исходящим. Во-вторых, который обычно используется в наше время, фасетные вершины перечислены в против часовой стрелки порядке при рассмотрении объекта от внешнего (правило правой руки).
Правило от вершины к вершине: Каждый треугольник должен совместно использовать две вершины с каждым из его смежных треугольников. Другими словами, вершина одного треугольника не может лечь на сторону другого.
Оси: формат указывает, что все координаты вершины должны быть строго положительными числами. Однако кажется, что — за немногим исключением — большая часть программного обеспечения, используемого сегодня (включенный MuPAD), позволяет отрицательные координаты также.
Модули: файл STL не содержит информации о шкале; координаты могут быть интерпретированы в произвольных модулях.
Более подробная информация о формате файла STL доступна в сети, например, в:
www.ennex.com/fabbers/StL.asp,
www.math.iastate.edu/burkardt/data/stl/stl.html и
rpdrc.ic.polyu.edu.hk/content/stl/stl_introduction.htm.
Наборы файлов примера STL могут быть найдены в сети, например, в:
www.wohlersassociates.com/Software-for-Rapid-Prototyping.html и
www.cs.duke.edu / ~ edels/Tubes.
Информация о технологиях быстрого прототипирования доступна в сети, например, в:
www.cs.hut.fi / ~ ado/rp/rp.html.
Обратите внимание на то, что MuPAD только принимает следующие обозначения для ключевых слов “facet” и “vertex” в STL ASCII-файлы: facetФасетФасет и vertex, VERTEX, Vertex, соответственно.
Нормальный из фасета, заданного в файле STL, используется во всех своих вершинах при графическом выводе этого объекта. Вследствие того, что некоторые фасеты (треугольники) точки доли с другими единицами, эти точки построены с различными нормалями.