Документация Help

Скрипт генерации 3d модели

Скрипт состоит из последовательности команд, исполняемых виртуальной машиной. Использование скрипта позволяет генерировать произвольные изображения и гибко изменять логику построения изображения не изменяя при этом МП.

Входными данными являются:

  • Список статусов, полученных из API МП

  • Целевой цвет объекта

  • Список ресурсов, содержащийся в объекте files дескриптора.

Выходными данными является изображение объекта в актуальном состоянии и указанном цвете.

В каждой строке скрипта символ # указывает начало комментария. Допустимы пустые строки. Регистр символов не учитывется. Крманда состоит из текстового идентификатора и параметров.

Виртуальная машина имеет рабочий стек с которым работают команды скрипта. Элементы, сохраняемые в стеке, типизированы, команды ожидают наличие объектов в стеке нужного им типа. При несоответствии ожидаемого и реального типа поведение не определено. Подобная ситуация свидетельствует об ошибке в реализации виртуальной машины.

В дополнение к стеку виртуальная машина имеет также два регистра pc и bp для организации вызова подпрограмм.

Регистр pc указывает номер следующей выполняемой команды (но не строку в файле).

Регистр bp используется для получения аргументов подпрограмм.

Регистры pc, bp, рабочий стек, и рабочий список объектов bitmap образуют собой контекст состояния виртуальной машины.

class Context( processor: BitmapProcessor, var pc: Int = 0, var bp: Int = 0, val stack: MutableList<Any> = mutableListOf(), val bitmaps: MutableMap<String, BitmapRef> = mutableMapOf(), )
#!carbuild DEFINE_BITMAP background 1920 1440 DEFINE_BITMAP foreground 1920 1440 DEFINE_BITMAP temp 1920 1440 STATUS transparent JMP_FALSE NO_TRANSPARENT # Прозрачный вид STATUS light SELECT "background+backlight" "background" FETCH_BITMAP_INTO background STORE "transparent" FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO background # Свет STATUS light SKIP_TRUE RETURN_BITMAP background STORE "light-on" FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO background RETURN_BITMAP background LABEL NO_TRANSPARENT # Задняя правая STATUS right_back_door SELECT "right-back-open" "right-back-closed" CALL ADJUST_DEFINED 1 FETCH_BITMAP_INTO foreground # Передняя правая STATUS right_front_door SELECT "right-front-open" "right-front-closed" CALL ADJUST_DEFINED 1 FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO foreground # Основная модель STATUS light SELECT "background+backlight" "background" FETCH_BITMAP_INTO background STORE "base-naked" CALL ADJUST_DEFINED 1 FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO foreground # Багажник STATUS trunk SELECT "trunk-open" "trunk-closed" CALL ADJUST_DEFINED 1 FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO foreground # Свет STATUS light JMP_FALSE NO_LIGHT STATUS trunk SELECT "light-on+trunk" "light-on" FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO foreground LABEL NO_LIGHT # Левая задняя STATUS left_back_door SELECT "left-back-open" "left-back-closed" CALL ADJUST_DEFINED 1 FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO foreground # Левая передняя STATUS left_front_door SELECT "left-front-open" "left-front-closed" CALL ADJUST_DEFINED 1 FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO foreground # Капот STATUS hood SELECT "hood-open" "hood-closed" CALL ADJUST_DEFINED 1 FETCH_BITMAP_INTO temp BLEND_BITMAP temp INTO foreground # Раскрашивание совмещенных фрагментов (без фона) STATUS target_saturation STORE 0 EQUAL STORE 0 STATUS target_lightness EQUAL AND SKIP_TRUE COLORIZE_BITMAP foreground 220 40 68 20 # Наложение раскрашенной модели на фон BLEND_BITMAP foreground INTO background RETURN_BITMAP background LABEL ADJUST_DEFINED ARGUMENT 0 STATUS target_saturation STORE 0 EQUAL STORE 0 STATUS target_lightness EQUAL AND SKIP_FALSE FORMAT 1 "%s-black" RETURN
Last modified: 30 декабря 2023