Базовые приемы

Описание демо-примера

Расположение

C:\SimInTech64\Demo\Визуализация и анимация\3D-визуализация\Базовые приемы

Описание

Примеры демонстрируют работу со скриптовыми функции языка программирования, позволяющими производить различные операции с модулем 3D-визуализации.

В таблице приведено описание примеров, применяемые в примере функции и их назначение.

Выполнение каждого демо примера начинается с создания окна 3D визуализации (Id = Viewer3DCreate или Id = Viewer3DCreateWindow). Функции выполняют создание окна 3D-визуализации. Функции используются в секции инициализации. Id - идентификатор созданного окна визуализации.

Название демо Описание демо Применяемые функции Описание функций
Видимость 3D-объекта Пример демонстрирует работу флага видимости 3D-объекта. См. скрипт проекта. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetVisibility(Id, ObjId, vis) Viewer3DSetVisibility(Id, ObjId, vis) - функция управляет видимостью 3D-объекта ObjID в окне Id согласно заданному аргументу vis. (vis=0 - объект не виден, vis=1 - объект виден).
Видимость горизонтальной координатной сетки Пример демонстрирует работу флага видимости горизонтальной координатной сетки. Viewer3DSetGridVisibility(Id, flag); Viewer3DSetGridVisibility(Id, flag) - функция задания видимости сетки на плоскости Y=0. Flag - флаг видимости сетки (flag=true - сетка видна, flag=false - сетка не видна).
Видимость нодализационной сетки Пример демонстрирует работу флага видимости нодализационной сетки для 3D-объектов. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetNodeGridVisibility (Id, flag); Viewer3DSetNodeGridVisibility (Id, flag) - функция задания видимости нодализационной сетки 3D-примитивов. Flag - флаг видимости сетки (flag=true - сетка видна, flag=false - сетка не видна).
Видимость осей ГСК Пример демонстрирует работу флага видимости осей ГСК. Viewer3DSetAxesVisibility(Id, flag); Viewer3DSetAxesVisibility(Id, flag) - функция задания видимости осей ГСК. Flag - флаг видимости осей (flag=true - оси видны, flag=false - оси не видны).
Видимость осей ЛСК 3D объекта Пример демонстрирует работу флага видимости осей ЛСК, связанной с 3D-объектом. Viewer3DShowObjAxes(Id, ObjId, flag); Viewer3DShowObjAxes(Id, ObjId, flag) - функция задания видимости осей локальной системы координат 3D-примитива ObjId в окне Id. Flag - флаг видимости осей (flag=true - оси видны, flag=false - оси не видны).
Вращение 3D объекта в ЛСК относительно заданной оси Пример демонстрирует вращение 3D объекта в связанной с ним ЛСК вокруг оси (1, 0, 1) со скоростью 90 градусов/с. ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id.
Viewer3DRotate(Id, ObjId, Xr, Yr, Zr, Angle); Viewer3DRotate(Id, ObjId, Xr, Yr, Zr, Angle) - функция выполняет вращение примитива вокруг заданной оси (Xr, Yr, Zr) на заданный угол Angle.
Вывод текстовой информации на окно 3D визуализации Пример демонстрирует возможность вывода произвольной текстовой информации на окно 3D-визуализации. Размеры задаются в количестве пикселей. ObjID = Viewer3DPlotTextLabel(Id, text, X, Y, Z, h, col); Viewer3DPlotTextLabel(Id, text, X, Y, Z, h, col) - функция создания текстового лейбла на окне. text - текст для отображения, задается в кавычках либо в виде переменной типа string; (X, Y, Z) - координаты текстовой подписи в пространстве окна; h - высота текста; col - цвет текста.
Viewer3DSetTextLabel(Id, ObjId, text) Viewer3DSetTextLabel(Id, ObjId, text) - функция установки текста для текстового лейбла. text - текст для отображения, задается в кавычках либо в виде переменной типа string.
Задание вектров Up и Direction 3D-объекта На этапе инициализации выполняется поворот 3D-объекта, за счет задания векторов Up (направление собственной координатной оси Y 3D-объекта в его ЛСК) и Direction (направление собственной координатной оси Z 3D-объекта в его ЛСК). ObjId = Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z); Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z) - функция создания параллелеипеда с шириной width, длиной length и высотой heigth в точке с координатами (X, Y, Z) окна с идентификатором Id.
Viewer3DSetUp(Id, ObjId, X, Y, Z); Viewer3DSetUp(Id, ObjId, X, Y, Z) - функция установки координатной оси Y объекта в ЛСК в направлении вектора, заданного координатами (X, Y, Z).
Viewer3DSetDirection(Id, ObjId, X, Y, Z); Viewer3DSetDirection(Id, ObjId, X, Y, Z) - функция установки координатной оси Z объекта в ЛСК в направлении вектора, заданного координатами (X, Y, Z).
Задание имени 3D-объекта На этапе инициализации выполняется задание имени для созданного 3D-объекта. Имена отображаются в дереве объектов. ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id.
Viewer3DSetObjName(Id, ObjId, "name"); Viewer3DSetObjName(Id, ObjId, "name") - функция задает новое имя name 3D объекта.
Задание координат 3D-объекта в ЛСК На этапе инициализации задется смещение 3D-объекта относительно ЛСК, связанной с ним. ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id.
Viewer3DSetLocalDispl(Id, ObjId, Xloc, Yloc, Zloc); Viewer3DSetLocalDispl(Id, ObjId, Xloc, Yloc, Zloc) - функция смещает 3D объект относительно его ЛСК в точку (Xloc, Yloc, Zloc).
Задание координат камеры Пример демонстрирует изменение координат базовой точки камеры в динамике по закону: [0, sin(time), 0], где time - текущее модельное время. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetCameraPosition(Id, X, Y, Z); Viewer3DSetCameraPosition(Id, X, Y, Z) - функция устанавливает координаты базовой точки камеры.
Задание координат ЛСК 3D-объекта в динамике В процессе расчета координаты ЛСК, связанной с созданным 3D-объектом, и, следовательно, положение самого 3D-объекта относительно ГСК меняются по закону: [0, sin(time), 0], где time - текущее модельное время. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetPosition(Id, ObjId, X, Y, Z); Viewer3DSetPosition(Id, ObjId, X, Y, Z) - функция выполняет задание новых координат ЛСК для объекта относительно ГСК.
Задание углов Эйлера ЛСК 3D-объекта в динамике В процессе расчета углы Эйлера ЛСК, связанной с созданным 3D-объектом, и, следовательно, углы Эйлера самого 3D-объекта меняются по закону: [90*sin(time), 90*sin(time), 0], где time - текущее модельное время. ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id.
Viewer3DSetEulerAngles (Id, OId, alfa, beta, gamma); Viewer3DSetEulerAngles (Id, OId, alfa, beta, gamma) - функция выполняет задание углов Эйлера (угол прецессии, угол нутации и угол собственного вращения) связанной с объектом ЛСК. ЛСК получает заданные уголы поворота, а вместе с ней поворачивается и сам объект.
Задание цели камеры Пример демонстрирует возможность задания 3D-объекта в качестве цели камеры. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetCameraTarget(Id, ObjId); Viewer3DSetCameraTarget(Id, ObjId) - функция задания 3D-объекта в качестве цели камеры.
Viewer3DSetPosition(Id, ObjId, X, Y, Z); Viewer3DSetPosition(Id, ObjId, X, Y, Z) - функция выполняет задание новых координат ЛСК для объекта относительно ГСК.
Массовое удаление 3D-объектов На этапе инициализации выполняется рендеринг сфер радиусом 1 м в точке (0,0,0) для всех существующих окон 3D-визуализации. На этапе финализации все 3D-объекты, созданные из скрипта, уничтожаются. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DRemoveScriptObjects(Id) Viewer3DRemoveScriptObjects(Id) - функция удаления всех созданных из скрипта 3D-объектов в окне.
Масштабирование 3D-объекта В процессе расчета выполняется масштабирование 3D-объекта относительно собственных координтаных осей по следующему закону: [50+40*sin(time), 50+40*sin(time), 50+40*sin(time)], где time - текущее модельное время. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetScale(Id, OId, Xscale, Yscale, Zscale); Viewer3DSetScale(Id, OId, Xscale, Yscale, Zscale) - функция выполняет масштабирование 3D-объекта согласно заданному по осям масштабу в процентах.
Поворот 3D-объекта в ЛСК относительно собственных осей В процессе расчета 3D-объект поворачивается на 90 градусов вокруг осей X, Z и Y связанной с ним ЛСК по заданному в схемном окне проекта закону. ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id.
Viewer3DSetNodeGridVisibility (Id, flag); Viewer3DSetNodeGridVisibility (Id, flag) - функция задания видимости нодализационной сетки 3D-примитивов. Flag - флаг видимости сетки (flag=true - сетка видна, flag=false - сетка не видна).
Viewer3DSetPitch(Id, ObjId, Angle); Viewer3DSetPitch(Id, ObjId, Angle) - функция выполняет поворот объекта в окне вокруг его оси X на заданный угол Angle.
Viewer3DSetRoll (Id, ObjId, Angle); Viewer3DSetRoll (Id, ObjId, Angle) - функция выполняет поворот объекта в окне вокруг его оси Z на заданный угол Angle.
Viewer3DSetTurn (Id, ObjId, Angle); Viewer3DSetTurn (Id, ObjId, Angle) - функция выполняет поворот объекта в окне вокруг его оси Y на заданный угол Angle.
Получение Id окон 3D-визуализации На этапе инициализации выполняется создание окон 3D-визуализации. Далее при помощи функции Viewer3DGetWindowList находится массив ID всех существующих окон 3D-визуализации. Id = Viewer3DGetWindowList; Viewer3DGetWindowList - функция позволяет получить Id всех существующих окон, функция возвращает массив идентификаторов всех окон.
Рендеринг 3D-объекта из файла На этапе инициализации выполняется рендеринг 3D-объекта из файла. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,0,0). ObjId = Viewer3DPlotFromFile(Id path, X, Y, Z, c); Viewer3DPlotFromFile(Id path, X, Y, Z, c) - функция выполняет создание 3D-объекта в окне, расположенного по пути path, в точке (X, Y, Z). c - целочисленный массив атрибутов для центрирования примитива (1 – центрирование по оси X, 2 – центрирование по оси Y, 3 – центрирование по оси Z, 4 – центрирование по барицентру, 0 – центрирование по умолчанию).

