SHARE
TWEET

printall.lua

theCPU Mar 28th, 2018 (edited) 298 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local component = require("component")
  2. local shell     = require("shell")
  3. local gpu = component.gpu
  4. x , y = gpu.getResolution()
  5. local function setColor(c)
  6.   if c and gpu.getForeground() ~= c then
  7.     gpu.setForeground(c)
  8.   end
  9. end
  10.  
  11. local function cwrite(c, ...)
  12.   local oldCol = gpu.getForeground()
  13.   setColor(c)
  14.   io.write(...)
  15.   setColor(oldCol)
  16. end
  17.  
  18. local args = shell.parse(...)
  19. if #args < 1 then
  20.   io.write("Используйте: printAll FILE [Количество] [Номер определенного блока] \n")
  21.   os.exit(0)
  22. end
  23.  
  24. count = 1
  25. if #args > 1 then
  26.   count = assert(tonumber(args[2]), tostring(args[2]) .. " is not a valid count")
  27. end
  28. block = nil
  29. if #args > 2 then
  30.   block = assert(tonumber(args[3]), tostring(args[3]) .. "Not valid block_number")
  31. end
  32.  
  33. local file, reason = io.open(args[1], "r")
  34. if not file then
  35.   io.stderr:write("Ошибка при открытии файла: " .. reason .. "\n")
  36.   os.exit(1)
  37. end
  38.  
  39. local rawdata = file:read("*all")
  40. file:close()
  41. local data, reason = load("return " .. rawdata)
  42. if not data then
  43.   io.stderr:write("Ошибка загрузки модели: " .. reason .. "\n")
  44.   os.exit(2)
  45. end
  46.  
  47. local data1 = {}
  48.   for _, i in pairs({data()}) do
  49.     if (#i.shapes > 0) then
  50.       table.insert(data1, i)
  51.     end
  52.   end
  53.  
  54. cwrite( nil,"  Блоков найдено: ")
  55. cwrite( 0x00ffff, #data1, "\n")
  56.  
  57. local printers = {}
  58. for addr in component.list("printer3d") do
  59.   table.insert(printers, component.proxy(addr))
  60. end
  61.  
  62. cwrite( nil,"Принтеров найдено: ")
  63. cwrite( 0x00ffff, #printers, "\n")
  64.  
  65. local pIndex = 0
  66. local printer
  67.  
  68. -- Loop all models in file
  69. local blockNumber = 1
  70.  
  71. if block ~= nil then
  72.    blockNumber = block
  73. else
  74.    blockNumber = 1
  75.  
  76. end
  77.  
  78. while blockNumber <= #data1 do
  79.   if block ~= nil then
  80.     if blockNumber == block+1 then
  81.      break
  82.     end
  83.   end
  84.   -- Looking for idle printer
  85.   pIndex = (pIndex+1)>#printers and 1 or pIndex+1
  86.   printer = printers[pIndex]
  87.   if printer.status() ~= "idle" then goto continue end
  88.   if block ~= nil then
  89.   if blockNumber == block then
  90.   m = data1[block]
  91.   end
  92.   else
  93.     m = data1[blockNumber]
  94.   end
  95.   printer.reset()
  96.  
  97.   if m.label then
  98.     printer.setLabel(m.label)
  99.   end
  100.  
  101.   if m.tooltip then
  102.     printer.setTooltip(m.tooltip)
  103.   else
  104.     printer.setTooltip("["..blockNumber.."]")
  105.   end
  106.  
  107.   if m.lightLevel and printer.setLightLevel then -- as of OC 1.5.7
  108.     printer.setLightLevel(m.lightLevel)
  109.   end
  110.  
  111.   if m.emitRedstone then
  112.     printer.setRedstoneEmitter(m.emitRedstone)
  113.   end
  114.  
  115.   if m.buttonMode then
  116.     printer.setButtonMode(m.buttonMode)
  117.   end
  118.  
  119.   for _, shape in ipairs(m.shapes) do
  120.     local result, reason = printer.addShape(shape[1], shape[2], shape[3], shape[4], shape[5], shape[6], shape.texture, shape.state, shape.tint)
  121.     if not result then
  122.       io.write("Failed adding shape: " .. tostring(reason) .. "\n")
  123.     end
  124.   end
  125.   cwrite(nil,"#"); cwrite(0x00ffff,blockNumber); cwrite(nil,"/") cwrite(0x00ffff,#data1); cwrite(nil,": ")
  126.   cwrite(0xffffff, printer.getLabel() or "[no label]", " ")
  127.   cwrite(0x555555, printer.getTooltip() or "[no tooltip]", " ")
  128.   cwrite(nil,"Shape = "); cwrite(0xffff00, printer.getShapeCount()*1)
  129.   local result, reason = printer.commit(count)
  130.   if result then
  131.     cwrite(0x00ff00," >> Печать..\n");
  132.     blockNumber = blockNumber + 1
  133.     os.sleep(0.5)
  134.   else
  135.     io.stderr:write("\nFailed committing job: " .. tostring(reason) .. "\n")
  136.   end
  137.   ::continue::
  138. end
  139.  
  140. cwrite(nil,"Завершение печати")
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top