“Make everything as simple as possible, but not simpler.”
- Albert Einstein

When I started Shapesmith, my vision was to create a simple, yet powerful 3D modelling application. Up to a few weeks ago my main focus was on creating a strong technical foundation that I could build on, and I'm quite pleased with the current architecture. Usability had been important, but not the top priority. This has changed.

My first attempt at simplifying geometry creation was illuminating, but unsatisfactory. The idea was to create a re-usable 3D cursor to move around 3D space to create radii, widths, move the origin etc. This turned out to be a step in the right direction, but too complicated for my liking.

It also became obvious that making it simple to design models requires the ability to move, rotate and resize objects with only a few mouse clicks and drags. This is something that other graphics and 3D modelling applications have as standard. And as Mr Potato Head would say:

“Hey, a laser! How come you don't have a laser, Woody?”

Well, I've been working on the laser...

Moving, Resizing, Rotating

Moving, Resizing, Rotating

Shapesmith now has simple translatation, rotation and scale operations. The interaction is based on Inkscape, my favourite vector drawing application. When an object is selected, you can see the draggable arrows that you can use to scale, and the draggable box at the center to translate the object:


The scale arrows are used to scale:


When you click on a selected object again, the scale arrows are replaced with rotation arrows for the three major axes:


Mouse-only Geometry

Using the lessons learnt from the new transformations (including better abstraction in the code using parts of backbone.js), I re-worked all the geometry creation as well with the aim of making it possible to create geometry only using the mouse. The concept of a re-usable 3D cursor has been abandoned in favour of geometry-specific interactions:

Geometry creation

The Tree View is still fully functional, and can be used to edit nodes that are not top-level nodes, existing transforms etc. by double-clicking on the values. The Tree View is hidden by default but still available to advanced users:

Hidden tree View

What's next?

In terms of usability, the next area I'm going to focus on is a dynamic workplane. At the moment, the workplane is static at the origin, and oriented in the Z=0 plane. A dynamic workplane implies being able to position it at specific coordinates, but also snapping it to flat surfaces. I would also like to experiment with other types of grids.

But more importantly, what improvements and features would YOU like to see next in Shapesmith?

Happy making.