I pushed today git commit 65aaf16 which redefines a lot of things inside the Arch workbench. I did quite intense testing, but there might still be issues here and there. Symptoms would be Arch objects that are based on extrusion (walls, structures and panels) that behave differently, or that might have "jumped" out of place when opening an old file. Hopefully there won't be many. If you see something, report back and I'll try to fix ASAP.
These changes are basically to behave more like IFC wants, so the export to IFC became better. While, in FreeCAD, we don't care much if a particular object is an extrusion or not, for other apps like Revit it is crucial. So this now allows many more objects to be exported as extrusions.
The problem was that IFC wants extrusions to be done in a very specific manner: The profile must be on the XY plane, and rotated/moved into place only after it was extruded. That is the main reason for the changes below.
What has changed:
- All Arch objects now have a getExtrusionData() method, that returns a (2dprofile, extrusionVector, placement) tuple, or None if this object is not an extrusion. The 2D profile is ALWAYS in the XY plane, and centered on the origin point. The placement must be applied to both the profile and the extrusion vector, before extruding, in order to produce the final shape. By default, it returns an empty tuple, unless this object is a clone of an extruded object, or if its base object is a Part Extrusion.
- The getExtrusionData() is meant to be reimplemented by all Arch objects that perform such extrusions. So far only walls and structures have one. The execute() function makes
- The IFC exporter now uses this system, and is -as far as i tested- able to export any extruded object correctly. Additionally, this can also save quite a lot of filesize, since profiles are now stored and shared between the different extrusions.