The FreeCAD Arch module, development news

I recently made a bit of progress on the Arch module front. Things are still far from efficiently usable, but there are already a couple of easy operations that can be done, and several of the tools have been refined. We now have two basic architecture components (Wall and Structure) and containers (Cell, Floor, Building an Site), plus two tools to simply add or remove components to/from a container. This is temporary, that operation is planned to be done by dragging and dropping directly in the tree view later.

The wall and structure tools are most useful when used with a selected object such as a line or open wire, for a wall, or a closed shape, for a structure. But they can also be invoked without any selected object, in that case the wall is built on a default line that can be edited and extended, and the structure is a simple cubic element. They can also be based not only on a wire, but also on a face or a solid. Of course a face only allows to specify an extrusion heigth (no width and length) and a solid doesn't allow you to teak anything. But in the future when walls will grow more complex and orient how they look in 2D be able to make any solid shape behave like a wall will be very useful.

I also built a temporary system to export 2D data from blender to FreeCAD, while there is no dxf exporter available for blender 2.5x. There is also a new "group layers into compounds" option to the Draft dxf preferences, which, instead of importing every single dxf entity, groups objects from same layers into compounds, which turns the import and 3D view operation blind fast.

Another area where I put some effort recently is in the blender to freecad workflow. There is nothing better in the world to conceive architecture than blender. Think of the flow and easiness of sketchup but with the power of 3ds max. But blender works in meshes, which is at the same time annoying and the key for its success. Meshes are very simple (too simple), but because of that, very flexible and fast.

FreeCAD imports blender meshes very easily. Until now I haven't seen that operation fail once. Just export them as .obj from blender, and import that .obj file in FreeCAD, thats it. Remember that the obj format has the annoying particularity to invert Y and Z axes.

Maíra and me are currently working on a project that is totally developed on blender. This is the project in blender, so you can evaluate the complexity:

And the same project, exported and imported in FreeCAD:

Everything is there, precisely. The file in that state is available here, in case you want to have a look. In spite of the complexity, the 3D display of FreeCAD is totally able to handle that amount of data fluidly. The big hiccup is when you are getting a lot of separate objects in the document, but I'll come to that later.

I also drew a base plan in draftsight (on top of an exported 2D view, with the tools I mentioned earlier. That plan was saved in dxf and imported back in FreeCAD:

I then positioned and rotated that plan to fit perfectly under the mesh model. Since both were extracted from the same model originally, the coincidence is perfect. I did it that way and not the other way round so next time I import the meshes from blender they will fit right into place.

Then come the interesting bits. I first added a tool that splits a mesh into separated components. When you model in blender, it is often more convenient to group several objects into one. For example, here, each building block is one blender object. This allows you, in blender, to keep everything under one local coordinates system. But you must also take care of keeping different part dissociate (use the Y key a lot), this makes it easier, for example to select all pillars inside the buiding. And finally, you must also take care of creatign as little non-manifold pieces as possible. Non-manifolds cannot become solids, which is very important later. Use a lot Ctrl+Shift+Alt+M in Blender to highlight non-manifold edges.

The split tool in FreeCAD also highlights non-manifold components, painting them in red:

Then it's easy to temporarily turn off the non manifold components, and concentrate only on the important parts:

Then there is another tool to convert selected meshes into solids:

This tool is based on a macro that has been on the wiki since a while, based on Werner's mesh-to-part conversion work. The big thing is that it joins coplanar faces, simplifying tremendously the geometry. But I found out it still behaves bad with very complex meshes, made of a lot of small faces. In case the tool cannot build solids, the bad results are also highlighted, and the mesh is not deleted:

But anyway it doesn't make too much sense to have beams and slabs as one big element, so I'll either remodel that part in Blender or directly in FreeCAD. Once we have or solid Part shapes, converting them into walls or structural elements is a simple press of a button (I pained them in yellow here so it's easier to see):

That's about where we are now. Not much you'll say, but turning "raw" mesh data into parametric objects is a very important piece of the game. Next development steps will include complexifying those objects and giving them additional properties, then I'll start experimenting with automatic sectionning, which will probably be the most spectacular achievement. At the end of the jouney, I plan to obtain that kind of output:

The first one is the dxf plan that I imported in FreeCAD above, the 2 others are sections taken from sketchup. They look quite nice, but they are extremely unusable because of the too high complexity. There are so many lines that it is almost impossible to rework, in any application. But sketchup makes sections for rendering, not for reworking, and I have good hopes to achieve much better results inside FreeCAD, since our objects are not meshes anymore but much optimized solids, and getting precise contours, and distinguish what is cut from what is viewed is very easy.

A final note about complexity, the biggest problem at the moment in FreeCAD is that when dealing with high number objects in your document, things get pretty slow. A 2D plan like the one above, when imported line by line, is almost unworkable. But the complete mesh project from the first image shows that the 3D view is perfectly able to handle a very high amount of data, the tremendous difference shown by my little upgrade to the dxf importer and Jürgen's recent work on the View Providers show that the problem is totally solvable. The key, at Arch module level, seems to be in quickly grouping smaller objects into higher-level containers. I'll also have a look at the FreeCAD zoom system, but there are certainly many things to do to solve that issue.

That's it for now, thanks for reading until here!