Fix printer config to generate mazes
This commit is contained in:
parent
8c7f4f4cb6
commit
da8ab4e448
34
jobs/maze.py
34
jobs/maze.py
@ -1,4 +1,5 @@
|
||||
import random
|
||||
from PIL import Image, ImageDraw
|
||||
from .base import Job
|
||||
|
||||
class MazeJob(Job):
|
||||
@ -9,20 +10,43 @@ class MazeJob(Job):
|
||||
# Width and Height in cells.
|
||||
# Total width in chars = 2 * w + 1.
|
||||
# w=15 -> 31 chars (Fits comfortably on 80mm printers, tight on 58mm)
|
||||
w = 15
|
||||
h = 15
|
||||
w = 14
|
||||
h = 32
|
||||
|
||||
maze = self.generate_maze(w, h)
|
||||
|
||||
p.text("Najdi cestu z S do E:\n\n")
|
||||
|
||||
# Center the maze
|
||||
# Generate and print image
|
||||
img = self._generate_image(maze)
|
||||
p.set(align='center')
|
||||
for row in maze:
|
||||
p.text("".join(row) + "\n")
|
||||
p.image(img, impl="bitImageColumn")
|
||||
p.set(align='left')
|
||||
p.text("\n")
|
||||
|
||||
def _generate_image(self, maze):
|
||||
# Cell size in pixels
|
||||
cell_size = 16
|
||||
rows = len(maze)
|
||||
cols = len(maze[0])
|
||||
w, h = cols * cell_size, rows * cell_size
|
||||
|
||||
# Create new 1-bit image (White background)
|
||||
# '1' mode = 1-bit pixels, black and white, stored with one pixel per byte
|
||||
img = Image.new('1', (w, h), 1)
|
||||
draw = ImageDraw.Draw(img)
|
||||
|
||||
for r in range(rows):
|
||||
for c in range(cols):
|
||||
# Draw walls as black rectangles
|
||||
if maze[r][c] == '#':
|
||||
x = c * cell_size
|
||||
y = r * cell_size
|
||||
# fill=0 means Black in '1' mode
|
||||
draw.rectangle([x, y, x + cell_size, y + cell_size], fill=0)
|
||||
|
||||
return img
|
||||
|
||||
def generate_maze(self, width, height):
|
||||
rows = 2 * height + 1
|
||||
cols = 2 * width + 1
|
||||
|
||||
@ -12,7 +12,7 @@ from jobs.maze import MazeJob
|
||||
# Example: 0x04b8 is Epson.
|
||||
USB_VENDOR_ID = 0x0525
|
||||
USB_PRODUCT_ID = 0xa700
|
||||
INPUT_ENDPOINT = 0x81
|
||||
INPUT_ENDPOINT = 0x00
|
||||
OUTPUT_ENDPOINT = 0x01
|
||||
|
||||
# Set to True to print to console instead of physical printer (for testing)
|
||||
@ -29,7 +29,12 @@ def get_printer():
|
||||
try:
|
||||
# Initialize USB printer
|
||||
# profile="TM-T88V" is a generic profile, works for many ESC/POS printers
|
||||
p = Usb(USB_VENDOR_ID, USB_PRODUCT_ID, 0, INPUT_ENDPOINT, OUTPUT_ENDPOINT, profile="TM-T88V")
|
||||
|
||||
p = Usb(USB_VENDOR_ID, USB_PRODUCT_ID, 0, INPUT_ENDPOINT, OUTPUT_ENDPOINT, profile="default")
|
||||
p.profile.profile_data['media']['width']['mm'] = 80
|
||||
p.profile.profile_data['media']['width']['pixels'] = 512
|
||||
|
||||
# p = Usb(USB_VENDOR_ID, USB_PRODUCT_ID, 0, INPUT_ENDPOINT, OUTPUT_ENDPOINT, profile="TM-T88V")
|
||||
return p
|
||||
except USBNotFoundError:
|
||||
print("Error: Printer not found. Check USB connection and IDs.")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user