Hi, this is my blog, and also a guestbook. I publish stuff I do from time to time. Be welcome and feel at home, have a coffee and don't hesitate to drop me a line or two. All languages are highly welcome, especially the most exotic ones (nederlands, bij voorbeeld...).

You are currently viewing only posts tagged as opensource in this guestblog for this year only.

Click here to retrieve posts with same tag from other years as well.

Click here to go back the blog home page, or browse by tag: sketches, saopaulo, freecad, opensource, bede, works, 3d, blender, detail, talks, trilhas, linux, architecture, projects, inthepress, animations, opensurce, firefoxos, idsampa, photo, gaming, wordpress, webdesign, orange, cooking, or search the 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, .

in categories  freecad  opensource  permalink:  32   posted on 06.05.2019 19:38
From Yorik

FreeCAD BIM development news - April 2019

screenshot of a building in FreeCAD


Here we are for one more monthly report about what happened this month around the development of BIM tools for FreeCAD. This month we are all very happy because finally we were able to finish the release of version 0.18 of FreeCAD. There are installers for all operating systems, Windows, Linux and Mac. If you are still using 0.17, go get yours!

This time there are no backwards compatibility issues between 0.17 and 0.18, as there were between 0.16 and 0.17. Any file saved in 0.18 should still open fine in 0.17, provided, of course, you didn't add 0.18-only features such as sketcher splines. Even so, the file should yield errors but still open in 0.17.

Check the release notes for the complete list of new features, and this video made by Sliptonic that showcases the most important new features in 0.18.

Also, FreeCAD now has a brand-new code of conduct. This might seem superfluous at first sight, because until now there hasn't been any very serious situation in the project, but many of us would like the FreeCAD community to be more inclusive, and this is an important step in that direction.

As always, thanks so much to all of you who help the project in one form or another, being by sponsoring me on Patreon, Liberapay or Paypal, or helping the FreeCAD project directly by participating in coding, writing, translating, helping other users or donating on the project's bountysource account. Every effort helps bringing it a step further!

I've been pretty busy this month fixing a lot of bugs both in 0.18 and master (most important ones get backported to 0.18, we already issued a 0.18.1 one, and there will likely be another one soon), but fortunately there was still time for a series of cool improvements.

So here are the more BIM-oriented happenings of this month. Most of these new changes are now happening in the FreeCAD master branch, which will become 0.19 at some point (there are pre-release packages available already!) Enjoy!

The videos

I added two new chapters to the Barcelona pavillion video series: One that shows how to export a model to the IFC file format for opening in other BIM applications, and another that shows a first method to produce 2D views from a model (other methods will follow):

Shape2DViews can now fuse walls and structures

I will add that functionality to TechDraw Arch views too later on, since this seems to work well now and might be a really good way to solve the famous problem of wall joining.

Basically, the idea is that you wouldn't need to join walls anymore. They would be all joined automatically afterwards, when you produce 2D views. If you set the "Join Arch" property of Draft Shape2DViews to True, walls and structures (so far only these two types) will be unioned by material before creating the view, giving quite nice results:

Two screenshots showing walls being joined

The walls and structure objects themselves are not modified, only the views you produce from them.

I think this might be a very good way to proceed further, as it is really very convenient and flexible to keep different wall segments as separate objects.

IFC type property

The location of the new IFC type property

The transition to our new vision of IFC support in FreeCAD is well under way. Part of this is the ability for any Arch/BIM object to be of any IFC type, regardless of the method used to construct it. So you can use the wall tool to build a beam, and vice-versa. For any object in your model, you just say what it is, a wall, a column, or simply leave it undefined. It will be exported to IFC as you decided.

The old Ifc Role property will automatically be converted to the new IFC Type property when opening a 0.18 file in 0.19, and version 0.18 also has a hook to automatically convert back to Ifc Role when needed, so this is fully backwards-compatible.

Compound, multiple colors and transparency support in IFC

Transparency appearing in an IFC model viewed in IFC++