Прим.: список поддерживаемых форматов 3D: *.glsm, *.obj, *.objf, *.stl, *.lwo, *.q3bsp, *.bsp, *.oct, *.ms3d, *.nmf, *.md3, *.3ds, *.prj, *.md2, *.smd, *.ply, *.gts, *.wrl, *.md5mesh, *.md5anim, *.tin, *.dxf, *.grd.

Рендеринг параллелепипеда На этапе инициализации выполняется рендеринг 3D-примитива параллелепипеда. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,-1,-1). ObjId = Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z); Viewer3DPlotParallelepiped(Id, width, length, height, X, Y, Z) - функция создания параллелеипеда с шириной width, длиной length и высотой heigth в точке с координатами (X, Y, Z) окна с идентификатором Id.
Рендеринг сферы На этапе инициализации выполняется рендеринг 3D-примитива сферы радиусом 1 м. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,-1,-1). ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Рендеринг усеченного конуса На этапе инициализации выполняется рендеринг 3D-примитива усеченного конуса. При этом начало локальной системы координат, связанной с 3D-объектом, находится в точке (0,-1,-1). ObjID = Viewer3DPlotCone(Id, RDO, RDI, RUO, RUI, h, X, Y, Z); Viewer3DPlotCone(view3d, RDO, RDI, RUO, RUI, h, X, Y, Z) - функция выполняет создаение конуса с внешним радиусов нижнего основания RDO, с внутренним радиусов нижнего основания RDI, внешним радиусом верхнего основания RUO, внутренним радиусом верхнего основания RUI, с высотой h в точке (X, Y, Z) окна с идентификатором Id.
Создание окна без автоматического уничтожения На этапе инициализации создается новое окно 3D-визуализации. Id = Viewer3DCreateWindow; Viewer3DCreateWindow - функция выполняет создание окна 3D-визуализации без привязки к скриптовой функции. Каждый раз при выполнении функции создается новое окно.
Создание окна с автоматическим уничтожением На этапе инициализации создается новое окно 3D-визуализации. При этом окно, созданное данной функцией ранее, автоматически уничтожается. Id = Viewer3DCreate; Viewer3DCreate - функция выполняет создание окна 3D-визуализации с привязкой к скриптовой функции. Окно 3D-визуализации получает привязку к конкретной скриптовой функции (строке кода), создавшей данное окно. Каждый раз при выполнении функции связанное с ней окно уничтожается и создается новое.
Степень прозрачности 3D-объекта Пример демонстрирует возможность задания степени прозрачности 3D-объекта. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetTransparency(Id, ObjId, tr); Viewer3DSetTransparency(Id, ObjId, tr) - функция управляет степенью прозрачности 3D-объекта в окне согласно заданному значению tr.
Текстура 3D-объекта Пример демонстрирует возможность задания цвета 3D-объекта. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetTexture(Id, ObjId, FilePath); Viewer3DSetTexture(Id, ObjId, FilePath) - функция наложения текстуры из файла, раположенного по пути FilePath на 3D-объект.
Удаление 3D-объекта На этапе инициализации выполняется рендеринг сфер радиусом 1 м в точке (0,0,0) для всех существующих окон 3D-визуализации. На этапе финализации 3D-объект, созданный из скрипта, уничтожается. Viewer3DRemoveObject(Id, ObjId); Viewer3DRemoveObject(Id, ObjId) - функция выполняет удаление объекта созданного из скрипта, с идентификатором ObjId.
Уничтожение окна через скрипт На этапе инициализации создается новое окно 3D-визуализации. На финализации оно уничтожается. Viewer3DDestroyWindow(Id); Viewer3DDestroyWindow(Id) - функция выполняет полное уничтожение окна 3D-визуализации.
Установка положения окна Пример демонстрирует возможность установки положения окна 3D-визуализации. Величины отступов задаются в количестве пикселей. Viewer3DSetWindowPosition(Id, L, T); Viewer3DSetWindowPosition(Id, L, T) - функция устанавливается положение окна относительно левой верхней точки экрана. L - отступ слева в пикселях, T - отступ сверху.
Установка размеров окна Пример демонстрирует возможность установки размеров окна 3D-визуализации. Размеры задаются в количестве пикселей. Viewer3DSetWindowSize(Id, W, H); Viewer3DSetWindowSize(Id, W, H) - функция выполняет установку размеров окна 3D-визуализации, где W - ширина окна, H - высота.
Цвет 3D-объекта Пример демонстрирует возможность задания цвета 3D-объекта. ObjId = Viewer3DPlotSphere(Id, R, X, Y, Z) Viewer3DPlotSphere(Id, R, X, Y, Z) – функция выполняет создание сферы с радиусом R в точке (X,Y,Z) окна с идентификатором Id.
Viewer3DSetColor(Id, ObjId, Color); Viewer3DSetColor(Id, ObjId, Color) - функция устанавливает цвет объекта. Значение агрумента Color может быть получено при помощи функции RBGToColor.
Цвет фона Пример демонстрирует возможность динамического задания цвета фона 3D-модели. Viewer3DSetBackground(Id, Color); Viewer3DSetBackground(Id, Color) - функция устанавливает цвет фона. Значение агрумента Color может быть получено при помощи функции RBGToColor.

Используемые блоки