FreeCAD BIM development news - March 2019
Time flew this month, and there have been quite heavy groundwork on FreeCAD itself, as we have 0.18 release happening now! Everything is set up and ready already, but we're struggling to make the packages for all platforms. As you may know if you follow the forum discussion, this release supports both Python2 and Python3, and it's giving us some headache to make it smoothly working on all platforms.
So, just a little bit more patience, and thanks to the hard work of our FreeCAD package heroes, we'll have everything sorted soon. I'll do an official announcement here so you don't loose a minute!
In the meantime, since the main FreeCAD repo is now out of feature freeze, we've been busy merging the long queue of Pull Requests that were waiting. It's not done yet but most of it is merged. Expect some instability if you are compiling FreeCAD yourself from the master branch, but that is normal and should get better soon too.
Because of this groundwork and my architect life that got strangely busy for this time of the year (the carnival month uses to be quiet in Brazil...), I haven't been able to do as much as I hoped on the BIM front, but hopefully everything will be back on track now. Nevertheless, we've got hopefully enough here to keep fed for the month!
I worked further on the Barcelona pavilion series, and we're at the twelfth video already! Here there are (the first three are in the previous post), and you can get all of them at once from this youtube channel
The series is not finished, next episodes will show how to insert furniture/equipment, export the model to IFC for opening in other BIM applications, produce 2D drawings (plans and sections), and extract quantities. If you think of some specific aspect I haven't covered and that would be nice to add, tell me!
BIM / Arch refactoring
For the rest, I have been mostly busy starting to merge some of the features I've been developing in the BIM workbench recently, to the Arch workbench. As you know, the plan behind the BIM workbench is for it to act as a "user-friendly" layer on top of other workbenches (namely Arch), but not to provide specific tools itself. That is, all its important functionality should also be available in Arch.
Because of the feature freeze in the last months, however, I've added many things directly to the BIM workbench, which appear to be working quite well, so it's now time to transfer them back to Arch, so they are available to both workbenches.
As I mentioned here another time, we are progressively decoupling the geometry construction tools, in Arch, from their BIM semantics. This is something that annoys us all in many other BIM applications, that you must use the wall tool to create walls. Why can't you just use a box, or import an object from another application?
So in Arch, that's exactly what we're planning to end with: You will no more have a wall tool, a window tool, etc. You'll have geometry constructors such as "linear extrusion" (the current wall tool) or "embeddable object" (the current window tool) (we're not sure about the wording of all this yet). After you created such object, you decide if it is a wall or a window simply by setting its type. And that's it. You can use any of the geometry constructors or just any other FreeCAD tool or even any object imported from another application, and turn them into a wall, a column, a chair... simply by setting their type property.
And that's exactly how the IFC schema is designed too. So I think we'll be reaching a level of compliance rarely seen in the BIM world...
Of course, this can make many people used to other BIM applications feel totally lost. Most of them will still want a wall tool, a window tool, etc. That's exactly where the BIM workbench comes in. It basically provides you with the "BIM sauce" around this. You will still have a wall tool there, and it will basically be a thin layer on top of the Arch linear extrusion tool, possibly with a couple of handy presets. For the average BIM user, this all will be fully transparent, you'll still build your walls by pressing a wall button.
However, this is mostly cosmetic. You'll still have all the power beneath, and be able to change the type of your wall to anything you want afterwards.
IFC compliance changes
Thanks to a big refactoring by Dion Moult, that has just been merged, when you change the IFC type of an object, several additional properties needed by that type in IFC are now automatically added or removed. For example, if you change the type to "Column", a "Column type" property gets added.
Although I haven't met an IFC-capable application that requires these to be present, it raises the level of compliance of the IFC files exported by FreeCAD even more. Each month we have less and less problems with opening FreeCAD-generated files in other applications, and although FreeCAD will likely never get a proper IFC compliance certification, because it costs a lot of money that an open-source project like FreeCAD doesn't have (and honestly I don't really see any big advantage), I dare to say we begin to have a VERY compliant IFC workflow.
Another thing to note, the latest 0.6 version of IfcOpenShell, which is not released yet but that I'm currently using, supports several versions of the schema at the same time (currently IFC2X3 and IFC4). Our changes in FreeCAD follow the same line, so you'll soon be able to switch at will between the two (and future ones when they come)
BIM Diff tool
The diff tool I had been working on in the past months has now been consolidated into a bona fide tool in the BIM workbench, you'll find it under the Utils menu.
The work I have been doing on the BIMBots plugin is basically finished, it just waits for some upcoming changes to the BIMServer API to be declared ready and added to the FreeCAD add-ons manager. You can already try it by installing it manually (instructions and documentation available in the repo)
Not really BIM-related but interesting nevertheless, have a look at this gorgeous icon theme being worked on by Blender veteran 1D_Inc, soon available at your fingertips!
Several changes are also coming to the Draft workbench, the Edit tool is currently being upgraded and several of its long-time bugs fixed, the 3-point arc tool from the BIM workbench has been transferred to Draft, and we have many more ideas starting to get shape.
It has been announced last month the the free-to-use 2D CAD application DraftSight would no longer be free by the end of this year. This might appear as a sad news at first, because DraftSight is often referred as the only free, professional 2D CAD application with good DWG support running on Windows, Mac and Linux out there, but I believe it is actually a good thing for the open-source world. First, our CAD friend project LibreCAD now has DWG support, and it is working already and quite promising, and the DraftSight move can bring a lot of attention to LibreCAD, but also because it will also bring some attention to FreeCAD's own 2D tools.
Of course, FreeCAD is not made to handle the thousands of small 2D objects that 2D applications work with, and will probably never be. But I don't see this really as a big problem. Probably, we could divide the 2D CAD users between who is doing heavy 2D CAD, who will still need a dedicated 2D tool like LibreCAD, and others who sporadically need to do some 2D, for example during a 3D modelling process. For them, the 2D tools of FreeCAD could work perfectly.
Arch tools remember their settings
One more step in the direction of having intelligent "defaults", Arch tools like Wall or Structure or Window now remember their last settings. So if you draw a 15 cm-wide wall, the next time you use the wall tool, it will start with its width set to 15 cm. So progressively you won't need to use the Arch preferences's "defaults" page anymore, defaults will be set transparently.
I've also started implementing presets for the wall tool (which basically use Arch Multi-Materials to define wall compositions), so we're on our way to a decent, flexible, easy to use wall tool.
Last step missing will be to have a proper system to handle wall joining. There, unfortunately, I still don't have a clear idea to go forward. Should it be handled at document level, outside of the wall objects? Should a wall keep a list of its "siblings"? More experimentation is needed.
Wall blocks as strips
And finally a small improvement, wall blocks feature doesn't need to have both block width and block height values set anymore. So you can now use it to make "strips", vertical or horizontal. This can be handy, for example, to represent wood sidings.
That's it for this month, prepare for more serious stuff next month, as we go back into full speed development!