The IFC exporter has been extended to support several useful things:

  • Transparency: Objects are now exported with their transparency value as set in FreeCAD.
  • Multicolor objects: Objects that have multiple colors and transparency levels, such as windows, are now correctly exported as such.
  • Compounds: Part Compounds are now supported by the exporter, these objects are now exported as multiple-solids IfcBuildingElementProxies. The individual colors and transparencies inside the Compound are exported too.

Multiple IFC properties with same name

So far, FreeCAD didn't handle different property sets that contained a property with a same name (for example, some custom property sets added by Revit all contain a property named "Name". This is now solved. As long as they live in a different set, you can have different properties with a same name.

More work on dynamic IFC Attributes

Dynamic IFC attributes as they appear in the FreeCAD UI

Part of our new IFC infrastructure is a feature coded by Dion Moult, that when you change the IFC type of an Arch/BIM objects, several new properties required by that type get automatically added to the object. These properties don't influence the geometry of the object (otherwise if you change the type the geometry could change, which we absolutely don't want). However, we sometimes want them to be tied to the object geometry. For example, we want the "Overall Height" of a window to be the actual height of the window.

So, whenever possible, these dynamic properties get automatically linked to the actual geometry of the object. For example, The "Elevation" property of a Building Storey gets automatically taken from its Z coordinate, or the "Overall Height" of a window to its "Height" property.

This gives us quite an interesting level of translation between FreeCAD objects and IFC objects, that is fully transparent to the user.

On any Arch/BIM object in FreeCAD, look for its "IFC Attributes" properties group. That's where they live. Try changing the IFC type, you'll see the contents of that group adapting.

There is still more to be done there to increase that automatic behaviour, but I am quite happy with this feature already, now really any aspect of how a FreeCAD object is exported to IFC is available to the user: type, name and description, attributes (the "built-in" properties of an IFC object), properties (the "custom" properties of an IFC object) and quantities are all settable and controllable.

Draft objects with Area property

Area property in Draft objects

All Draft objects that can form a face (rectangles, wires, circles,polygons...) now have an Area property that is set automatically when the object has a face. So it is pretty convenient to use these objects to calculate areas.

Ability to reorder BuildingParts children

The reorder option of BuildingParts

Building Parts objects, which are also used underneath buildings and levels/building storeys/floors, whichever name you like most, now have a right-click option to reorder their contents alphabetically. Inside the FreeCAD tree, everything is always listed chronologically. This is something very delicate to change, although in large models it becomes increasingly useful. This feature is mostly a test to see how it behaves (quite well, I think) before trying to add that in other areas as well.

Cloning entire levels

Clone option in BuildingParts

When working with high-rise buildings, we often have a same floor/storey being repeated several times. BuildingParts now have a right-click option to clone them up. To use that option, your building part must have its Height property defined, so the new floor will be place at that height above the one you are cloning.

The new floor is an independent copy, but all objects inside are clones of the same objects in the original floor. This is not yet what we would like I think, it would be best to have the new floor as a kind of big all-in-one clone, but I wanted something which would export correctly to IFC first. This system does.

Also, once a floor is cloned that way, it is pretty easy to move, delete, etc... so at the moment it works well.

In a next move, I'm planning to add a possibility for BuildingParts to be clones of other BuildingParts, and automatically do the management of all cloned objects inside, in order to stay compatible with IFC.

Space plans in TechDraw

Spaces diagram in TechDraw

When creating TechDraw views of Section Planes, until now spaces were displayed as only their text tag. But in BIM work spaces are usually very useful in early stages of a project, when you need to arrange different areas or rooms that compose the project.

TechDraw Arch views now have a new "Fill Spaces" property that, when turned on, will show a filled area behind the text, of the color of the space in the 3D view, which enable you to quickly create nice organisational diagrams.

Section view clipping

A screenshot showing a clipped section view

Section Planes now have a "Clip view" properry, that, when set to True, will clip the results to the dimensions of the section plane. This work with both TechDraw Arch views and Draft Shape 2D views.

Rebars without host

Example of rebars without host

