2 weeks ago Father Christmas delivered a MakerBot Thing-O-Matic 3D Printer to my office. I think I understand how it must have felt to own an Altair 8800 back in the day when the world was on the brink of the consumer computing revolution. Consumer 3D printing could be another such revolution. But to print something in 3D you have to create a 3D model, and my survey of the software tools available for 3D modelling has been very disappointing. They broadly fall into the following categories:
- Expensive to very expensive professional products.
- Tools with modelling capabilities aimed at rendering.
- Cheap or free alternatives that have limited capabilities or are difficult to use.
Expensive to very expensive tools are tools like AutoCAD and Autodesk Inventor. These are professional packages and can run into thousands of dollars per license. Definitely not affordable for the average consumer.
Applications that have modelling capabilities but are aimed at rendering are those such as Blender, Maya and 3D Studio Max. These applications can be very complex and have advanced features such as texture support, modelling of lighting etc. However, these features are not very useful for 3D printing.
I would puth Sketchup, OpenSCAD and 3D Tin into the "free but limited/difficult to use" category. Sketchup is quite nifty, but is not parametric, and is not a true 3D modeller. OpenSCAD probably comes the closest to satisfy my needs, but it is a "Programmers Solid 3D CAD Modeller" and has an interface that most people will find difficult to use. 3D Tin is a tool that runs in a browser, but doesn't have proper solid geometry modelling.
(For a good overview of what 3D tools are available, have a look at "25 (Free) 3D Modelling Applications You Should Not Miss" or the list of tools listed on the ShapeWays website.)
I was on a team that developed an advanced 3D modeller as part of an engineering tool suite earlier in my career, so I know what's possible. What I'm looking for is a tool that:
- is cheap, free or opensource.
- is parametric and has variables, so I can build a complex model, change a single parameter, and the model will adapt.
- has a productive UI.
Thus, in the great tradition of building something yourself when you can't find what you need, I'm building this elusive tool. This tool that I'm building has 3 core values. The tool should be:
- Accessible. It is open source and permissive so it will be accessible in terms of price and you can use it in your company. It runs in a standards-based browser so it will be accessible in term of device and operating system. It must be able to run in a school in a rural village with limited internet connectivity.
- Powerful. It must be built on a strong solid geometry foundation that uses boundary representation (BRep) to represent solid models. These models are mathematically complex and support advanced geometry operations, which is good for adaptability and longevity of the tool.
- Modern. What I mean by modern is that it must be internet-ready, it must have a RESTful API to allow others to integrate into their systems, and allow innovation. It must be part of, or lead to, an open ecosystem.
These goals are ambitious, but I believe with my combined experience in solid modelling and developing software and services for the web, they are achievable. I've been working on this for a few weeks, and the results are very encouraging. Let me briefly describe the current technology stack. There are 3 main components:
- A RESTful service. The is running the excellent webmachine in an Erlang VM. The RESTful service accepts geometry commands from the browser and uses those to create modelling requests for the solid modeller. The tesselation of the models (used for rendering) and meshes (for STL export) can retrieved from this API.
- A C++ OpenCASCADE worker node. OpenCASCADE is a very powerful open source solid modeller developed in C++. The mathematical representation of the solid geometry is contained in the worker process. Geometry command for unions, transformations etc. are received (in JSON format) from the Erlang process, and the operations are performed. The tesselation of each shape can be retrieved and forwarded on to the browser. If you are interested in OpenCASCADE, I suggest you start with the PythonOCC project. I found that to be very helpful.
Here's a little demo video of what I've done so far:
and here's the result of printing a similar gear on my Thing-O-Matic: