How We Built a Plugin for MS Paint

Today, we are announcing the seemingly impossible. We have successfully built a Flux plugin for MS Paint that can use the 2D images you draw with it to build 3D Rhino and Revit models.

The story behind this plugin is short: one day someone challenged us to build an MS Paint plugin on Twitter. At first, we just laughed at the absurdity of the suggestion. But the more we thought about it, the more we realized that this was an incredibly difficult engineering challenge. And we love hard problems. So we decided to give it a go.

During our most recent internal hackathon, a team of six engineers put their heads together to tackle the problem. The first question we needed to answer was how we would represent a 2D image in 3D space. Pretty quickly, the team realized that we could learn from Revit. Revit represents 3D models in 2D as plan and elevation views. And so, it would make sense for Paint to operate as a canvas for drawing plan and elevation views that would then be extruded using the Flow.

The second question we needed to answer was how users would select what they wanted to send to Flux. Unlike Powerpoint, Paint does not easily allow for the selection of shapes on the canvas after they are drawn. This sparked a little more debate. Half the team believed that users should be able to use the Paint selection tool to capture the areas of the canvas that they wanted to send in a data key. The main issue with this solution was that the selection tool was not very accurate because of its fixed rectangular shape.

The other half of the team believed that everything drawn on the canvas would be sent to Flux in a single key. But again, this solution had issues because different parts of the drawing needed different treatments in the Flow. For example, a rectangle might become a rectangular prism, whereas a triangle might become a pyramid, so the elements needed to stay independent.

Eventually, we compromised: each time a user draws a new element, it is sent in its own independent key. That way, a user in Constantly mode can draw uninterrupted and have Flux working in the background to capture each part of their drawing. We recognize this solution isn’t perfect. It works quite well for shapes, but not as well for more freehand drawing. This is something we hope to improve on for version 2.0.

It took the team approximately 23 hours and 48 minutes at the hackathon to get the plugin to work, and after ample catch-up sleep and a few more coffees, we refined the experience to a point where we have confidently released version 1.0 into private beta.

In the next few days, we will release a tutorial for the behind-the-scenes computation that the Flow needed to do for the above gif in order to complete the evolution of the 2D shapes into 3D Revit elements.

At Flux, we are constantly pushing the boundaries of design, and we hope you are as excited as we are.

Your design tools, working together. This is Flux.

Editor’s Note: Happy April Fools! We hope you enjoyed reading this as much as we enjoyed creating it :)