график::

Импорт графических файлов 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 и улучшает вычислительное время также. Однако это приводит к немного менее яркому изображению. Cf. Пример 2.

Данные о STL не включают информации о цвете. Следовательно, импортированное изображение реагирует на обычные настройки FillColor, FillColorType и т.д. для поверхностей MuPAD.

Также пользовательские функции управления цветом LineColorFunction и FillColorFunction могут использоваться, чтобы окрасить импортированную поверхность. Эти функции вызваны с индексом текущего треугольника как его первый параметр, сопровождаемый x, y и координатой z текущей точки.

Преобразование возражает plot::Rotate3d, plot::Scale3d, plot::Translate3d и plot::Transform3d могут быть применены к импортированному объекту STL. Cf. Пример 7.

Если объект типа, plot::SurfaceSTL должен быть построен вместе с другими объектами, нужно знать координаты объектов подложки. С этой целью объект S := plot::SurfaceSTL(...) предоставляет методам S::center и S::boundingBox.

Вызов S::center() возвращает список 3 значений с плавающей точкой, представляющих 3D центр объекта STL.

Вызов S::boundingBox() возвращает список 3 областей значений значений с плавающей точкой, представляющих области значений для x, y и координат z поверхности STL.

Смотрите пример 2 и пример 5.

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]
FillColorDirectionXx-компонент направления цветовых переходов на поверхностях0
FillColorDirectionYy-компонент направления цветовых переходов на поверхностях0
FillColorDirectionZz-компонент направления цветовых переходов на поверхностях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]
LineColorDirectionXx-компонент направления цветовых переходов на строках0
LineColorDirectionYy-компонент направления цветовых переходов на строках0
LineColorDirectionZz-компонент направления цветовых переходов на строках1
MeshVisibleвидимость неправильных строк mesh в 3DFALSE
Nameимя объекта графика (для браузера и легенды) 
ParameterEndзакончите значение параметра анимации 
ParameterNameимя параметра анимации 
ParameterBeginначальное значение параметра анимации 
ParameterRangeобласть значений параметра анимации 
PointSizeразмер точек1.5
PointStyleстиль презентации точекFilledCircles
PointsVisibleвидимость точек meshFALSE
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

Примеры

Пример 1

Следующая импортированная графика STL состоит приблизительно из 110 000 треугольников:

plot(plot::SurfaceSTL("hand.stl"),
     CameraDirection = [15, 13, 22])

Пример 2

По умолчанию нормали, заданные в графическом файле 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:

Пример 3

Следующая графика 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:

Пример 4

Для демонстрации дальнейших функций импорта файла 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)):

Пример 5

Мы строим объект, заданный в графическом файле STL Примера 4 с его ограничительной рамкой:

S := plot::SurfaceSTL(stlFile):
plot(S, plot::Box(op(S::boundingBox()), 
                  Color = RGB::Blue.[0.1])):

delete S:

Пример 6

Функция управления цветом 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:

Пример 7

Снова, мы строим объект графического файла 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):

Пример 8

Объекты 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:

Параметры

filename

Имя файла: символьная строка типа DOM_STRING.

filename эквивалентен атрибуту InputFile.

a

Параметр анимации, заданный как a = amin..amax, где amin является начальным значением параметров и amax, является итоговым значением параметров.

Опции

UseNormals

Опция, заданная как UseNormals = b

b может быть TRUE или FALSE. Этот атрибут задает, используются ли нормали, заданные в файле STL, для графика MuPAD.

Алгоритмы

Файлы примера 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, FACET, Facet и vertex, VERTEX, Vertex, соответственно.

Нормальный из фасета, заданного в файле STL, используется для всех его вершин при графическом выводе этого объекта. Вследствие того, что некоторые фасеты (треугольники) точки доли с другими единицами, эти точки построены с различными нормалями.

Смотрите также

Функции MuPAD

MuPAD графические примитивы