import cv2, sys, Printer
-from utils import MatrixConversion
-from User_Interface import BoxFrame, Draw, MouseManager
+from User_Interface import Draw, MouseManager, Buttons
cap = cv2.VideoCapture(1)
ret, frame = cap.read()
cv2.namedWindow('image')
-galvo_corners = [(50, 50), (100, 50), (100, 100), (50, 100)]
-image_corners = galvo_corners[:]
-enableDots = True
-
-laser_frame = BoxFrame.BoxFrame(galvo_corners)
-image_frame = BoxFrame.BoxFrame(image_corners)
-coeffs = MatrixConversion.find_coeffs(image_corners, galvo_corners)
-
-printer = Printer.Printer('COM3', coeffs)
+printer = Printer.Printer('COM3')
printer.begin()
-
-mouse = MouseManager.MouseManager(laser_frame, image_frame, printer)
-cv2.setMouseCallback('image', mouse.mouse_event)
+mouse = MouseManager.MouseManager(printer)
while(True):
ret, frame = cap.read()
- Draw.drawImage(frame, laser_frame, coeffs, printer, enableDots)
+ Draw.drawImage(frame, printer)
cv2.imshow('image', frame)
-
- command = cv2.waitKey(10) & 0xFF
- if command == ord('q'):
- printer.home()
- break
- elif command == ord('d'):
- enableDots = not enableDots
- elif command == ord('f'):
- printer.sendSerial = not printer.sendSerial
- elif command == ord('h'):
- printer.home()
- elif command == ord('c'):
- printer.callibrate()
+
+ if Buttons.checkButtons(printer, printer.settings): break
cap.release()
cv2.destroyAllWindows()
\ No newline at end of file
-import serial, time
+import serial
+from settings import frameSettings
from utils import MatrixConversion
class Printer():
- def __init__(self, COM, coeffs):
+ def __init__(self, COM):
self.COM = COM
- self.coeffs = coeffs
self.max_X = 250
self.max_Y = 200
self.ser = None
self.position = (0,0)
self.sendSerial = False
+ self.settings = frameSettings.frameSettings()
+ self.coeffs = MatrixConversion.find_coeffs(self.settings.image_frame.corners, self.settings.laser_frame.corners)
def begin(self):
print("Connecting")
x,y = xy
x = self.max_X - x
self.position = xy
- command = 'G0 F5000 X%d Y%d\n'%(x, y) + 'G0 F5000 X0 Y0\n'
+ command = 'G0 F5000 X%d Y%d\n'%(x, y) + 'G4 P1000\n' + 'G0 F5000 X0 Y0\n'
if self.sendSerial and self.ser is not None and self.withinBounds(xy):
- print(command)
self.ser.write(command.encode())
return 1
else:
--- /dev/null
+{"laser_frame": [[207, 99], [479, 95], [516, 257], [162, 259]], "image_frame": [[50, 50], [100, 50], [100, 100], [50, 100]]}
\ No newline at end of file
--- /dev/null
+import cv2
+
+def checkButtons(printer, boxes):
+ command = cv2.waitKey(10) & 0xFF
+ if command == ord('q'):
+ boxes.saveSettings()
+ printer.home()
+ return True
+ elif command == ord('d'):
+ enableDots = not enableDots
+ elif command == ord('f'):
+ printer.sendSerial = not printer.sendSerial
+ elif command == ord('h'):
+ printer.home()
+ elif command == ord('c'):
+ printer.callibrate()
+ return False
\ No newline at end of file
#Mark TopLeft corner with white dot
cv2.circle(image,points[0], 2, (255,255,255),-1)
-def drawImage(frame, laser_frame, coeffs, printer, enableDots):
- drawBox(frame, laser_frame.corners, (255, 255, 255), 1)
- if enableDots == True:
- drawDots(frame, laser_frame.corners, 10, (255, 0, 0), -1)
- x,y = laser_frame.getCenter()
- cv2.circle(frame, (int(x), int(y)), 4, (0, 255, 0), 1)
+def drawImage(frame, printer):
+ drawBox(frame, printer.settings.laser_frame.corners, (255, 255, 255), 1)
+ drawDots(frame, printer.settings.laser_frame.corners, 10, (255, 0, 0), -1)
+ x,y = printer.settings.laser_frame.getCenter()
+ cv2.circle(frame, (int(x), int(y)), 4, (0, 255, 0), 1)
cx,cy = printer.position
cv2.putText(frame, str((round(cx),round(cy))), (20, 450), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255))
if printer.sendSerial:
import cv2
class MouseManager:
- def __init__(self, laser_frame, image_frame, printer):
- self.laser_frame = laser_frame
- self.image_frame = image_frame
+ def __init__(self, printer):
+ cv2.setMouseCallback('image', self.mouse_event)
+ self.laser_frame = printer.settings.laser_frame
+ self.image_frame = printer.settings.image_frame
self.printer = printer
self.mouseDrag = False
self.activeFrame = None
--- /dev/null
+import json
+from User_Interface import BoxFrame
+SettingsName = 'Settings.json'
+
+class frameSettings:
+ def __init__(self):
+ with open(SettingsName, 'r') as file:
+ data = json.load(file)
+
+ laser_frame = [tuple(l) for l in data['laser_frame']]
+ image_frame = [tuple(l) for l in data['image_frame']]
+
+ self.laser_frame = BoxFrame.BoxFrame(laser_frame)
+ self.image_frame = BoxFrame.BoxFrame(image_frame)
+
+
+ def saveSettings(self):
+ jsonDict = {
+ "laser_frame": self.laser_frame.corners,
+ "image_frame": self.image_frame.corners
+ }
+
+ with open(SettingsName, 'w') as file:
+ json.dump(jsonDict, file)