After I came up with the whole PPI feature, I emailed Scorch about it. It’s basically just a carry forward value. total += PPI, if total >= 1000, { laser on, total -= 1000}, else laser off. He’s more than welcome to it. In fact, he’s welcome to any code in MeerK40t.
Before writing MeerK40t I wrote K40Nano which sought to streamline the important code from Whisperer and give wouldbe programmers a more functional API into the whisperer code. I tried to get some support for such things LBS (lightburn) expressed interest but gave a pretty good set of objections. The license made including it in a commercial product impossible, (since K40Nano was derived from Whisperer it had to be put under GPL3 not even GPL-lite where you could use it as an API). Didn’t have power modulation. And the replacing driver bit made the native software fail.
I scrapped K40Nano and wrote a from scratch driver for Java to include in Visicut. Got a bit disillusioned with the lacking fine grain controls there. So I started up MeerK40t hoping to write something that people could hack on the code and work with it. It seems like there’s a lot of talent out there and not equal parts access. I figured out how to do PPI power modulation and reverse engineered the native windows CH341 driver.
I coded it properly threaded so you can use the interface while it’s running or run multiple devices at the same time. And view realtime information about it the current workings. I gave it a proper transformation matrices so you could zoom and pan and those nice guides etc. I coded it so that the different parts don’t depend on each other implicitly. You can switch elements out and it won’t care.
I made sure to avoid pitfalls, everything is processed for multilingual support. I don’t ever use colors to be the only way to see things are different. Grey and blue are the same color to some colorblind people and whisperer has that the only way to tell rasters from engraves.
I included a few killer features like Zingl-Bresenham curve draw algorithms. When it draws a bezier curve, that’s drawn from the values of the bezier curve and is pixel perfect. It’s not subdivided into lines ever, it’s a native plotting of the shape at the most basic level.
I spent a lot of extra time making sure to reverse engineer Lhymicro-GL as well as I could. The stuttering during rastering in Whisperer is largely absent in MeerK40t as the code used is much more compact. I also made sure to include things like vertical rastering. I spent a long time thinking about the core workflow methodology which made me realize one of the core issues in laser cutting software. Namely the over-focus on the elements rather than what we’re doing with the elements.
I’m currently working on a few more really good features. I’ve added webcam support with fish-eye correction (still needs alignment to the field). And I’m adding a GRBL mode so you can use MeerK40t like it’s a networked GRBL device and it’ll just do the translations of gcode and lhymicro-gl and let you use programs like Lightburn and Visicut and LaserWeb to control MeerK40t. And since everything is threaded it just shows you the position updated and lets you view the stuff being sent to the controller etc. Even if LBS doesn’t get around to adding Lhymicro-gl support, I’ll have GRBL support, which would open up those software platforms anyway.
There’s some backchannel discussions about expanding lhymicro-gl and making some hardware that basically runs on the same principles. You could add PWM control, zbed control, other GPIO pins to a cheap Arduino and with the software streaming the bytecode controller commands (which is what lhymicro-gl is) you could easily raster faster than stepper motors could allow and have all the bells and whistles people seem to want for like 15 bucks, without any limits on software used.