Reinforcement bars so far could only be created inside a structure object. This is no longer the case, you can now create independent rebars outside of any host object. To host a Rebar inside an object, you just need to set its "Host" property. But you can now leave that property empty, just as it works with windows.

That's it for this month I guess, thanks for reading and thanks for the support!



in categories  freecad  opensource  permalink:  26   posted on 08.04.2019 5:29
From Yorik

FreeCAD BIM development news - March 2019

FreeCAD screenshot

Hi all!

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!

The videos

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

FreeCAD screenshot

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

FreeCAD screenshot

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.


Screenshot of the BIMBots plugin

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)

Coil icons

Coil icon theme preview

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!

Draft changes

FreeCAD screenshot

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

FreeCAD screenshot

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

FreeCAD screenshot

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!



in categories  freecad  opensource  permalink:  16   posted on 06.03.2019 6:02
From Yorik

FreeCAD BIM development news - February 2019

The Barcelona pavillon in FreeCAD

Hi everybody,

This is the February issue of our monthly report about BIM development in FreeCAD.

Sorry for the slight delay in producing this article, you know, when you live in Brazil, Carnival is kind of sacred... Jokes apart (half jokes, to be honest), I've been pretty busy on many different plans this month, apart from our BIM development road itself, and there are exciting things coming from several other sides, I'll explain below.

Carnaval in Brazil

Also, we are now on the final stretch of the path to the version 0.18 release of FreeCAD. It took way more time than planned, as usual, but we are almost there. No more blocking bugs, we are just ironing out minor issues in translations, documentation and packaging, and we're ready to go. It will be by far the most stable and usable version of FreeCAD ever.

As usual, many thanks to all of you who sponsor me on Patreon, Liberapay or Paypal, I am really glad and honoured you guys still judge this effort worthwhile after almost two years, I think we are more than halfway already. Modelling is already working very well in FreeCAD, I would say at least as well as other BIM apps, even commercial ones, we are already well underway on the second issue which is working with large models, and the third issue, which is outputting quality 2D drawings, will be the big focus of this year.

So, let's see what we have this month:

The videos - introducing the Barcelona pavillion series

This month we don't have just one video but a larger series. A MUCH larger series. I have recorded them all, but I still need to do sound and editing on several of them (it takes quite a lot of time). So I'll start publishing the first three parts here today, and the next ones will come along in the next days. The total will be 10 or 12 videos (still not sure how to cut). I'll release the final FreeCAD file with the last one too.

These videos show a small but complete BIM project made entirely in FreeCAD: The reconstruction of the Pabellón de Barcelona, by Mies Van Der Rohe.

I tried to go around a bit all aspects of working with FreeCAD, hope you'll like! The DXF file used as a base is here.

Blender importer ported to 2.80

FreeCAD models imported in Blender

The FreeCAD importer for Blender has been ported to the forthcoming 2.80 release, which hasn't officially been published yet, but will be soon. Blender 2.80 is really a small revolution in the Blender universe, with many impressive enhancements. Our FreeCAD importer allows to directly import FreeCAD files in Blender, without the need to go through other exchange formats such as OBJ or 3DS. This is specially important for who works with ArchViz and wants to produce gorgeous renderings out of FreeCAD models.

As the Python3 version of FreeCAD stabilised a lot and is now being pushed out everywhere and also integrated in Linux distributions. the Python2/Python3 difficulties between FreeCAD and Blender are becoming a thing of the past. So as soon as the 0.18 release is out, I'll register this importer on the Blender add-ons repository, which will make it a lot easier to install and use by everybody.

If you use FreeCAD already, I highly recommend you to give a go at the 2.80 version of Blender. With a few tweaks your work in the 3D view itself (no "rendering" needed anymore) looks gorgeous...

The new features of the Blender 3D view

BIM Tutorial

The almost finished BIM tutorial

I've worked further on the integrated tutorial of the BIM workbench, and it is coming close to completion. Modelling part is complete, only missing parts are exporting to IFC, producing 2D drawings, and extracting quantities.

Be sure to give it a try, and please report (or fix yourself!) anything you think is unclear.

Human reference

A FreeCAD setup with human figure

This is a very small thing, but of a big meaning I think. Two applications I know of, Sketchup and BricsCAD Shape, place this stylised human figure inside the 3D space when starting a new model. Coincidentally, these two applications are targeted not so much at very technically skilled people, but try a more intuitive and human approach. And as you know, a big part of what we're trying to do here is make FreeCAD more intuitive.

So now when creating a new project with the BIM project tool, you have an option to add this sympathetic figure in you model, which immediately gives a very good sense of scale.

Setup screen presets

The enhanced setup screen

The BIM setup tool has gained a couple of toolbars, so the panel doesn't grow out of reasonable size, and, more importantly, presets, that fill the rest of the settings with sensible values when working in meters, centimetres or imperial units. It is now much easier to start FreeCAD from scratch with everything correctly set for BIM work/

FreeCAD 0.18 progresses

Activity on the FreeCAD forum

Just a note to keep you updated about the forthcoming 0.18 release, which should land in the coming days or weeks now. There will be both Python2 and Python3 versions available, and a pre-0.18 version has been added just in time to Debian, for the coming Debian 10 release. As it is a long-time support version, it will be used as a base for Ubuntu and all its derivatives. So for the fist time in history all these Linux distributions should come natively with a pretty recent version of FreeCAD. We have Kurt to thank for that!

We have now processed all the important bugs and most smaller ones, the application itself is basically ready for release. We are just finishing work on documentation, translations, etc... which should take a couple of days more, and you'll be able to put your hands on the 0.18, if you haven't done it yet.

We also have a load of new features waiting for the 0.18 release to be merged, so as soon as it's done, FreeCAD development will resume at full speed. And we have big changes coming in the BIM/Arch area, with deep and meaningful changes to adapt much better to the IFC schema, free ourselves from concepts stupidly copied from other BIM apps. I believe we will find ourselves with a BIM application that is much better adapted to IFC, and at the same time gives much more freedom to BIM modelling.

View and 2D output experiments

SVG output experiments

I've started to work on my main plan for this year, which is to produce quality 2D output from BIM models. There is not much result to show so far, because many experiments failed but it is interesting anyway to go through the different options and see what works, what not, what's worth pursuing, etc. What I have started to explore:

Threaded computing of TechDraw views

The result of this so far is in this branch, if you fancy having a look, but it's unsatisfying so far and not working at all. The idea was to make TechDraw views not recompute immediately, but in the background, in a separate thread. As TechDraw views are almost always "terminal" objects (only the Page depends on them), and given that they can take a lot of time to calculate, I thought it might be interesting to make them calculate in the background, while you can continue working on other things in FreeCAD. When the computation is ready, the view would get notified and display the new contents.

However, it turns out working with threads is very complex and delicate. A separate thread must really be thought as a completely self-contained environment. If it uses functionality implemented outside of itself, this functionality will most of the time run on the main thread. So making things multi-threaded really requires a lot of previous thinking and planning, and in the case of FreeCAD there is also a lot that is not in our hands, such as how the OpenCasCade kernel works.

To resume, not much progress on this side. I'll keep toying with it, though, but I don't think impressive things can come from there.


SIMVoleon is an extension for Coin3D, our main 3D display engine in FreeCAD, that allows to do volumetric rendering. In other words, it can automatically "fill" meshes being cut. Since Coin3D can generate very fast sections through models, but these sections appear "hollow", so the have little use so far, this could be a very useful addition.

I had to make a few changes to be able to compile it with recent Coin versions, which are in this repo. The next step will be to try to build pivy with it (it seems to have support for it already), so we can play with that from Python.

SVG views generated from Coin

I've also started playing with generating SVG views directly from the main 3D view of FreeCAD, and this seems so far the most interesting path. It is very fast, produces pretty good results, and if we can make SIMVoleon work with it, might be an excellent solution. There are many changes required to the SVG-producing system in FreeCAD, to control things like scale and line types, I'll start working on that as soon as the release is out.


The Bimbots interface

