From 4d721497659ea28fcca102c8d945041ea176759b Mon Sep 17 00:00:00 2001 From: Igor Timofeev Date: Fri, 23 Sep 2016 09:20:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D1=83-=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 18436 -> 18436 bytes Applications.txt | 8 + Applications/.DS_Store | Bin 63492 -> 63492 bytes Applications/PrintImage/Icon.pic | Bin 0 -> 117 bytes Applications/PrintImage/PrintImage.lua | 277 +++++++++++++++++++++++++ 5 files changed, 285 insertions(+) create mode 100644 Applications/PrintImage/Icon.pic create mode 100755 Applications/PrintImage/PrintImage.lua diff --git a/.DS_Store b/.DS_Store index baa33a09be7340e44c92a5b3472df34d6328b863..51e1587b82ce394d00160f257ab5fd33bc6cd176 100644 GIT binary patch delta 544 zcmZXQ%TE(g7{%up6YjM)=`Af_M@*VhDkc*$P%O})T3l46qMIrxq72MH2K&;fL`6+Z z>Z7hmZlf{L_=?7rud(s5QvU-JSFT*^!j&eSqP$Ly7<$6i3d`U3(A4;X?7qYDwJ z7)AmkNMa{4*o%GGk1VEf6f@AVfD%r?Mj7XD371jDH3;0oZQQ|KJjH9g!CO&noowmc zy=TnJ(qad{C#wEMq4h+)8{G%7FpE$hG|DAW>Y3e;ri7!ZR|{mORK$@&8oMy&&X40D zCU6*2uE4xIZebBQoWc@L;|!KjaV4(cYD1!i>$riNxQ_>Th(~yg=XimasN)sh;XOV$ ziMCabAe)~A24X`>DAqrCUI{G^t9?pnAf}2`i{`|_Nrs|R>aBYM+f*0oAB_J8l@lK! Qj`0p>TJf)2qqo=SU&zOb9smFU delta 659 zcmXYtO-vI(9L4v6*ln1EDG0Qyq#xGyz^1lzZJ<>sN(2SsSJfs(liF^zP}+vpFDl`J z#(Ge6G(zGi6e}G8G(2FSgu^YoUh{HI77)~Gs6&ajH5f?Cx3NGO?uHz940S8ALkTKOF%4?v@E5RUx0Nl0g4zvv6w+xIB|zyok*@-(JThbW}!jp`H2sYSsi5W*-c&3C;B4N< z4!=Fm5ltB*XBC%I%_i0+$)xzmCBjli5W4 z5?gwd=CN_x&C;tGo^zlx+o((pjwf^@F-8kYk;rWB!vv2DTW3XgCPNbJXw4LW*#|06TGC~6wl%%lfBmarW(3NJ>1R)x4bW1Jm8 zxIq%;ip7{gzUCf0-sa~-Tu^R$Y_N3I0aOn0y&pmv3VxY6CyRD1vG ze8aVxNZjb}ADv7`0N&d#eJSOlwt~1Z`cLbU7dr+cMm$+&s{DSR+p;?i)%C)ahb?Sq zDQv#27jfl25q(PIfPQibu>J zBlA$#Cd`;?J&5a*ciGTOzl9bl>Yj?4La7l>0#vRCm7e-rB@1GE;edUUMkXrB0CoC` Ufbvcl&+W{kGk2OjfA@<21)tjUS)Ga8Mr92hj9;Atg@Bt{QRA-TfRLJ&bPXdo$42nsoyfM^)( z1O){Vkr<{@o22mvXqUzpRyJ3p6ylzCe#18`^V*ruc0}6|k3ww;M#w8G4~z|pgb>R4 z&FLp3KuDfjhOCnu*+5MRNvJCaV!KP+^7Y5d}jHP5rfa>`iJX9GvVL zeBY8WZe|7CZ4~7HRZ%dS5@pC1vmP)CGHOy@kodU_muvkL>|`(4QxQxg76j_&181oU z%o>2hz!eH_7Ue%hqg*=|j*mN&kUx#Nq+DyA)8MpV)EUO0QWrsOrXbA}SZN-6TO7Z= SUYI=T!|>9Y;I09hRQv&EGKPi# diff --git a/Applications/PrintImage/Icon.pic b/Applications/PrintImage/Icon.pic new file mode 100644 index 0000000000000000000000000000000000000000..6f6325a98217af21c67c7b28a3bf461a3d09f312 GIT binary patch literal 117 zcmeZw_H<+6U~yz*W(a0{G_Apn@v0L8 xShapeCount then xShape = 1; yShape = yShape + 1 end + if yShape > yShapeCount then break end + end + + currentPrinter = currentPrinter + 1 + if currentPrinter > #printers then currentPrinter = 1 end + os.sleep(0.1) + end + + buffer.clear() + window:draw() + buffer.draw(true) +end + +local function getStatus() + local xBlocks, yBlocks = math.ceil(mainImage.width / shapeResolutionLimit), math.ceil(mainImage.height * 2 / shapeResolutionLimit) + window.shadeContainer.statusTextBox.lines = { + "Image size: " .. mainImage.width .. "x" .. mainImage.height .. " px", + "Count of printers: " .. #printers, + "Print result: " .. xBlocks .. "x" .. yBlocks .. " blocks", + "Total count: " .. xBlocks * yBlocks .. " blocks" + } +end + +local function verticalLine(x, y, height, transparency) + for i = y, y + height - 1 do + local background = buffer.get(x, i) + buffer.set(x, i, background, colorlib.alphaBlend(background, 0xFFFFFF, transparency), "│") + end +end + +local function horizontalLine(x, y, width, transparency) + for i = x, x + width - 1 do + local background, foreground, symbol = buffer.get(i, y) + buffer.set(i, y, background, colorlib.alphaBlend(background, 0xFFFFFF, transparency), symbol == "│" and "┼" or "─") + end +end + +local function drawMainImageObject(object) + if mainImage then + local xImage = mainImage.width < buffer.screen.width and math.floor(buffer.screen.width / 2 - mainImage.width / 2) or 1 + local yImage = mainImage.height < buffer.screen.height and math.floor(buffer.screen.height / 2 - mainImage.height / 2) or 1 + buffer.image(xImage, yImage, mainImage) + GUI.windowShadow(xImage, yImage, mainImage.width, mainImage.height, 50, true) + if showGrid then + for x = xImage, xImage + mainImage.width - 1, shapeResolutionLimit do verticalLine(x, yImage, mainImage.height, 0xA0) end + for y = yImage, yImage + mainImage.height - 1, shapeResolutionLimit / 2 do horizontalLine(xImage, y, mainImage.width, 0xA0) end + buffer.text(1, 1, 0xBBBBBB, "хуй") + end + end +end + +local function createWindow() + window = windows.fullScreen() + window:addPanel("backgroundPanel", 1, 1, window.width, window.height, 0xEEEEEE) + window:addObject("mainImageObject", 1, 1, window.width, window.height).draw = drawMainImageObject + local panelWidth = 34 + local textBoxesWidth = math.floor(panelWidth * 0.55) + + local shadeContainer = window:addContainer("shadeContainer", window.width - panelWidth + 1, 1, panelWidth, window.height) + shadeContainer:addPanel("shadePanel", 1, 1, shadeContainer.width, shadeContainer.height, 0x0000000, 40) + + local y = 2 + shadeContainer:addLabel("label", 1, y, shadeContainer.width, 1, 0xFFFFFF, "Main properties"):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top) + + y = y + 2 + shadeContainer:addLabel("imagePathLabel", 3, y, shadeContainer.width, 1, 0xCCCCCC, "Image path:") + shadeContainer:addInputTextBox("imagePath", shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x262626, startImagePath, nil, nil, true).validator = function(text) + if text and fs.exists(text) then + if unicode.sub(text, -4, -1) == ".pic" then + mainImage = image.load(text) + getStatus() + return true + else + GUI.error("File \"" .. text .. "\" is not in .pic format", {title = {color = 0xFFDB40, text = "Error while loading image"}}) + end + else + GUI.error("File \"" .. text .. "\" doesn't exists", {title = {color = 0xFFDB40, text = "Error while loading image"}}) + end + end + + y = y + 2 + shadeContainer:addLabel("mainMaterialLabel", 3, y, shadeContainer.width, 1, 0xCCCCCC, "Material:") + shadeContainer:addInputTextBox("mainMaterial", shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x262626, "quartz_block_side", nil, nil, true).validator = function(text) + + end + + y = y + 2 + shadeContainer:addLabel("label", 3, y, shadeContainer.width, 1, 0xCCCCCC, "Floor mode:") + local floorSwitch = shadeContainer:addSwitch("floorSwitch", shadeContainer.width - 9, y, 8, 0xFFDB40, 0xAAAAAA, 0xFFFFFF, floorMode) + floorSwitch.onStateChanged = function() + floorMode = floorSwitch.state + end + + y = y + 2 + shadeContainer:addLabel("label", 3, y, shadeContainer.width, 1, 0xCCCCCC, "Show grid:") + local gridSwitch = shadeContainer:addSwitch("gridSwitch", shadeContainer.width - 9, y, 8, 0xFFDB40, 0xAAAAAA, 0xFFFFFF, showGrid) + gridSwitch.onStateChanged = function() + showGrid = gridSwitch.state + window:draw() + end + + y = y + 4 + shadeContainer:addLabel("label", 1, y, shadeContainer.width, 1, 0xFFFFFF, "Frame properties"):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top) + y = y + 2 + shadeContainer:addLabel("label", 3, y, shadeContainer.width, 1, 0xCCCCCC, "Enabled:") + local frameSwitch = shadeContainer:addSwitch("frameSwitch", shadeContainer.width - 9, y, 8, 0xFFDB40, 0xAAAAAA, 0xFFFFFF, frameEnabled) + frameSwitch.onStateChanged = function() + frameEnabled = frameSwitch.state + end + y = y + 2 + shadeContainer:addLabel("frameMaterialLabel", 3, y, shadeContainer.width, 1, 0xCCCCCC, "Material:") + shadeContainer:addInputTextBox("frameMaterial", shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0xEEEEEE, 0x262626, "planks_spruce", nil, nil, true) + y = y + 2 + frameWidthSlider = shadeContainer:addHorizontalSlider("frameWidthSlider", 3, y, shadeContainer.width - 4, 0xFFDB80, 0x000000, 0xFFDB40, 0xCCCCCC, 1, shapeResolutionLimit - 1, 1, false, "Width: " , " voxel(s)") + frameWidthSlider.roundValues = true + + y = y + 5 + shadeContainer:addLabel("label", 1, y, shadeContainer.width, 1, 0xFFFFFF, "Light emission"):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top) + y = y + 2 + shadeContainer:addLabel("label", 3, y, shadeContainer.width, 1, 0xCCCCCC, "Enabled:") + local lightSwitch = shadeContainer:addSwitch("lightSwitch", shadeContainer.width - 9, y, 8, 0xFFDB40, 0xAAAAAA, 0xFFFFFF, emitLight) + lightSwitch.onStateChanged = function() + emitLight = lightSwitch.state + end + + y = y + 2 + local lightSlider = shadeContainer:addHorizontalSlider("lightSlider", 3, y, shadeContainer.width - 4, 0xFFDB80, 0x000000, 0xFFDB40, 0xCCCCCC, 1, 8, 8, false, "Radius: " , " block(s)") + lightSlider.roundValues = true + + y = y + 5 + shadeContainer:addLabel("label", 1, y, shadeContainer.width, 1, 0xFFFFFF, "Summary information:"):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top) + y = y + 2 + shadeContainer:addTextBox("statusTextBox", 3, y, shadeContainer.width - 4, 5, nil, 0xCCCCCC, {}, 1):setAlignment(GUI.alignment.horizontal.left, GUI.alignment.vertical.top) + + shadeContainer:addButton("printButton", 1, shadeContainer.height - 5, shadeContainer.width, 3, 0x363636, 0xFFFFFF, 0xFFFFFF, 0x262626, "Exit").onTouch = function() + window:close() + end + + shadeContainer:addButton("printButton", 1, shadeContainer.height - 2, shadeContainer.width, 3, 0x262626, 0xFFFFFF, 0xFFFFFF, 0x262626, "Start print").onTouch = function() + beginPrint() + end +end + +----------------------------------------- Program ----------------------------------------- + +buffer.start() +getPrinters() +createWindow() +mainImage = image.load(startImagePath) +getStatus() +window:draw() + +window:handleEvents() + + + +