CAD, From Scratch: MakerCAD

It’s likely that many of you use some form of CAD package, but how many of you have decided you didn’t like the software on offer? [Marcus Wu] did, and instead of griping, he wrote his own CAD software. It’s called MakerCAD, it’s published under an MIT licence, and you can try it yourself.

It’s written in Go, and it’s superficially similar to OpenSCAD in that the interface is through code. The similarity is skin deep though, as it provides the user with constraint solving as described in the video below the break.

As it stands it’s by no means feature complete, but it is now at a point at which it can be evaluated. Simple models can be created and exported as STEP files, so it can be used as a real-world CAD tool.

Whether it will flourish is down to the path it takes and how its community guides it. But we’re pleased to see any new open source projects in this space, which remains overly dominated by proprietary packages. If you try it, write up your experiences, we’d love to see how this develops.

5 thoughts on “CAD, From Scratch: MakerCAD

  1. Nice to see some normal design goals. Still insufficient for me and OpenCASCADE is a road to hell :)
    That’s why I’m working on my own code CAD based on SymPy and Manifold3D.
    Pros:
    – You can have free variables and use expression everywhere, not just in constraints. Constraints are just specific form of equations with prepared helpers/ctors.
    – Manifold3D library is infinitely times more robust than OpenCASCADE.
    – Model parts do not have to constitute DAG and are built at once (if there is exactly one solution) unless you want to reference some part of drawn geometry i.e. of result and use it for more computations/drawings, see below in cons:
    Cons:
    – No geometric primitives in result, no faces, lines, just mesh. But I’ll be giving it an ability to look for such features when you can’t provide their analytical model because it’s hard or because it is imported as mesh in a first place… Think “measuring tool” in modern slicers. This breaks models into multiple individual drawings which need to constitute DAG and each such drawing needs to have exactly one solution for free variables used there. This it the most interesting part of me and it is quite working on simple examples.

    1. As the creator of MakerCAD, I agree and I have plans to keep it expressive while reducing the verbosity. I also intend to build a UI in the future which will provide a traditional interactive CAD producing the code behind the scenes, but without requiring the user to write it.

  2. I agree with you about OpenCascade. It’s an API maze, a documenration desert, a performance hog, a legacy painful debt, and a compilation circus.
    That said it has LOTS of features, can handle complex geometric operations, and, most important: it evolves and improves !

    1. All of those things about OpenCascade. It is one of the most evolved open source brep CAD kernels right now, though. I have a roadmap for MakerCAD that will take me quite some time to complete. If no other CAD kernel exists in Go before I reach a point MakerCAD’s roadmap requires it, I may consider writing one to replace OpenCascade in MakerCAD.

      That’s exactly how dlineate came to be (the 2D constraint solver that MakerCAD uses). I used a different constraint solver until the project outgrew it and then wrote my own.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.