From b80ac71d55c6d782f0b8272ee232f7ea10c71528 Mon Sep 17 00:00:00 2001
From: ubq323 <ubq323@ubq323.website>
Date: Sat, 31 Dec 2022 04:00:32 +0000
Subject: 3d print of image

---
 img/blahaj.ppm | Bin 0 -> 2896 bytes
 img/print.lua  |  52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)
 create mode 100644 img/blahaj.ppm
 create mode 100644 img/print.lua

(limited to 'img')

diff --git a/img/blahaj.ppm b/img/blahaj.ppm
new file mode 100644
index 0000000..ffdb895
Binary files /dev/null and b/img/blahaj.ppm differ
diff --git a/img/print.lua b/img/print.lua
new file mode 100644
index 0000000..f6bcef7
--- /dev/null
+++ b/img/print.lua
@@ -0,0 +1,52 @@
+package.path="/?;/?.lua;"..package.path
+
+local printer = peripheral.wrap"right"
+
+local load_pnm = require"load_pnm".load
+local file,err = io.open(arg[1],"rb")
+if err then error("io.open: "..err) end
+local ff = file:read("a")
+local img = load_pnm(ff)
+local W,H = img.width, img.height
+
+local function c2c(col)
+	local r = math.floor(col[1]*255)
+	local g = math.floor(col[2]*255)
+	local b = math.floor(col[3]*255)
+	return b + 0x100*g + 0x10000*r
+end
+
+local function print_tile(tilex,tiley)
+	local tilex0 = tilex-1
+	local tiley0 = tiley-1
+	local xm = (8*tilex0)+1
+	local ym = (8*tiley0)+1
+	local xM = math.min(W,xm+7)
+	local yM = math.min(H,ym+7)
+
+	-- really i should have called this u and v instead of x and y. joker emoji
+	printer.reset()
+	shapes = {}
+	for px = xm,xM do
+		for py = ym,yM do
+			local offx = px-xm
+			local offy = py-ym
+			table.insert(shapes,{
+				2*offx,   14-2*offy, 15,
+				2*offx+2, 16-2*offy, 16,
+				texture="sc-peripherals:block/white",
+				tint=c2c(img[py][px])
+			})
+		end
+	end
+	printer.addShapes(shapes)
+	printer.setTooltip("("..tilex..","..tiley..")")
+
+end
+
+-- 0...
+for tilex = 1, math.ceil(W/8) do
+	for tiley = 1, math.ceil(H/8) do
+		print_tile(tilex,tiley)
+	end
+end
-- 
cgit v1.2.3