BIMbots is a new idea developed by the people behind BIMServer. Basically the idea is that you don't need to install and manage a BIMServer yourself, you'd be able to use services provided by a BIMServer somewhere, directly form your BIM application. For example, validate an IFC file, or do all kinds of queries on it, such as counting windows, computing walls area, etc. Together with them, I've started working on a BIMbots plugin for FreeCAD, which is almost ready now, and will be integrated to the BIM workbench as soon as it is ready.

I'll also have a look at the developer docs and try to develop (and document) a BIMbots service, to help us assess how we can use it in BIM projects. The way I see it so far, it could be the perfect open-source replacement for rules-based systems like Solibri model checker.

Curtain wall

Curtain wall experiments

I also started working on a curtain wall tool for the BIM workbench. However, it is a crazily complex problem! The idea is that you could take any surface (such as one generated with the Surface workbench), decide yourself how you want to "cut" through it (for example using Part MultiSections), then use the produced lines to generate flat panels. The last operation being to generate different kinds of mullions from the edges and glass panels from the faces.

Alas, taking non-flat faces and trying to make a continuous series of flat faces from it is not simple I haven't found a satisfying way so far. But ultimately we'll get there.

If you want to play with it already, select a series of edges (in one direction only), and do:

import BimCurtainWall

Where edges is a list of edges, subdiv is the number of subdivisions. If detach is True, each generated face is independent from the others, which yields much better results, but is not really what we want...

Google Summer of Code 2019

This year again we are part of the Google Summer of Code with our friends at BRL-CAD, LibreCAD, OpenSCAD and Slic3r. This time we're trying to concentrate all our project ideas together, and encourage cross-project ideas. If you want to code for FreeCAD during the norther hemisphere summer (June to August), talk with us! It's open to anybody, and you earn nice Google money!

New Arch/BIM developers around...

If you follow the forum and the github repo, you'll notice that several new people started contributing actively to the development of the Draft/Arch/BIM areas of FreeCAD. And there is much more to come after the 0.18 release. That's thrilling, I feel we are at a kind of turning point. The future looks bright for 0.19!



in categories  freecad  opensource  permalink:  9   posted on 03.02.2019 4:58
From Yorik

FreeCAD BIM development news - January 2019

Generic screenshot of FreeCAD

Hi all,

This is the report of the BIM features I implemented in FreeCAD this month. As FreeCAD is still in feature freeze (as usual, the new release is taking more time than we planned, new bugs appear all the time and we definitely want to squash as many as possible), almost all of the development of this month went into the BIM workbench which is developed outside the FreeCAD core code, and therefore not subject to the feature freeze.

There is quite a lot of new stuff this month so I'll make it short. Thanks a bunch to everybody to helps this effort by sponsoring me on Patreon, Liberapay or directly via PayPal! Quite a lot of you are behind this since the early beginnings, almost two years ago, I am really deeply honoured by your trust.

Apologies for not having a video this month again, but I believe you won't feel hungry after reading this

Arc by 3 points

Screenshot showing the arc by 3 points tool

This is a very simple tool, that will make it to the Draft workbench too as soon as we are out of feature freeze. It simply allows you to create an arc by given three points through which the arc must pass, instead of the center, start and end points of the default Draft Arc tool. At the moment it produces an object that is not parametric, mostly because I still couldn't make my mind if internally, the resulting object should be the same as the current Draft one (that is, loose its midpoint parameter), or a different one with three vector properties.

Split IfcElements and Quantities

The IFC elements manager

The IFC Elements manager has now been split into three different tools: Elements manager, quantities manager and properties manager. This is mostly to keep the code elegant and easy to dive in, it was becoming very big and complex, now each distinct functionality is in its own tool and python file, that will make it a lot easier to maintain and to extend.

The Elements manager continues just the same as before: It allows you to bulk-manage IFC types and materials of your BIM model, and quickly ensure that everything has the correct type and material.

IFC Quantities manager improvements

The quantities manager window

This is where you define which quantities will be explicitly exported to IFC. As I wrote in these pages earlier, quantities such as length or width or area of an object can be explicitly written in the IFC file, which makes it unnecessary for other BIM applications to analyse the geometry to know it. A spreadsheet, for example, would be able to quickly calculate quantities from an IFC file without having a geometry engine.

