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, используется во всех своих вершинах при графическом выводе этого объекта. Вследствие того, что некоторые фасеты (треугольники) точки доли с другими единицами, эти точки построены с различными нормалями.