Hi,
I’ve started looking at developing software for design and driving CNC devices and wanted to see if there was any interest in people collaborating on this.
The reason for developing new software is that none of the software currently out there is right for what I want, and possibly other people, and I think that better software can be written. Hence this post.
I have spent a lot of time thinking about this over the last few months and have had a number of attempts to work out what I think would be a viable usage design and model. I’ve put together a very simple core solution to test integration ideas out and I think it will work. However I don’t want to give people the wrong idea and that there is a finished application out there because there isn’t. There is significant work to be done, but the advantage is that you can make the software work the way you want to.
The target that I am setting for the project are as follows:
-
It needs to work across multiple platforms, e.g. Windows, Mac and Linux.
-
It needs to be open source.
-
It needs to be modular to allow people to extend it. I suspect that people could extend it in ways I would never imagine. However modularity is not quite as easy to do as people believe or expect
-
It needs to have a simple design capability built in. Minimal Viable Product (MVP) for this would be a simple 2.5D design system, e.g. simple shapes including complex concave and convex shapes with holes in them alongside depth information.
-
It should run locally and save work locally as well as in the cloud (which is just a term for a remote net work save).
-
Project files should be interchangeable between platforms.
-
Tooling should be simple and easy to use. If tool changes are to be done, then this should be simple to achieve on an MPCNC device.
-
It should interface directly to either Octoprint, CNC.js or to the latest standard offering from V1 Engineering. I am unclear what this is at the moment though
-
The output module should produce G-Code. The version needs to be defined and agreed. There is nothing to stop other output modules to be defined and built.
-
It needs to use common languages that are readily available. At this moment in time, the current version uses Electron.js for the overall wrapping of the application, fabric.js for the design panes, Angular 10 for the framework and Typescript.
-
The work should be stored in an easily accessible repository. Currently this is a Gitlab system hosted locally.
Work to date
So far I have built a test system to see how things fit and work. Electron.js works with fabric.js, Angular 10 and Typescript. Two minimal pages/components are setup, though they do very little, but you can move a piece of text around on a page and rotate it. ngrx is being used as a storage management layer and that’s proven complex to work with.
A Gitlab repository is setup and is available for users. It is not a pubic repository as I’m still unsure of the direction for some of the work.
There are simple build instructions that work, I’ve tested them on Linux and Mac but not on Windows, though I have no doubt it will work. Famous last words.
What needs to be done?
Basically everything. I will slowly work my way through the work but it will take time, the important thing for me is getting up to speed in Angular 10 and the new ways of working over Angular (which I know). There is a initial Kanban board that would need work to populate. I am happy for anybody to contribute but we need to be organised and methodical. I have seen too many projects fail as people get enthusiastic at the beginning and then lose the enthusiasm over time. I have no expectations of this working this year.
My plan of activity (if it was just me) would be:
-
Get ngrx working so there is a storage and undo/redo mechanism underpinning the application. I think it’s important to get the foundations right.
-
Get a simple set of shapes working, possible just a rectangle in fabric.js
-
Write a simple tooling selection page allowing tools to be chosen.
-
Write an interface class to export the data out of fabric.js with depth information to a gcode generator.
-
Write a simple gcode class to move the tooling around. Do not optimise at this time.
-
Write an interface to Octoprint as thats what I have on my CNC machine and its a public API.
Once the above is done, iterate around and then add in the nice to have things like, menu’s, file save and restore, different types of tooling paths, different shapes.
If you are interested, please let me know via message or here. If you want to know more ask, if you want to chat more, no issues, I now have so many different comms channels, from Slack, Zoom, Facetime, WhatsApp, Circuit (propriety to Atos Origin), Amazon Chimes, Skype, Skype for Business, Cisco WebEx and probably a few more I forget about.
I am more than happy to open up access to the Gitlab repository to people who are interested.
Here’'s a picture of it running on my Mac
Many thanks for reading this,
Rob