With the split of this functionality in its own tool, it also gained a bit more practicality, no more need to click items one by one, you can now select a bunch of objects, and press the column header to apply the setting to all selected objects.

IFC properties manager

The properties manager window

The biggest change brought by the split of the Elements manager is that we now have a proper and decent bulk IFC properties editor. It was already possible to add IFC properties and property sets to individual objects, but that's very tedious if you want to apply some standards, such as, for example, add a Pset_WallCommon to all your walls. With this new tool, you can now easily add property sets or individual properties to any object, individually or together, edit the values of those properties, and search objects to check which one has or hasn't a given property or property set.

Classification manager improvements

The classification manager

The Classification manager tool has also received a good upgrade. Before, it only allowed you to give classes to materials, now it also allows you to bulk-classify all your BIM objects and gives a clear view of what is missing a class.

Note that the classification is still not exported to IFC, but as soon as we are out of feature freeze, that will be done.

Nudge tool

Screenshot of the nudge tool options

This is of course inspired by the similar tool in Revit, but I believe we've made something way more powerful here. The idea is that you can use the arrow keys of the keyboard (CTRL+arrows in FreeCAD) to move objects slightly, in any Cartesian direction. This is very useful when modelling details. In Revit, how far the objects get moved depends on your zoom level. In FreeCAD, we have two modes: a fixed one and an automatic one. Automatic mode works like Revit, but fixed mode will always move objects by a same distance that you can specify. This can therefore become extremely useful in other situations, for example moving walls, doors or windows 10 cm in any direction.

Additionally, the nudge tool is also able to perform other things: Rotate objects by 45° clockwise or counter-clockwise (CTRL+. or ,), and, if the selected objects are walls or structures, expand or shrink their extrusion distance (CTRL+Page Up or Page Down).

It also has a control in the status bar, from which you can set the nudge distance. Hovering the mouse over that control shows you all the keyboard shortcuts above.

Unclone tool

The unclone tool location

This new tool does the contrary of the Clone tool. It turns a cloned object into an independent copy. So far it only works for Arch/BIM objects that are clones of another, not for regular Draft Clone objects. Ultimately, the idea is to reach the same level of comfort as Blender, where it is very easy to play with all this, and you can unlink linked copies or re-link unlinked copies.

Note that if you have a column that is based on a profile, then you clone that column, then you unclone it, the new independent copy resulting from the uncloning will still use the same profile as the original column. So they don't become 100% fully independent objects. But I believe this is the most logical result of such tool. We probably need another one to separate things further...

A typical use case for this tool is when you want a cloned column to have a different height from its original, but still be based on the same profile (be of the same family, in revitspeak)

Reextrude tool

Illustration of the reextrude tool at work

This tool allows you to select a face of an object, and recreate the object as an extrusion (structure or wall) of the selected face. This is above all useful when you are dealing with a non-parametric object, such as a STEP file or even an IFC file that you imported in "Simple Part Shapes" or "Non-parametric Arch objects" mode, which are many levels of magnitude faster than the "Full Arch objects" mode.

So this allows you, for example, to import a large IFC model as non-parametric, and turn only the objects you wish to edit into extrusions. And it gives you finer control too over which face should be the base of extrusion. It also allows you to change the extrusion direction of an object. Or, imagine you made a slab by drawing a rectangle on the ground floor and extruding it vertically. But suddenly you realize you need to give a special profile to that slab. "Damn!", you think, "I wish I had drawn the profile of this slab instead, and extruded it horizontally". Now it's a piece of cake: Reextrude the slab, then edit its (new) profile.

If the face you selected has only straight edges, it gets reconstructed as a Draft Wire, which really turns the object fully editable. If there are curves or holes, it stays as a non-parametric face (for now...)

At the moment, there is no test yet to check if the face you selected can indeed produce the correct object when extruded. If you select a face of an object that is not a linear extrusion, it won't give correct results.

Convert tool

The convert tool location

