BIM features plans

Here are a couple of loose design notes over what I'm going to work on next. Thought you might like

New wall tool

What's good to keep:

  • FreeCAD walls can have any shape: A wall can have just about any shape, and be designed with any workbench. This is a precious feature and needs to be kept.

  • FreeCAD walls can be based on lines or polylines: This is a great way to control more complex walls and create things faster.

What's needed:

  • Support types: This a basic and important IFC feature and is part of a general types support not only for walls but for all IFC products. See below.

  • Support no base object: Simple walls don't need a baseline, and could work without one. That's relatively easy, if length + placement are there, we just create a virtual baseline from length and X direction. In fact, it is supported already but simply not enforced by the UI tool.

  • Joining: This is a more complex question but fundamentally needed, not only for walls but also for structural elements. See below.

  • Support IFC layer sets: IfcMaterialLayerSetUsage is a way to define a wall by its layers composition in IFC, similar to the current MultiMaterial system in FreeCAD. The MultiMaterial structure should translate nicely to IFC when converted.

Element joining

Joining cannot be automatically done in IFC. What IFC has is a way to define junction geometry for 2D elements, but that works strictly for line-based walls, does not define the 3D junction and also is not parametric (You can't have the walls keep joined if you move them). What we can do in FreeCAD is, like BlenderBIM, have helpers to help users to join two walls.

There are two types of joints: Butt (one element "passes" the other and forms the corner) and Mitre (both elements join at bisector angle).

There are three types of situations: Corners (two walls join at their endpoints), Y (three walls join) a their endpoints and T (one endpoint lies on the face of another).

All these situations need to be further detailed and a more general element joining schema and appropriate tools should be designed. Basically we need a simple Join tool, which would create corners and Y (with maybe two Butt/Mitre subtools) and an Extend tool, which would create T situations.

Element joining should work with all elements that are based on baselines: Basically walls and structural elements. It is important that the joining of the baselines is different from the apparent joining of the elements. For example, even in a butt situation, the endpoints of the walls should still coincide. So the geometry of the element should be adapted independently.

This can be done with two (sets of) properties, one for each end of the element. That properties specifies 1) an offset value and 2) a plane orientation that defines a halfspace location. Of course that does not supports complex joining systems where one layer goes farther than the other, but at least it should support multilayer walls right out of the box.

This is relatively easy to implement in non-IFC mode. Editing this in IFC mode is in the domain of editing, which will be attacked at a later stage.

Types support

  • The base: a Type property (or Type Reference to be clearer?)

  • In IFC: Seamlessly supported by IfcOpenShell:

    • One can turn any object into a type anytime

    • Type objects get removed from any building structure and placed under a Types group in the FreeCAD tree

    • Any object can be based on any type but need to check for compatible class (Wall -> WallType)

  • In non-IFC: mimmick so a BIM model can be IFCized easily

    • One can turn any object into a type anytime. There we then also need to implement a "types handling" system where:

    • Type classes are supported and can be attributed to an object

    • A Types folder is managed

    • Types are exported to IFC

    • Objects have some of their properties linked (and re-linked if it changes) to their type. Since these could be overridden, how that would work must be defined.

    • Type objects get removed from any building structure and placed under a Types group in the FreeCAD tree

    • Any object can be based on any type but need to check for compatible class (Wall -> WallType)

    • Need to implement what happens when an object gets based on a type

  • UI-wise, need a simple Turn into type tool.

  • Might be interesting to look into the UI dialog of the App::PropertyLink property and see if it could be custom-restricted somehow to only show a certain list of subobjects

Cloning/linking support

  • Cloning should become obsoleted in favour of linking. An App::Link behaves exactly like a clone (Need to check about colors, though)

  • Need to check how a link does identify its base object

  • Need to support links in IFC exporter

  • Define how/if IFC objects should be rendered as links. Should typed objects become links? That would prevent from editing their properties. Mapped geometries seems to be a better choice.

Comment on this post on Twitter Mastodon - Show replies