This is the monthly development post about the development of BIM functionalities of FreeCAD. This month we won't have a video here, because there is quite a lot of stuff to show already, but next month I'll resume making videos, and I'll try to begin to show real projects in them too (not sure how doable that is, as it might easily make videos pretty long, but we'll try).
As usual, thanks a million to everybody who makes all this journey possible by supporting me on Patreon or Liberapay. As you might have heard if you are using Liberapay, they currently have problems with their payment provider, and operations are suspended there at the moment. Many of you who are using Liberapay opted to empty their online wallet by distributing their remaining money between the projects you sponsor, so I got quite an unusual amount of money this month (around 700 EUR). I am keeping this money intact for now, maybe there would be something cool to do with it, I don't know yet.
As I wrote here last month, by combining what I earn on Patreon (about 700 USD/month) and Liberapay (around 90 USD/month), we are hitting the first goal I had set on Patreon (750 USD), which is to set a site, or forum, where you guys can propose and vote for ideas to be implemented and I would try my best to make them come true. I lacked time to organise this, so it will be for next month. But it's definitely coming!
The project illustrated in this post is by OpeningDesign
So on with the stuff I did this month. Basically not much fancy graphical stuff, bu heavy work on the IFC side of things:
Last month I starrted with this by implementing support for property sets in FreeCAD. Property sets are a feature of the IFC format, where properties of an objects can be grouped into sets. As you can add any number or type of custom properties to any IFC object, you can also group them into custom sets. But the IFC format also provides standard sets, for example walls have a Pset_Wall_Common property set, that contains usual wall properties such as "IsExternal" or "IsLoadBearing". IFC Property sets are now fully supported when importing an IFC file in FreeCAD, and when exporting a FreeCAD model to IFC.
The other big feature I had been working on last month, the new BuildingPart object, which is made to replace the current Building and Floor objects with something more robust and versatile, is now also supported by the IFC importer and exporter. Depending on the IFC role that you give to your BuildingPart object, being Building or Building Storey, it will behave that way in the IFC file.
As important as the support for it in IFC, is the ability to easily edit, add and remove properties to/from your BIM objects in FreeCAD. So in the BIM workbench, we now have a full property manager tool. That tool can be launched directly from the BIM Elements Manager in the "Manage" toolbar or menu of the BIM workbench, or directly from inside the Edit Mode panel of BIM/Arch objects. If the BIM workbench is not installed, that option is not available.
I'm not a big fan of that, "plugins" that spread out new functionality inside existing tools, I find that confusing and hard to discover, so the idea is not to go that way, and keep things clear between Arch and BIM workbenches and not begin to mix stuff between the two. But at the moment I'm still experimenting with all this, trying to find where it fits best, so consider these "intrusions" of the BIM workbench inside existing Arch tools just an experiment to see how it works best. If it consolidates into some "ground" functionality, it will go to Arch. If it's just an additional layer of UI work, it will stay in BIM.
The general idea is that you might want to use the Arch tools sporadically but you work mainly with other FreeCAD workbenches. Then you don't want to be bothered with BIM stuff. Or you are using FreeCAD mainly for BIM, then you want the full-fledged BIM workbench.
We already had several Axis tools in Arch/BIM, that can already cater reasonably well for your axes/alignment needs. However, they weren't very compatible with the way these work in IFC, where each axis is an independent object, grouped under an IfcGrid object that defines which ones are in the X, Y and Z directions. The IFC importer and exporters of FreeCAD now support all this transparently. In FreeCAD, axes can now be only one axis, so IFC grids can be imported as they are (several independent axes inside one grid/axes system), and on export, FreeCAD systems made of several axes will simply be decomposed into their individual axes.
This is not a very good title for this feature, but it sounded powerful Basically this is something that Revit does, that is fully supported by the IFC format. When you have two objects that share, for example, a same point (0,0,0) or a same colour, or a same property (Height = 3m), this information is stored only one in the IFC file, and used everywhere it is needed. This results in drastic file size reduction (30 or 40% everywhere I tested) because in IFC there are a LOT of those simple, basic pieces of information, but makes the file more annoying to read by human eyes, because if you are reading about an object at line 3500, you might need to scroll all the way up to line 15 to know the position of the object, and then half-way back at line 1500 to know its colour.
So this feature is now enabled by default, because in most cases you will want that compression, but can be unchecked in IFC preferences if you need a more human-readable file.
Not every IFC information can be compressed/reused that way at the moment, I just implemented some of the most common ones, but the list is easy to extend.
This is coming from an old dicussion we had with Ryan Schultz and Jon Mirtschin, about how to store and retrieve parametric profiles in IFC. The idea is that several objects can be based on a same profile, a very simple way to convey some "model intelligence" inside an IFC file. You modify the profile, all objects based on it change.
It turns out the IFC format supports that in a pretty simple way, very similar to the previous topic here above, you simply use the same IFC profile entity in different extruded objects. So the IFC importer now implements this, when different FreeCAD objects are extrusions of a same 2D object, it will be saved that way in IFC, and restored that way too when reading the file back.
So with all of the above we can now begin to get pretty accurate "roundtrips" when working with IFC files in FreeCAD. That is, the file contents you get when opening an IFC file you just exported are 100% identical with the original file.
Of course the concept of 100% equality is debatable, you WILL find something that is different from the original file, that is inevitable due to the complexity of the IFC format. But my idea is that we can settle on a general agreement over what reasonably needs to be there in order for us to consider it identical. I would say basically the model tree must be identical, the geometry of all objects must be identical, and all BIM-related properties of all objects must be there and contain identical values.
I think in many cases we have that now fully working in FreeCAD. I'm proud to say that you won't find that in many other BIM aps out there, even the big players
A very simple addition, when an IFC extruded object is imported into FreeCAD, if possible (ie. it is planar and doesn't contain curves), the base profile is now created as a Draft Wire, making it easier to edit.
It's a very small and simple change, but I think we can go a long way like this. "IFC doesn't contain model intelligence", you will often hear hard-core supporters - or vendors - of a certain well-known BIM platform say. But if you think of what makes this intelligence, or in other words what is it really that you do when working with said platform, I think 95% of it are simple things, the ability to click an object and change its extrusion length, duplicate it but still be able to edit a common property of both, etc. All this is well supported in IFC, and can probably be recovered and used in FreeCAD with pretty little changes like this, and we'll be able to make IFC model much more editable.
Another very simple change: Until now, when importing IFC objects that were extrusions, a 2D profile object was created, then a Part Extrusion, then this was encapsulated inside an Arch/BIM object with the correct IFC type. Now, for Arch objects that can create an extrusion themselves (Walls and Structures, basically), the intermediate step is skipped, and the final object is using the profile directly, making the whole model tree a bit thinner.
The progress bar of the IFC importer never worked well, because it was interrupted and reset all the time by the shape reader (which "stole" the progress bar). The shape reader can now run silently, and doesn't perturb us anymore, so the progress bar displayed during IFC import show realistic progress and remaining time estimation. Plus, its abort mechanism is now functioning, and you can abort the import anytime by pressing the Escape key.
For IFC export, the process is so fast that I think we don't need a progress bar at the moment
We had some discussions about materials recently, and, since they are used everywhere in BIM, I thought they could be a good way to handle these characteristics and properties that you want to give to several objects at once. In fact, IFC doesn't give you much option to give extra properties to materials, you have to give these properties to each object that uses the material. But we can do better in FreeCAD, and allow materials to have any number of custom properties (that is implemented already). So materials become a kind of "host" for these properties, and on IFC import/export there would be transferred to/from individual objects transparently.
But that means that if you have two objects made of concrete, but one of their "common" properties has a different value, you need two different concrete materials. This will quickly become annoying. So we need a system to be able to have one concrete material, but with sub-materials, which would change only one value, but keep all the others from their parent.
This system existed already in FreeCAD materials, and is now reflected in the tree. You just need to specify which other material is a parent of this one. There is still a lot to implement (additional properties, the ability to remove a value so it takes its parent's corresponding value, support all this in IFC etc), but I think we are on the right track to get an easy and flexible system that won't overcomplicate the model tree.
A simple addition to the ShapeBuilder tool, an option to build a Wire from a selected set of Edges. It doesn't need to be closed or planar.
A new series of American Wide Flange steel profiles (W profiles) was added to the Structure tool, and the profile object, that is used structural objects when based on a "built-in" profile, was also upgraded. It now uses an own icon, and it has gained an edit mode panel where you can change the profile definition.
At the moment you can only change to another profile of the same type (H, rectangular, etc...) because I am not sure it is a good idea to permit cross-type changes, model-wise (it will need another object, which as consequences on your whole model hierarchy), but we need to study that point further.
This is another rather simple to implement but major improvement. Classification systems are common since quite some time in the construction world. Basically instead of your own description like "concrete pavement tile for exterior use", you would use a number from a classification system that has an " 01 Exterior pavements" categories, with a subcategory " 03 tiles" with different categories for " 05 concrete", " 06 stone", etc. So your number would look like 01 03 05. You get the idea.
That way, you can give your file around, and there is a much higher chance that everything will be correctly understood, even by people in different countries, as the whole system can be faithfully translated. This is not used much for small projects of course, but think of stadiums being built in other countries, you might see the interest there can be in such systems.
There are many classification systems in use around the world already. Most of them proprietary unfortunately (you have to pay to obtain them), some open and free, and most countries are also developing their own which might or might not be compatible with others. In other words, this is a jungle
In FreeCAD, materials already had a "Standard Code" property, which can hold any text value. Now, all BIM/Arch objects also have a "Standard Code" property. The idea would still be to use materials for that, but you would be able to override the material code for any individual object.
Last month I stumbled on this repository made available by Graphisoft with many of the most used standards available as xml files (an open format). So now in the BIM workbench we have a Classification Manager tool, that is able to read these xml files, and set the Standard Code property of a material or BIM object with any its values.
So far this is not exported to IFC (I still need to understand better how it works) but we have a fairly decent classification system in FreeCAD already!
Note that these xml files are provided there by Graphisoft on their own good will. We cannot include these files in FreeCAD because they don't have any license allowing us to do so, so the responsibility to download and use them is yours (how to do it is explained when you open the Classification Manager in FreeCAD). They might change their system or simply remove those files anytime. Some of these, however, such as GuBIM, are open-source, and also provided on the website of their author. So it's important to keep fighting for open standards that we can really rely on on the long term.
Finally another small experiment: In the BIM workbench, there is one new tool beside the Move tool (which is the pain old Draft Move tool): A copy tool. It is simply the same Move tool, but with its "copy" option turned on by default. I think it is pretty handy, so you can start it by another shortcut (C,P instead or M,V) and perform a copy instead of a move. One click or key press less.
And another one, the Clone tool in the BIM workbench now works differently than the original Draft Clone tool: Immediately after creating the clone, the Move command is launched so it works more like in other applications: you select an object, press the clone button, and drop the clone at some other location (since you rarely want the clone to stay at the same place of its original).
I am not sure yet if these changes should go to Draft or not. Tell me what you think!
So that's it for this month, once again thanks a lot if you are supporting this effort, one step closer to our dream BIM application!