Before, if you clicked for example the wall tool with a structure selected, instead of creating a wall, the selected structure would be turned into a wall. This was a really annoying behaviour, you always needed to make sure everything was deselected when using an Arch/BIM tool.

Now that behaviour has been changed so pressing the wall (or any other Arch/BIM button) will always create a new object, regardless of what is selected (if a planar 2D object is selected, though, the behaviour continues the same: The BIM object uses it as a base).

So, in order to be able to perform the same operation as before (turn a structure into a wall, for example), this Convert tool has been added. Select an object, click Convert, and choose into which other object it must be turned.

However, since a couple of months now, all Arch/BIM objects are able to take any IFC type/role, such as wall, column, etc.. regardless of the FreeCAD type. So this tool is actually already unnecessary, I just added it to not remove any functionality without providing an alternative one.

Also, in an ongoing discussion on the FreeCAD forum (come and participate!), we are now playing with the idea of semantically separating the geometry creation tool (which basically performs an extrusion) from its BIM purpose (wall, column, beam...). I find the idea highly interesting. You would basically have a tool to extrude a linear object into a wall-like object with thickness, another that extrudes a profile along a path or direction (structures), a third one that produces "embeddable" objects (windows, doors..), etc. These tools would not be called Wall, Structure, Window anymore, but something like Linear Extrusion. Profile Extrusion. etc. You would give the type you want (Wall, Structure, Window..) to the result of any of those tools. This is much more like IFC works, and is actually something very annoying in other BIM apps, where you cannot make a wall the way you want, it needs to fit in what the wall tool can do.

There are still unresolved questions, such as the different properties/attributes (A wall should have a height, width, height, what happens if you suddenly turn it into a roof), but there is a very interesting pull request coming, which starts addressing this aspect, with a completely dynamic model, where the FreeCAD properties of Arch/BIM objects can change on the fly.

Of course, we are here speaking of the inner, "core" module (Arch, currently), not necessarily what the user would see. I believe that for user-friendliness, we still need a wall button, a column button, etc... That's exactly where the separation between a "core" module (Arch) and a more "user-friendly" module layered on top of it (BIM) becomes interesting.

References with shapes off

Screenshot showing the Transient Reference property

The Reference tool gained a new ability, which begins to turn it into something really interesting and flexible. Up to now, when you created a reference object, the shape of the object you were referencing would be stored into the host file too. This is the standard way of working of FreeCAD: Shapes are stored into the file, so when you open a file, parametric objects don't need to be recalculated, they just take the shape that was stored. Otherwise loading times would quickly explode.

Now, you have the option to drop the shape when turning the visibility of a reference object off. It provokes an additional loading time every time you turn it back on, but it drastically reduces the file size and initial file load time. And there is no limit anymore on the quantity and complexity of referenced models, as long as you don't turn them all on at the same time. That is, until we implement the next step, the ability to use a "lightweight" version instead of the full shape...

Clean trash

The clean trash context menu option

By right-clicking the BIM trash (that gets created when you use the "Send to trash" right-click command in the BIM workbench), you now have a new "Clean trash" option, which deletes all its objects that are not used anymore by any other. Objects that are still in use are not deleted. (You can do so simply by deleting the Trash, if you absolutely want)

Defaults: Turntable, thumbnails

When using the BIM Setup dialog, a couple more defaults are now set: File thumbnails are turned on, and the orbit mode of the FreeCAD 3D view is set to Turntable, which is how it works in all other BIM apps. Many people not used to other 3D modelling apps didn't realise the default Trackball mode could be changed...

Ungroup, select group contents

The remove from group context menu option

Two more options were added when right-clicking an element in the tree: Ungroup, if you right-click an object that is inside a group or Building Part, which will remove the object from its host, and Select group contents, if you right-click a group or Building Part.

Material manager context options

The material editor window

The new materials manager of the BIM workbench also gained some new tools. There are two new buttons to automatically merge duplicated materials (a same material name with 001, 002,... at the end), and to delete all unused materials.

By right-clicking any material in the list, you can now also rename it, duplicate it, delete it, merge it with another one.

IFC Preflight tool

Screenshot of the preflight tool

I am not sure this is a very good name yet, it can change... This new tool allows to perform several tests on your model, for IFC compatibility, such as verifying some IFC requirements, or checking that the geometry of all your objects is valid, or checking specific things that might give problems in other BIM applications (specially the one-BIM-application-that-shouldn't-be-named...)

The idea of this tool is also to be very didactic, and give plenty of information about how things should be done properly when working with IFC.

Toolbars reorganization

I changed a bit the grouping of the toolbars and menus in the BIM workbench. It now works like this:

Diagram of the new toolbars

There are still visual inconsistencies there (icons that create objects should all be yellow, icons that modify existing objects should all be blue, etc) that we'll address on the way, but I think this is much more logical. Tell us what you think!

Base movement discussion

We have another interesting discussion about the behaviour of BIM objects based on another one, such as a 2D baseline or profile. As you know, both the base object and the BIM object have a Placement property. When you move the BIM object, the placement of the BIM object changes, but not the placement of the base object. This is logical, as other objects might use the same base, that would change too if the base was moved.

However, the effect of this is that the BIM object is not on top of its base object anymore. If you turn both on, they appear at different places.

Other workbenches, such as PartDesign, solve this by preventing you from moving the result object directly. You need to move the base sketch if you want to move the object that is built from it. I don't think that would be good to do that in BIM, though.

Ultimately, we're probably let the user choose, by adding a property that, if turned on, will in fact move the base object when you move the BIM object.

IFC diffing

Result of IFC diffing

I kept the best for the end. This is currently still developed in a macro, because it still needs some work and fine-tuning, but it already works well, feel free to give it a shot.

Diffing is a concept that is used a lot in programming, and is a very, very interesting feature when you work with version control systems (such as Git, which is what we use at FreeCAD).

Basically, when you change a file, it shows you in a very clear way what has been changed between two versions of the file: lines that have been added (in green), and lines that have been removed (in red). You can actually compare just about any two files that way, not only two versions of the same file.

Example of text diffing

With BIM, as with 2D CAD before, it is always very hard to know what changed in a file. Usually it requires the person who made the changes to mark them somehow (the traditional "revision cloud" that were added on drawings to tell "this has been changed since last version".

However, the IFC format introduces many tools to be able to assess more reliably what has changed and what not. The most fundamental one is a unique ID that is given to all objects in the file. Most BIM applications nowadays, when importing an IFC file, will store the ID of each object, and use it when exporting the file back to IFC. So we have a way to know with certainty, between two IFC files, which objects are the same, regardless of anything else that might have changed (geometry, properties, etc).

So now our job is simple: Take two BIM models. A same ID exists in both models? It's the same object. It exists in the newer model but not in the older one? It has been added since then. It doesn't exist anymore in the newer model? It has been deleted.

That's basically what the macro above does. It takes two FreeCAD models (you can just open two IFC files in it), and paints in red all the deleted objects, and in green all the newly added objects.

For all the others, that exist in both files, it does the following checks: Has the volume of the object changed? Has its bounding box dimensions or position changed? Has its center of gravity changed? If any of these is true, we can reasonably assume the geometry of the object has changed, and the object is painted in yellow.

If all these tests give no difference, we can reasonably assume the geometry of the object has not changed. It would be very hard to modify the geometry of an object and not have any of the above characteristics change.

The macro also checks for other things, but it doesn't paint the objects, since their geometry is still the same:

  • The object name
  • The material
  • The IFC properties

So at the end of the process, you have a clear view of what has changed between the two files, and, exactly like with code, you can choose the best strategy to adopt: Will you just take the new file and discard the old one? Or will you only copy over the new objects and change the modified ones by hand? Each case is usually a different case.

The IfcOpenHouse being diffed

Like with version control systems, the macro is able to do a series of changes automatically to the old file, to reflect the state of the new file, for example update the materials, or rename the objects whose name has changed. Most complex changes, such as geometry changes, will still require you to decide what to do manually.

That's it for this month, hope you liked the new developments, and stay tuned for more!