| build-all: make BonsaiViewer a normal target, built by default Can be skipped using `--without-BonsaiViewer` as any other target, if needed. | 6 天前 |
| vscode config for Bonsai debugging | 7 个月前 |
| Sort imports | 8 个月前 |
| Fix ci-bonsai-choco: choco_release.py still targets the old choco/blenderbim path The choco dir was renamed from choco/blenderbim to choco/bonsai back in 2024 (Rename choco dir), but choco_release.py's BLENDERBIM_DIR constant was never updated, so the daily choco release job crashes immediately with FileNotFoundError trying to os.chdir into the now nonexistent choco/blenderbim directory. Release tags also moved from a bare blenderbim-YYMMDD scheme to bonsai-X.Y.Z-alphaYYMMDDHHMM, so the tag-prefix strip used to build the package version still looked for the old "blenderbim-" prefix and left it untouched, embedding the raw tag (including the already-present "-alpha" segment) into the nuspec version field, which the template then doubled up with its own "-alpha" suffix, producing an invalid NuGet version string. Both are fixed together since the second bug would otherwise surface as soon as the first one is unblocked. The pre-commit black hook also reformatted pre-existing whitespace drift in choco_release.py (this file sits outside CI's lint scope, so it had never been auto-formatted before); that reformatting is incidental to satisfying the local hook, not part of the fix itself. Generated with the assistance of an AI coding tool. (cherry picked from commit a155a1ca80feb8862dac2c27c43753dfc8a14026) | 1 个月前 |
| Add opt-in libFuzzer harness for IfcParse::IfcFile A coverage-guided libFuzzer harness (src/ifcfuzz/ifcparse_fuzzer.cpp) that constructs IfcFile directly from in-memory input and calls toString() on every parsed instance to force full lazy attribute evaluation, rather than only observing IfcConvert's exit code from a fuzzed subprocess. Gated behind a new BUILD_FUZZERS option (OFF by default) so it has no effect on existing builds; enabling it requires a Clang toolchain built with -fsanitize=fuzzer. -fsanitize=fuzzer itself stays scoped to the one new target rather than going into the global compiler flags, since it supplies its own main() and would otherwise break every other target including CMake's own compiler checks. Already found and fixed three real bugs this way: two null-pointer dereferences (in header parsing and reference resolution) and a leak of IfcSpfLexer on early return/exception during file scanning. See src/ifcfuzz/README.md for build and usage instructions. | 7 天前 |
| Remove QtViewer remnants Per aothms's request on #8605: QtViewer is being superseded by the new Bonsai Viewer, so its remains are deleted here (src/qtviewer, its BUILD_QTVIEWER cmake option and add_subdirectory, and its references in ci.yml's path filter, .gitignore, the conda recipe's license table, and README's library table). src/ifcopenshell-python/ifcopenshell/geom/app.py's qtViewer3d is unrelated (pythonocc-core's own OCC.Display widget class, a name coincidence) and is untouched. Generated with the assistance of an AI coding tool. | 1 个月前 |
| docker: fix GID collision and macOS sed portability Two host-environment bugs in the build-env scripts that break on macOS/Apple Silicon hosts, independent of target architecture: - Dockerfile: groupadd fails outright when USER_GID collides with an existing system group in the rockylinux9 base image (e.g. macOS default user GID 20 "staff" collides with RHEL's GID 20 "games"). Guard with getent so useradd attaches to the existing group instead. - ifcos_env: `sed -si` is GNU-only syntax and errors under BSD/macOS sed. Do the UNIQUE_ID substitution via a portable temp-file + mv. Per sboddy's review on the original PR: dropped the linux/amd64 platform-pin additions from this change. The stack already targets Rocky9/x64 build outputs by design, and Docker Desktop on macOS has no native container runtime regardless (it's a Linux VM either way), so forcing the image to run under emulation doesn't produce anything that's actually loadable into a native macOS Blender/Bonsai install. That's a separate, harder problem worth solving via a native build path instead (mirroring build_osx.yml), not by fighting emulation here. These two fixes stand on their own merits on any host. This change was made with the assistance of an AI tool. (cherry picked from commit 8b05510d6cd0c63885a2cadc155628b5e00155e0) | 1 个月前 |
| publish-cpp-api-docs.yml | 28 天前 |
| build-all: use `logger` instead of `print` consistently | 5 天前 |
| docs: fix typo envrionment -> environment Signed-off-by: Vaibhav Srivastava <vaibhavsri1712@gmail.com> | 8 天前 |
| Honour IfcAxis2PlacementLinear Axis/RefDirection in the loft builder (#9408) * Honour IfcAxis2PlacementLinear Axis/RefDirection in the loft builder make_loft() (src/ifcgeom/infra_sweep_helper.cpp), shared by IfcSectionedSolidHorizontal and IfcSectionedSurface, mishandled a cross section's IfcAxis2PlacementLinear in two ways: 1. A placement carrying Axis but no RefDirection was placed with a fixed [e_y | e_z | e_x] world-axis permutation that ignored the directrix. On any directrix not running along +X (e.g. a north-south road pavement, or anywhere along a curve) the profile came out mis-oriented or collapsed to a sliver. 2. When two adjacent CrossSectionPositions used direction vectors inconsistently (a raked RefDirection at one, a plain Axis at the other) make_loft() logged GEO 42, dropped the rotation for the whole segment and squared every cap -- and in one configuration left the sweep frame flipped, so OpenCASCADE failed to build the solid at all. Now a small profile_basis() helper builds every cross section's frame the same way: profile Y = Axis, profile normal = RefDirection, and -- when RefDirection is absent -- profile normal = the directrix tangent, so the section stays perpendicular to the path (buildingSMART IFC4.x-IF #147). When the two bracketing placements ask for the same orientation the sweep frame carries it, built against the curve. When they disagree the sweep frame stays on the shared Axis (continuous with the neighbouring consistent segments, so nothing flips) and each end's own authored orientation is folded into its profile points via a change of basis, so each end cap still lands exactly as authored while the body in between keeps following the directrix. The all-equal and no-direction-vector paths are unchanged. The two mappings now also carry the raw RefDirection through on cross_section, alongside the existing rotation matrix. Adds C++ tests (a raked end logs no GEO 42; a directrix that does not run along +X still lofts a full-size solid) and Python tests (uniform prism raked at one end and square at the other; a north-south directrix keeps its width; OffsetLateral/OffsetVertical are scaled by the model length unit). * Renames profile_rotations to profile_axis for consistency with profile_ref_directions | 5 天前 |
| submodule | 3 个月前 |
| win: collect underscore-prefixed runtime plugin DLLs in build artifacts Runtime plugins are canonically named `ifcopenshell_<kind>_<name>` (decorated_basename() in src/plugin/plugin.cpp, and the OUTPUT_NAME properties of the plugin targets), but the archive collection filtered on the dotted `ifcopenshell.` prefix, which matches only the core shared libraries. Every load-by-name plugin was therefore silently dropped from every win64 / win-arm64 zip. Accept both prefixes, and extend the geometry-writer exclusion to the underscore form so the per-schema writers keep their existing Python-package-only treatment. Fixes #9301 | 5 天前 |
| clang-format: remove duplicates from base style | 2 年前 |
| .clang-tidy: drop removed `AnalyzeTemporaryDtors` Resolves the error below. This option was removed in clang 18. ``` .clang-tidy:4:1: error: unknown key 'AnalyzeTemporaryDtors' AnalyzeTemporaryDtors: false ``` | 23 天前 |
| .gersemirc - search `src` for definitions To fix errors when parsing custom macro from `src\examples\CMakeLists.txt`, see https://github.com/BlankSpruce/gersemi/issues/105 | 6 个月前 |
| add .git-blame-ignore-revs | 5 年前 |
| gitattributes: normalize .i swig templates line endings IfcGeomWrapper.i was stored on index as CRLF and on Linux it sometimes produced distracting diffs, when working on the file. | 1 个月前 |
| .gitignore: ignore `compile_commands.json` at root for clang convenience | 23 天前 |
| Rework c++ docs | 30 天前 |
| Add AGENTS.md contributor guide Guidelines for external contributors using AI coding tools, covering licensing, AI disclosure requirements, PR scope, commit style, code formatting, and testing expectations. Generated with the assistance of an AI coding tool. | 6 个月前 |
| Include licenses on IfcOpenShell sub-utilities. See #1082. | 5 年前 |
| Include licenses on IfcOpenShell sub-utilities. See #1082. | 5 年前 |
| Backspace everything regarding HDF5 | 3 个月前 |
| docs(readme): use https for IfcOpenShell website link (cherry picked from commit 7b613a0bccdd9bafb09ab5f02d094b38e108b1f3) | 1 个月前 |
| Handle version postfixes | 28 天前 |
| Local hacks to compile and monkey patch issues in the Python world All AI generated slop. Do NOT trust these "fixes". It's just to get it working on my machine. | 4 个月前 |
| Backspace everything regarding HDF5 | 3 个月前 |
| Backspace everything regarding HDF5 | 3 个月前 |
| Bump tools | 12 天前 |
| build(deps): bump gersemi from 0.28.0 to 0.28.1 Bumps [gersemi](https://github.com/BlankSpruce/gersemi) from 0.28.0 to 0.28.1. - [Release notes](https://github.com/BlankSpruce/gersemi/releases) - [Changelog](https://github.com/BlankSpruce/gersemi/blob/master/CHANGELOG.md) - [Commits](https://github.com/BlankSpruce/gersemi/compare/0.28.0...0.28.1) --- updated-dependencies: - dependency-name: gersemi dependency-version: 0.28.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> | 6 天前 |