main.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!`/usr/bin/whereis python3`
  2. # -*- coding: iso-8859-9 -*-
  3. import os
  4. import wow
  5. import tkinter as tk
  6. import tkinter.filedialog
  7. import sys
  8. try:
  9. import BUILD_CONSTANTS
  10. version = BUILD_CONSTANTS.BUILD_VERSION
  11. except ImportError:
  12. try:
  13. import git
  14. r = git.repo.Repo('./')
  15. version = r.git.describe("--tags", "--dirty")
  16. except ImportError:
  17. version = "?version unknown?"
  18. from PIL import ImageTk
  19. class WOWFileViewer:
  20. def __init__(self, master, wowfile):
  21. self.currentLayer = 0
  22. self.master = master
  23. self.wowfile = wowfile
  24. master.title("WOW file viewer - {ver}".format(ver=version))
  25. self.layer_count = wowfile.get_layercount()
  26. self.layer = wowfile.get_layer(self.currentLayer)
  27. # Configure columns and row
  28. self.master.columnconfigure(1, weight=1)
  29. self.master.columnconfigure(4, weight=1)
  30. self.master.rowconfigure(2, weight=1)
  31. # Row 1
  32. self.label = tk.Label(master, text="Layer: {num} / {tot}".format(num=self.layer.number, tot=self.layer_count))
  33. self.label.grid(row=1, columnspan=6)
  34. self.layern_var = tk.StringVar()
  35. self.layern_var.set(str(self.layer.number))
  36. self.layern_ent = tk.Entry(master, textvariable=self.layern_var, width=6)
  37. self.layern_ent.grid(row=1, column=7, sticky=tk.E+tk.W)
  38. self.layern_btn = tk.Button(master, text=" Change ", command=self.layerManualSet)
  39. self.layern_btn.grid(row=1, column=8, sticky=tk.E+tk.W+tk.N+tk.S)
  40. # Row 2
  41. self.img = ImageTk.PhotoImage(self.layer.image)
  42. self.layer_img = tk.Label(master, image=self.img)
  43. self.layer_img.grid(row=2, column=1, columnspan=7)
  44. tickinterval = self.layer_count/10
  45. self.layer_select = tk.Scale(master, from_=1, to=self.layer_count,
  46. command=self.sliderUpdate, orient=tk.VERTICAL,
  47. resolution=-1, length=400, tickinterval=tickinterval,
  48. takefocus=1)
  49. self.layer_select.grid(row=2, column=8, sticky=tk.E+tk.W+tk.N+tk.S)
  50. # Row 3
  51. self.thick_var = tk.StringVar()
  52. self.thick_var.set(str(self.layer.thickness * 1000))
  53. self.thick_lbl = tk.Label(master, text="Layer thickness (µm): ")
  54. self.thick_lbl.grid(row=3, column=1, sticky=tk.E)
  55. self.thick_ent = tk.Entry(master, textvariable=self.thick_var, width=10)
  56. self.thick_ent.grid(row=3, column=2, sticky=tk.E + tk.W)
  57. self.spdu_var = tk.StringVar()
  58. self.spdu_var.set(str(self.layer.speed_up))
  59. self.spdu_lbl = tk.Label(master, text="Speed up (mm/min): ")
  60. self.spdu_lbl.grid(row=3, column=4, sticky=tk.E)
  61. self.spdu_ent = tk.Entry(master, textvariable=self.spdu_var, width=10)
  62. self.spdu_ent.grid(row=3, column=5, sticky=tk.E + tk.W)
  63. # Row 4
  64. self.exp_var = tk.StringVar()
  65. self.exp_var.set(str(self.layer.exposition))
  66. self.exp_lbl = tk.Label(master, text="Layer exposure level (0-255): ")
  67. self.exp_lbl.grid(row=4, column=1, sticky=tk.E)
  68. self.exp_ent = tk.Entry(master, textvariable=self.exp_var, width=10)
  69. self.exp_ent.grid(row=4, column=2, sticky=tk.E+tk.W)
  70. self.spdd_var = tk.StringVar()
  71. self.spdd_var.set(str(self.layer.speed_down))
  72. self.spdd_lbl = tk.Label(master, text="Speed down (mm/min): ")
  73. self.spdd_lbl.grid(row=4, column=4, sticky=tk.E)
  74. self.spdd_ent = tk.Entry(master, textvariable=self.spdd_var, width=10)
  75. self.spdd_ent.grid(row=4, column=5, sticky=tk.E+tk.W)
  76. # Row 5
  77. self.expt_var = tk.StringVar()
  78. self.expt_var.set(str(self.layer.exposition_time))
  79. self.expt_lbl = tk.Label(master, text="Layer exposure time (in sec): ")
  80. self.expt_lbl.grid(row=5, column=1, sticky=tk.E)
  81. self.expt_ent = tk.Entry(master, textvariable=self.expt_var, width=10)
  82. self.expt_ent.grid(row=5, column=2, sticky=tk.E+tk.W)
  83. self.updist_var = tk.StringVar()
  84. self.updist_var.set(str(self.layer.up_distance))
  85. self.updist_lbl = tk.Label(master, text="Up mvmt distance (mm): ")
  86. self.updist_lbl.grid(row=5, column=4, sticky=tk.E)
  87. self.updist_ent = tk.Entry(master, textvariable=self.updist_var, width=10)
  88. self.updist_ent.grid(row=5, column=5, sticky=tk.E + tk.W)
  89. # Row 6
  90. self.printtime_var = tk.StringVar()
  91. self.printtime_var.set(str(wowfile.get_printtime(human_readable=True)))
  92. self.printtime_lbl = tk.Label(master, text="Estimated print time: ")
  93. self.printtime_lbl.grid(row=6, column=1, sticky=tk.E)
  94. self.printtime_ent = tk.Label(master, textvariable=self.printtime_var)
  95. self.printtime_ent.grid(row=6, column=2, sticky=tk.W)
  96. self.close_button2 = tk.Button(master, text=" Exit ", command=master.quit)
  97. self.close_button2.grid(row=6, column=8, sticky=tk.E+tk.W+tk.N+tk.S)
  98. self.layer_select.focus_force()
  99. def sliderUpdate(self, pos):
  100. self.layerChange(int(pos))
  101. def layerManualSet(self):
  102. self.layer_select.set(int(self.layern_var.get()))
  103. return True
  104. def layerChange(self, layer):
  105. self.layer = self.wowfile.get_layer(layer - 1)
  106. self.img = ImageTk.PhotoImage(self.layer.image)
  107. self.layer_img.configure(image=self.img)
  108. self.label.configure(text="Layer: {num} / {tot}".format(num=self.layer.number, tot=self.layer_count))
  109. self.layern_var.set(str(self.layer.number))
  110. self.thick_var.set(str(self.layer.thickness * 1000))
  111. self.exp_var.set(str(self.layer.exposition))
  112. self.expt_var.set(str(self.layer.exposition_time))
  113. self.spdu_var.set(str(self.layer.speed_up))
  114. self.spdd_var.set(str(self.layer.speed_down))
  115. self.updist_var.set(str(self.layer.up_distance))
  116. def main():
  117. print("WOW File viewer {ver}".format(ver=version))
  118. root = tk.Tk()
  119. root.title("WOW file viewer")
  120. lbl = tk.Label(root, text="Please Wait...")
  121. lbl.grid(row=1, column=1)
  122. filename = tkinter.filedialog.askopenfilename(filetypes=(("WOW print file", "*.wow"),("All files", "*.*")))
  123. if filename is "":
  124. sys.exit(0)
  125. lbl.configure(text="")
  126. wowfile = wow.WowFile(filename)
  127. lbl = None
  128. my_gui = WOWFileViewer(root, wowfile)
  129. root.focus_force()
  130. root.mainloop()
  131. if __name__ == "__main__":
  132. main()