Skip to content

Instantly share code, notes, and snippets.

@Fingercomp
Last active December 13, 2017 11:53
Show Gist options
  • Save Fingercomp/41d8701ad522915f40cf5971eccf9d09 to your computer and use it in GitHub Desktop.
Save Fingercomp/41d8701ad522915f40cf5971eccf9d09 to your computer and use it in GitHub Desktop.
local holo = require("holo")
local sides = require("sides")
local corners = holo.corners
-- считываем модельку
local f = io.open("/home/test.3dx", "rb")
local model = holo.read(f)
f.close()
-- таблица с цветами
local colors = model.palette
-- 3 аргумент: 1 — первый цвет, 2 — второй, 3 — третий; 0 (или nil) — стиралка
-- ставим воксель (индексация от единицы, ибо Луа)
-- z, x, y (z — номер слоя)
model:set(1, 1, 1, 3)
-- ставит цвет
colors[1] = 0x20AFF
-- запись в файл
local f = io.open("/home/test.3dx", "wb")
model:write(f, holo.format.3dx)
f:close()
-- создаём модельку
local model = holo.new()
local colors = model.palette
colors[1] = 0x20AFFF
colors[2] = 0xFF20AF
colors[3] = 0x20FF58
-- получаем виды сверху, слева, снизу и т. д.
-- они автоматом все изменения конвертируют в команды для основного вида
-- (сверху, нижний левый угол), то есть являются видами на модель
-- вторым аргументом можно указать, где будет находиться левый нижний угол
-- на слоях в данном виде по сравнению с дефолтным
local views = {
model:getView(sides.top),
model:getView(sides.left),
model:getView(sides.bottom, corners.topLeft), -- такой же, как в дефолтном виде сверху
model:getView(sides.right),
model:getView(sides.back),
model:getView(sides.front),
}
-- 2 слой слева, x — длина, y — высота
views[2]:set(4, 10, 4, 1)
-- можно филлить
-- слой₁, x₁, y₁, слой₂, x₂, y₂
views[6]:fill(1, 5, 5, 5, 10, 10, 2)
-- указать режим заполнения:
-- - hollow (только грани)
-- - outline (только контур)
-- - fill (дефолт)
--
-- - keep (заменять только пустоты)
-- - replace (дефолт, заменять всё)
-- - custom (билдер режима, можно указать, какие цвета заменять)
views[4]:fill(1, 17, 13, 7, 22, 24, 3, holo.fill.hollow, holo.replace.custom(1, 3))
-- линия
model:line(1, 1, 1, 32, 48, 48, 3)
-- режим заполнения
model:line(1, 48, 48, 32, 1, 1, 1, holo.replace.keep)
f = io.open("/home/test-2.3dx", "wb")
model:write(f, holo.format.3dx)
f:close()
-- рендер
local com = require("component")
local hologram = com.hologram
model:render(hologram, holo.renderers.default)
model:render(hologram.address, holo.renderers.default)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment