Giter Club home page Giter Club logo

meerk40t's Introduction

MeerK40t

MeerK40t (pronounced MeerKat) is a built-from-the-ground-up MIT licensed open-source laser cutting software.

Primary Goals

  • Provide users with high quality laser control software.
  • Provide developers with a highly extensible platform to help further their own ideas, and provide novel work to the laser community at large.

Running

MeerK40t is written in Python and precompiled versions are available for download for Windows, Mac OSX, Linux and Raspberry Pi (more infos below). Do note this sometimes will give false postitives for various viruses (especially since Meerk40t isn't signed).

Source

Alternatively you can run MeerK40t directly from Python. pip install meerk40t[all] with python installed will usually be sufficient. Then merely run meerk40t at the command line.

See Install: Source wiki page

GUI

meerk40t8

The wxMeerK40t is the GUI and is written in wxPython. We use AUI to allow to have a very highly configurable UI. We can easily add panes and tools and there are quite a few available already.

Command Line Interface

Meerk40t has an advanced internal console system allowing access to most parts of the code with various commands. It also provides a command line interface which should allow you to automate any processes.

Drivers

Meerk40t provides a variety of drivers with an extensible framework to provide support for other new laser devices. The code was written with the myriad of possibilities for different software in mind. For example, it may be essential that GRBL be able to reset an alarm or notify the user of particular error codes. The configuration for GRBL is not the same for the configuration of other laser control drivers. With this in mind, Meerk40t can radically change how and when it works

Supported devices

  • Lihuiyu M2/M3-Nano
  • GRBL
  • Ezcad2-compatible JCZ controllers galvo lasers
  • Moshiboard
  • NewlyDraw System 8.1 Lasers
  • Ruida-Emulation (Middleman between Lightburn and K40)

Lihuiyu M2-Nano

For the Lihuiyu (stock driver), Meerk40t supports both the windows and libusb connection methods, making it compatible with Whisperer and with the original Chinese software. So MeerK40t can usually run alongside these other pieces of software interchangeably.

GRBL

GRBL is itself open source and the various interfaces with the board should be quite well understood.

EZCAD2-Compatible Galvo LMC

Meerk40t supports controlling galvo as well as gantry lasers with open source support.

Moshiboard

The support for old moshiboards makes meerk40t the only known opensource software that controls moshiboards.

System 8.1 Lasers (NewlyDraw)

HPGL-modified laser systems produced under many different company names

Support

The primary source for help and documentation is the MeerK40t Wiki - please click here.

If you have a bug, feature request, or other issue raise it here. These are likely to be resolved. Squeaky wheels get the grease. https://github.com/meerk40t/meerk40t/issues

If you need additional support, please research/ask on:

Assisting the Project

Open source projects live and die with their support. There are a lots of ways to help the project. There are also a lot of ways the project should help you.

  • Code
  • Provide Translations in other languages.
  • Design ( Good design instincts, smooth out the rough edges)
  • Compile/Testers
  • Beta testers
  • Make helpful support content
  • Make guides ("How to set up cameras?", etc.)
  • Bounce ideas around

Download

You can find and download all current and historical versions in the Releases section.

Currently, primary branches:

  • 0.9 - Active - New features and some underlying architectural changes. Try the latest released version: 0.9.2
  • 0.8 - Maintenance - may receive critical bugfixes but no more new features, latest version: 0.8.12 (Oct 17, 2023)
  • 0.7 - Discontinued - K40 support only (including ruidacontrol emulator for 3rd party lasersoftware integration), latest version 0.7.10 (June 13, 2023)
  • 0.6 - Discontinued - K40 support only, latest version: 0.6.24 (Oct 11, 2021)

Just download one of the files for Windows, Mac OSX, Linux and Raspberry Pi.

Lightburn integration

Meerk40t allows to act as an intermediary between your K40 laser and software that supports Ruida-controlled laser equipment - Lightburn is a relevant example of such a software product. You just need to issue the command ruidacontrol in MeerK40ts console window, and you will then be able to add an emulated Ruida Laser inside Lightburn™. Laser jobs that are created inside Lightburn™ and sent to this laser will be picked up by MeerK40t and sent to your K40. See some more detailed instructions in this video. Please note ruidacontrol will require the DSP version of Lightburn™. (Present in all versions since 0.7)

With 0.9 another way of interacting with Lightburn was introduced, which will work as well with the standard version of LB: You just need to issue the command grblcontrol in MeerK40ts console window, and you will then be able to add an emulated remote GBRL-LPC laser inside Lightburn or any TCP GRBL control software.

meerk40t's People

Contributors

apbarratt avatar dpticar avatar frogmaster avatar gsboylan avatar jaredly avatar jkramarz avatar joerlane avatar jpirnay avatar martonmiklos avatar rozzy1987 avatar sophist-uk avatar tatarize avatar tiger12506 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meerk40t's Issues

Multi-pass raster object.

Raster the same image several times at different speeds for different cut times. There's no need to raster the same pixels repeatedly at the same speed. If we calculate the pixel time to burn amount based on the heat impact, we can actually get pretty significant detail overall in a couple passes.

Image Manipulations. = RasterWizard

The raster routine will at current take an image and anything greater than 127 is black etc. But, there's need for basic image manipulation within the program. It uses Pillow which will naturally have Floyd Steinberg dithering built in and can do basic operations like resizing and cropping. This might be hard to do outside of the scene. To get the DPI vs. physical size correctly setup. And the image manipulations used might be beyond basics. And scripting a good process shouldn't be too hard.

Proper transform interfacing.

The transforms shouldn't use a bunch of cryptic menu items but rather should just let you adjust the element in place. So you can drag it to the size and rotation you want. Perhaps with a button for flip horizontal or vertical.

Does not save settings.

Saving the setting is as important as setting them. Currently forgets them every time it's closed.

Start from middle.

It's likely a typical thing that the execution of laser project will break at some point. If we still have the correct sequence we should be able to move the head to some point within the design and start from that point. So a sort of resume without knowing the current position feature. So rather than start at cut 0, start at cut 2449 moving the head to relevant position.

Display and track the laser head position (needs improvement).

The execution of the Laser Job Elements works, but using the navigation to move the head will move the head but not the design. The start location for the design is still in the same location. Unlocking the rail and moving the head loses that location. And sometimes ends up being needlessly confusing without knowing where the program believes the laserhead is.

Eulerian filled rasters.

It might actually be correct to apply the Eulerian fill algorithm to lasering. So as to rasterize the monotone parts in a more coherent way. Rather than travelling the scaffolding around the edge, we can do a direct move of the head. Since we won't be using the laser. But, There are more than a couple examples where this would be more optimal than the default methodology since traveling across a gap repeatedly could easy take more time than simply subdividing the monotone sections and rastering them individually.

Use SVG size attributes.

It defaults to the default size but if it gives physical size make that work correctly. Too many svgs are showing up too small without the physical size scaling factors being applied.

Error spooling PNG images

8-bit Grayscale PNG images are not spooling to engrave.
I tested this with 24-bit colour images and they were able to spool and engrave.

Tried multiple times with an 8-bit grayscale image and

Phase 1: All Critical Functionality.

The core elements should work. It should not lack any expected features.

The main use methodologies should be have reasonable coverage. This seems to be loading a project from a set location, and reloading the same file as it's edited elsewhere. This reprioritized some elements. But, gives a straight forward roadmap.

Concurrency.

Check for concurrency errors, or how python handles them. There may be need to add in blocks to prevent them with multiple threads running.

Too many large colored buttons

" I can't say it is clear to me whether the laser is on or off. it must be absolutely clear that laser is on."
"too much colored buttons is confusing."

Kerf Correction

The svgpathtools class has the offset curve ability and I natively use the correct type of curves. It's not hard to nudge offset the curve by half a beam length in one direction or another.

Force the SVG Parser out of Compact Mode

Ran a test SVG file and after it was done, I hit the navigation buttons and it executed those movements at the same slow speed, with the laser on, in compact mode.

Alignment tool

K40 alignment is a newbie nightmare. It's entirely possible to help this. Since firing the laser for exact periods of time we can very slightly burn paper or burn it consistently and move in a straight line. Since mathematically what people need to do and what they don't know is that they are looking for the overlap point which is not necessarily the center point of the laser. They need to find the point where the close point (dot put on the paper/tape, etc from the home position) and the far point (dot put on the paper/tape, etc from the farest y-position from home) are the same point. For any mirror alignment this is going to be a straight line going from far point to near point then to overlap point which will be through the near point (since the beam already travelled in the wrong direction for a bit there). For the Y-axis this will be about 1/7th of the way through the beam.

finding overlappoint

So we could certainly help this if we home. Then fire a 100ms pulse, then move something like 20 increments of 10mm in the y direction for 20 ms or so. We'd know that the overlap point is through the big dot from the small dot directions. The tool itself would be a bit like the navigator tool but more concerned with running some prebuilt alignment test.

Convert Icons to Text

Most Wx.Widget stuff uses text icons. The icons used here should be converted as such.

Start a new process for the execution.

The execution does not take much in the way of computing power, but because it uses the UI thread the various other windows can often stop responding. The elements are built on the idea that these processes will be non-overlapping so the UI can be updated independently. Which requires that they run in different processes.

Fire laser for exact duration

The fire laser in control could have a very useful function if an exact duration could be set. Aligning things might get easier if we could control that aspect rather than the slop of hitting the test button.

Software Laser Pulsed Control.

https://forum.makerforums.info/t/laser-pulsed-control-ppi/76644

The idea is simple. We pulse modulate the beam in software. Basically we take the cut we're making and rather than just split it into plot positions, we split it into plot positions with a beam modulation value. So every 5th position or so when we said the laser should be on. We actually turn the laser on but only for that cut element. It would fire a bit like a raster line does, but while doing vector shapes and would be basically the same as PPI but in software.

EgvParser rebuild rasters.

There are some giant .EGV files mostly of the raster variety. It builds the loaded EGV as a path. However, the parser could also find the raster elements within the code and make those images again. This would make loading them easier as they wouldn't be prohibitively expensive to load, and could allow modifications to them that otherwise wouldn't be possible like switching from raster top-to-bottom to bottom-to-top.

Job time estimate.

Iterate through the various elements of the job counting the simple moves and the speed they are taken at to calculate the job time.

Power Modulation Raster Mode.

It occurs to me that the same trick I use to do power modulation might actually work to do power modulated rastering. For example when you do 3 steps which is 333 dpi. It makes the length and width equal by stepping vertically 3 mils at the end of the raster line and within the raster line it draws pixels as 3 ons in a row or 3 offs in a row depending on the pixel state. If I don't do this but rather vary the overall power modulation, it could produce much finer details. Also, the error carried from the PPI modulation would actually matter too. It might actually look like full on regular power modulated rastering in a Stock K40 M2 Nano.

In fact, even in single step rastering this would actually just end up causing what is effectively a scanline dither. You might actually be able to just take the luma of the pixel and add it to a running total and when it exceeds max(luma) subtract max(luma) from the total and fire the laser for that pixel. This would basically result in a dither, that would apply even in stepped mode. And it would effectively cost nothing to make the image significantly more detailed.

Allow moving the home point for the bed.

Oshik Nissim "What I meant was if one wants a specific point on their cutter bed to be in coincidence with meerk40t 0.0 points - is there a way to move your canvas to accomplish this?"

There should be some method for doing this. And maybe have the home command return to to the new location within the bed position. So if you set a home point that is not the origin point the 0-0 for the guides is set to position from that point and homing the machine will cause it to send a HOME command, but also then move back to the home point. Usually this would be something like the upper right of the piece you'd be working on.

RMB on path/group has no effect if project/parts is selected

Might be related to #45
If Job parts or Project is selected/highlighted, right clicking on "Group" or one of the paths does not bring up pop up menu.
While mouse button is down, "project" or "job parts" selection is gone (no blue highlight anymore), but reverts to selected when mouse button is released.

Phase 2: Full installer.

When beyond phase 1. It needs a proper installer. Shouldn't require anything from the user.

Feedback and people are a must for this project so once beyond initial phase 1. Phase 2 should be getting a proper installer.

Multiple selection from tree.

You should be able to select multiple objects and modify their settings as a group, even if they aren't themselves part of a group.

Map out and flesh out all SVG/Path Issues.

With regard to the goals to spin off the svg.path code as improved version of regbro/svg.path code. Must conduct a general audit to verify all functionality of SVG. Rectangles with Rounded Corners don't get their rounded corners, for example. And Matrix Transforms starting in SVG 2.0 will include other properties that aren't really accounted for just yet. We should support SVG 1.1 with many of the 2.0 features.

SVG must:

  • Read and process all XML constructs defined in XML 1.0 and xml--names.
    *Parse any confirming XML-compatible SVG markup fragment in a manner that correctly respects the DOM structure of the content.
    • Meet all XML well-formedness constraints.
    • id attributes are valid XML IDs.

SVG graphics elements:

  • Shapes straight lines and curves.
  • Text
  • Raster Images.

SVG Should:

  • Parse all CSS syntax features defined in CSS Level 2 Revision 1.

CSS2 requires:

  • Support CSS styling of SVG content including all required properties and features in Styling chapter.
    Required Properties.

Required SVG Properties.

  • all properties defined in this specification

  • the display, overflow and visibility properties [CSS2]

    • display="none" results in element not being rendered. Render excluded from rendering tree.
    • visibility to hidden or collapse still part of rendering tree but not painted. Inheirented.
  • the cursor and text-overflow property [css-ui-3]

  • the clip-path, clip-rule and mask properties [css-masking-1]

  • the color and opacity properties [css-color-3]

    • Style color property is used to default indirect currentColor.
    • Property opacity <0.0,1.0>, or percentage.
    • rgb() function. Optional percentage, optional commas.
    • rgba() function, rgb with additional opacity.
    • 8 digit hex value
    • 6 digit hex value
    • 4 digit hex function
    • 3 digit hex function
    • transparent = rgba(0,0,0,0)
    • predefined basic color keywords.
    • predefined extended color keywords.
    • hsl(, percent, percent) value.
    • hsla(, percent, percent, opacity).
      • The angle value is CSS angle so deg, grad, turn, rad
    • currentColor keyword. Sets, to the value of the color keyword. Causes color inherit.
  • the color-interpolation-filters, filter, flood-color, flood-opacity and lighting-color properties [filter-effects-1]

  • the isolation property [compositing-1]

  • the transform, transform-box and transform-origin properties [css-transforms-1]

  • the letter-spacing, text-align, text-align-last, text-indent and word-spacing properties [css-text-3]

  • the white-space property [css-text-4]

  • the vertical-align, dominant-baseline, alignment-baseline, and baseline-shift properties [css-inline-3]

  • the direction, text-orientation and writing-mode properties [css-writing-modes-3]

  • the font, font-family, font-feature-settings, font-kerning, font-size, font-size-adjust, font-stretch, font-style, font-variant (along with its subproperties) and font-weight properties [css-fonts-3]

  • the text-decoration, text-decoration-line, text-decoration-style and text-decoration-color properties [css-text-decor-3]

  • CSS Required Features:

    • in XML documents, external CSS style sheets using the processing instruction [xml-stylesheet]
    • @media, @import and @charset rules within style sheets, as defined in CSS 2.1
    • @font-face rules within style sheets [css-fonts-3]
    • all pseudo-classes defined in CSS 2.1 (including :hover, :link, :active, :visited, :focus, :first-child and :lang)
    • the ::first-letter and ::first-line pseudo-elements defined in CSS 2.1 (on ‘text’ elements)

SVG must:

  • Apply styling Styling properties to SVG content using presentation attributes.
    • Areas of an image of SVG content may have opacity less than 100%. The viewer must at least support Simple Alpha Compositing of the image of the SVG content onto the target canvas, as described in the Compositing and Blending Specification [compositing-1].
    • pathLength, stroke-array.

SVG must:

  • All visual rendering must be accurate to within one device pixel or point of the mathematically correct result at the initial 1:1 zoom ratio. It is suggested that viewers attempt to keep a high degree of accuracy when zooming.
  • On lower-resolution display devices, support for anti-aliasing or other smoothing methods is highly recommended. It is a requirement for conforming high-quality SVG viewers.
  • If printing devices are supported, SVG content must be printable at printer resolutions with the same graphics features available as required for display (e.g., the specified colors must be rendered on color printers).
  • On systems which support accurate sRGB [SRGB] color, all sRGB color computations and all resulting color values must be accurate to within one sRGB color component value, where sRGB color component values range from 0 to 255.
  • SVG implementations must correctly support gzip-encoded [rfc1952] and deflate-encoded [rfc1951] data streams, for any content type (including SVG, script files, images).
  • The viewer must use at least single-precision floating point for intermediate calculations on any numerical operations for conversion of coordinates.

Key/Mouse assignments, keymap hotkeys

"Use the combo of shift+wheel, alt+wheel, ctrl+wheel. Ie emulate common drawing program combos."

"Or a settings panel to switch between preset options. Ie when people see a setting they know it's an option."

Beep on Job Finished.

Might as well. Though really, no sense burning down your house with an unwatched product.

Better Icon

Obviously cheating with the icon. Meerkat shooting lasers from its eyes is nice stand-in but a terrible long term branding.

Cut ordering with 2-opt

The cut optimization routine would benefit from a 2-opt correction for the travelling salesman problem to minimum the cut distances overall. This should be done with and without speed changes.

Zingl Arc Plotter

Zingl Arc Plotter is a kludge. I cheated and subdivided all arcs into sets of cubic bezier curves. It's close enough nobody will notice Zingl's code runs the rotated ellipse with rational cubic bezier curves since you can weight them to exactly equal arcs. This is clearly the preferred method for plotting an arc since it properly solves for the inflection points.

SVG does not size properly after import

Attached file (zipped because .svg is not allowed) does not size properly after import. Works in k40 Whisperer V0.27.
Had this issue with a number of other files as well.
Exported from Inkscape, document
back.zip
Inkscape document settings:
2019-09-27 10_17_42-back svg - Inkscape
Result on import (note sizing):
2019-09-27 10_19_31-MeerK40t

TypeError exception while importing SVG

Traceback:
Traceback (most recent call last):
File "MeerK40t.py", line 417, in on_click_import
File "MeerK40t.py", line 332, in load_svg
File "LaserProject.py", line 371, in svg_transform
File "svg_parser.py", line 377, in parse_svg_transform
TypeError: post_cat() takes 2 positional arguments but 7 were given

Raster processing did not enter into Compact.

The 9/7/19 version. Currently had rastering slowly jerk around without firing the laser. It's likely not properly entering compact mode. In theory the raster mode should use the middle language for the program. So it does the v_flip and h_flip commands correctly for the raster steps. It's current system of returning positions, and the pixel value needs to be reworked for the new methods.

Only Top Down Raster properly works.

Bottom Up raster issues a nasty jump before starting.
The Y-axis rasters might need to be converted to vector mode edge ticking, rather than real raster mode.
If unidirectional mode was needed it would likely also need to be done this way.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.