Adds a Convert To Parametric Wall operator (bim.convert_to_parametric_wall),
shown in the geometry representation panel for IfcWall objects. It rebuilds
the active solid-mesh wall as a standard Bonsai layered wall fitted to the
mesh's bounding footprint, the good first step Cyril Waechter scoped in the
issue discussion.
Previously the closest option, Convert To Rectangle Extrusion, only rewrote
the Body to an IfcExtrudedAreaSolid/IfcRectangleProfileDef swept from the
mesh. It never attached the scaffolding a parametric (Dumb) wall needs, so
the result was a frozen extrusion the wall tools do not recognise.
The new operator derives length and thickness from the minimum-area
rectangle of the horizontal footprint (a rotated bounding box, so a wall
placed at any yaw is handled) and height from the vertical extent. It then
builds the parametric structure the wall tool itself uses, an
IfcMaterialLayerSetUsage with LayerSetDirection AXIS2 supplying the
thickness, a Plan/Axis/GRAPH_VIEW reference line supplying the length, a
body from add_wall_representation, an EPset_Parametric Engine marker, and an
object placement whose local X runs along the wall axis. Openings are left
out of scope per the issue.
The converted wall matches a natively generated wall structurally and is
editable with the normal wall tools (verified live in headless Blender 5.2:
length, thickness and height reconstruct the original solid exactly, layer
thickness edits and height changes regenerate the body).
Generated with the assistance of an AI coding tool.
It was passing `IFC4X3` directly to `schema_by_name` which is expecting
schema identifier (e.g. IFC4X3_ADD2, not IFC4X3 allowed by `IFC_SCHEMA`
- IFC4X3 is one of the IFC4X3 iterations while it was in development,
not the final one).
Noticed by tests failing:
FAILED
test/util/test_schema.py::TestGeometryClassesIntroducedAfter::test_ifc4x3_to_ifc2x3_is_superset_of_ifc4_to_ifc2x3
- RuntimeError: No schema named IFC4X3
FAILED
test/util/test_schema.py::TestGeometryClassesIntroducedAfter::test_ifc4_to_ifc4x3_is_empty
- RuntimeError: No schema named IFC4X3
Error was:
```
configure: error: could not find a working compiler, see config.log for details
```
config.log:
```
conftest.c: In function 'f':
conftest.c:12:48: error: too many arguments to function 'g'; expected 0, have 6
12 | for(i=0;i<1;i++){if(e(got,got,9,d[i].n)==0)h();g(i,d[i].src,d[i].n,got,d[i].want,9);if(d[i].n)h();}}
| ^ ~
```
Last reference to this file was dropped in 7ae685dbf, though the ref was
pointing to `/patches/opencollada/pr622.patch`, so IIUC
`patches/pr622.patch` was never used.
AST parser has changed a bit and there are some minor differences in the .py output. Updating files just to avoid seeing these diffs when rerunning rule compiler.
Example error:
```
ast.Str(s=node.attr),
^^^^^^^
AttributeError: module 'ast' has no attribute 'Str'
```
`ast.Str` was deprecated since 3.8 and was removed in 3.14, see https://docs.python.org/3/whatsnew/3.14.html#id9
Because uv was always trying to install when starting a venv in `ifcopenshell` folder, though they might be already available globally. And also they were listed twice - in pyproject and in the ci-lint.yml, now there's a single source of truth.