Files
mimaki/docs/refac-vs-root-diff.md
2026-02-03 21:28:22 +01:00

4.0 KiB
Raw Permalink Blame History

refac vs root (historical)

The refac version is now the main version (root Command.py, Program.py, Plotter.py). This doc is kept for reference.

Original comparison of the core modules: Command.py, Program.py, Plotter.py.


Command.py

Aspect Root refac
import math Missing (bug: rotate() uses math.cos/math.sin) Present
Class attributes inicoms, scalecoms, movecoms only Same + abscoms, relcoms, arccoms (for PA/PD/PU, PR, CI/AA)
scalable / movable return True if ... else False return self.name in ... and self.args (shorter, same meaning)
x self.args[0] if self.movable else None self.args[0] if self.args else None
y self.args[1] if self.movable else None (and len(self.args)<2 check with wrong indent) self.args[-1] if self.args else None (works for single-arg commands like CI)
rotate() Command((self.name, ...), (...))bug: first arg is a tuple, not name Command(self.name, ...)
flip() Command(self.name, self.y, -self.x)wrong: swaps x/y Command(self.name, self.x, -self.y) (mirror in y)

Summary: refac fixes missing math, corrects rotate() and flip(), and adds command-type sets used by Program parsing/simulation.


Program.py

Aspect Root refac
init commands or []; no bounds commands (can be None); if commands given, computes bounds once via __simulate()
Bounds (xmin, xmax, …) @property computed from commands each time Set once in init from __simulate() (no property; no update if commands change)
parsefile / parse Instance methods: p.parsefile(f) mutates self.commands @staticmethod: Program.parsefile(f) / Program.parse(code) return new Program
Parsing One Command per semicolon; all args in one list Multi-point PA/PD/PU: if len(args)>2, splits into (x,y) pairs and creates one Command per point
show() Not in Program (show in main.py) Program.show(): flip, rotate 270°, fitin to 1024×600, Tk canvas
fitin(), scaleto(), moveto() Not in root Present (scale/move to rectangle with alignment fx, fy)
multi(w, h) Not in root Tile program in w×h grid with spacing
Program.parse() return N/A (mutates self) Returns Program(commands)

Summary: refac adds static parsing (return new Program), multi-point parsing, simulation for bounds, and helpers: show(), fitin(), scaleto(), moveto(), multi().


Plotter.py

Aspect Root refac
Import import pyserial (wrong name; should be serial) import serial
Boundaries storage self.__boundaries (private) self.boundaries (public)
p0incenter True False
getoutput() self.ser.read() → str; returns ''.join(s) Bytes: outstr used as-is; x == b"\x0d"; returns b''.join(s).decode()
write() self.ser.write(str(programm)) (str) self.ser.write(str(programm).encode()) (bytes)
full(prog) Scale prog to fit plotter bounds Removed (scaling done elsewhere, e.g. Program.fitin)
centralize() Same logic Same logic (behavior differs only if p0incenter differs)

Summary: refac uses proper serial and bytes for Python 3; drops full(); different default for p0incenter.


Overall

  • refac = cleaned-up, Python3friendly version: correct Command (math, rotate, flip), static Program parsing, multi-point parsing, bounds simulation, fitin/show/multi, and serial over bytes.
  • Root = older version: Command has bugs (no math, wrong rotate/flip), instance-method parsing only, no fitin/show/multi, and broken pyserial import.

Recommendation: use refac as the main implementation and, if needed, replace root with it (or make root a thin wrapper around refac).