| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
pyproject: remove redundant "unused imports" comments Since we refer to ruff rules by names | 14 天前 | |
Renormalize line endings in js files | 6 小时前 | |
bonsaiviewer-autodesk: fix clippy | 12 天前 | |
build-all: make BonsaiViewer a normal target, built by default Can be skipped using `--without-BonsaiViewer` as any other target, if needed. | 15 天前 | |
Address failing tests * import-mode=import-lib to prevent temp rename * Skip some failing tests * Update stub * Fix decorator | 13 天前 | |
IfcParseExamples: fix gcc warning about not covered enum cases | 19 天前 | |
Expose geometry types in snake case Generated with the assistance of an AI coding tool. | 1 个月前 | |
Split the schema-free half of the unit and geolocation helpers out unit.h and geolocation.h both include ../ifcparse/express.h for the entity walking they do, which puts the whole module out of reach of anything that cannot link IfcParse. Most of what a viewer wants from them needs no IFC at all: the unit conversion tables, and the Helmert parameters-to-matrix math. Move those into unit_convert and geolocation_transform, and build them as a new helpers_math target that `helpers` re-exports PUBLIC, so existing callers keep working through the unchanged unit.h / geolocation.h includes. The new target has no IfcParse or Qt dependency and so builds under Emscripten, where the rest of this directory cannot. One target rather than compiling the sources into each consumer: the glob in this directory would otherwise put them in libhelpers.a as well, leaving two copies of the same objects in any link that pulls both. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
Fix all ty diagnostics on ifcviewer-wgpu (ci-lint ty-ios + ty-bonsai) This branch carried v0.8.0's strict `[tool.ty.rules] all = "error"` config but not the source fixes that were made upstream to satisfy it, so both ci-lint ty gates were failing: `poe ty-ios` reported 256 diagnostics and `poe ty-bonsai` 258. Both are now clean. Most fixes are ported from v0.8.0 and follow two idioms: initialise a name before a conditional that may not bind it (plus an `assert` where the invariant is real but not provable), and close an exhaustive `if`/`elif` chain with `else: assert False, <discriminant>`. The branch's own newer accessors are preserved throughout - `.file`, `.declaration`, `file.types()`, `get_max_id()` are kept rather than reverted to `wrapped_data.*`, and non-ty upstream changes (notably the in-progress geometry cache removal) are deliberately not pulled in. Notable fixes that are not straight ports: * ifcopenshell_wrapper.pyi: `entity_instance.file` was declared as `def file(self) -> file`, where the property name shadows the `class file` below it, so the annotation resolved to `Unknown`. Every `element.file` in the codebase was therefore unchecked. Qualifying it to `ifcopenshell.file` restores `.schema` to its Literal union and surfaces no new diagnostics. * model/wall.py: a duplicated merge fragment in the void-straddle path ran an always-true `if void_straddles:` that read `new_opening` from the mutually exclusive branch (stale value, or NameError on the first iteration), followed by an unreachable duplicate `elif`. Removing it makes the file match v0.8.0. * light/operator.py: upstream's own fix unpacks three targets from two values and raises ValueError unconditionally; corrected to `None, None, None`. * assign_system.py, validate.py, geom/main.py: walrus-in-genexp is valid at runtime (PEP 572 binds in the containing scope) but ty does not model it; rewritten as explicit loops, matching upstream. Verified: poe ty-ios, poe ty-bonsai, ruff check src/ nix/, black --check ., and compileall -W error at py3.10 (ifcopenshell-python) and py3.11 (bonsai). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> | 1 个月前 | |
pyproject: remove redundant "unused imports" comments Since we refer to ruff rules by names | 14 天前 | |
pyproject: remove redundant "unused imports" comments Since we refer to ruff rules by names | 14 天前 | |
check-whitespace: normalize css files | 1 天前 | |
Sort imports | 8 个月前 | |
check-whitespace: normalize css files | 1 天前 | |
check-whitespace: normalize json files | 1 天前 | |
Fix all ty diagnostics on ifcviewer-wgpu (ci-lint ty-ios + ty-bonsai) This branch carried v0.8.0's strict `[tool.ty.rules] all = "error"` config but not the source fixes that were made upstream to satisfy it, so both ci-lint ty gates were failing: `poe ty-ios` reported 256 diagnostics and `poe ty-bonsai` 258. Both are now clean. Most fixes are ported from v0.8.0 and follow two idioms: initialise a name before a conditional that may not bind it (plus an `assert` where the invariant is real but not provable), and close an exhaustive `if`/`elif` chain with `else: assert False, <discriminant>`. The branch's own newer accessors are preserved throughout - `.file`, `.declaration`, `file.types()`, `get_max_id()` are kept rather than reverted to `wrapped_data.*`, and non-ty upstream changes (notably the in-progress geometry cache removal) are deliberately not pulled in. Notable fixes that are not straight ports: * ifcopenshell_wrapper.pyi: `entity_instance.file` was declared as `def file(self) -> file`, where the property name shadows the `class file` below it, so the annotation resolved to `Unknown`. Every `element.file` in the codebase was therefore unchecked. Qualifying it to `ifcopenshell.file` restores `.schema` to its Literal union and surfaces no new diagnostics. * model/wall.py: a duplicated merge fragment in the void-straddle path ran an always-true `if void_straddles:` that read `new_opening` from the mutually exclusive branch (stale value, or NameError on the first iteration), followed by an unreachable duplicate `elif`. Removing it makes the file match v0.8.0. * light/operator.py: upstream's own fix unpacks three targets from two values and raises ValueError unconditionally; corrected to `None, None, None`. * assign_system.py, validate.py, geom/main.py: walrus-in-genexp is valid at runtime (PEP 572 binds in the containing scope) but ty does not model it; rewritten as explicit loops, matching upstream. Verified: poe ty-ios, poe ty-bonsai, ruff check src/ nix/, black --check ., and compileall -W error at py3.10 (ifcopenshell-python) and py3.11 (bonsai). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> | 1 个月前 | |
Normalize whitespaces in the codebase | 27 天前 | |
pyproject: remove redundant "unused imports" comments Since we refer to ruff rules by names | 14 天前 | |
fix(ifcdiff): resolve elements by GlobalId via by_guid, not by_id diff() looked up common elements with self.old.by_id(global_id) / self.new.by_id(global_id), passing a GlobalId string into a method that expects a STEP integer id. On v0.8.0 file.by_id() was a Python wrapper that transparently dispatched strings to by_guid(), so the bug was silent. v0.9.0's file class binds by_id directly to the C++ instance_by_id(int), so it now raises TypeError: in method 'file_by_id', argument 2 of type 'int'. | 13 天前 | |
ifcmcp: source tool descriptions from ifcquery/ifcedit instead of duplicating them Alternative to #8955, for #8951 (23 of 25 ifcmcp tools reach MCP clients with an empty description because FastMCP reads each wrapper's own __doc__, and the server.py wrappers had none). #8955 fixes this by hand-writing a new docstring directly onto each server.py wrapper. Most of those wrappers are thin passthroughs to IfcSession methods in core.py, which already had short docstrings, which themselves mostly delegate to already-documented ifcquery/ifcedit functions -- so that fix tripled up content across three layers that can drift out of sync. This instead enriches the true source (the ifcquery/ifcedit library functions, useful independently of MCP) and has core.py's IfcSession methods copy __doc__ from their delegate via a small _use_doc() decorator, and server.py's tool registration pull description= from the matching IfcSession method. Methods that aren't pure passthroughs (session lifecycle, generic API/shape dispatch) keep their own hand-written docs. Keeps #8955's regression test. Generated with the assistance of an AI coding tool. | 1 个月前 | |
typing: modernize `Generator` annotations `None, None` assumed by default. Though this was introduced in Python 3.13, before 3.13 it only breaks if we'd do `typing.Generator[T]` (which is deprecated) -`collections.abc.Generator[T]` works fine, it seems it never had an arity check. | 13 天前 | |
fuzz: adapt harness for v0.9.0 rebase v0.9.0 already carries the ifcopenshell::file rename this harness was originally adapted for, but moved Logger into the ifcopenshell namespace too (logger::root() -> ifcopenshell::logger::root()) and never had a BUILD_ONLY_COMMON_SCHEMAS cmake option - schema selection there has always been via the SCHEMA_VERSIONS list. Verified with -fsyntax-only against the system-installed v0.9.0 headers. | 16 天前 | |
api.h: format consistently for readibility | 4 天前 | |
Normalize whitespaces in the codebase | 27 天前 | |
cmake: remove mention of `Boost_LIBRARY_DIRS` Only used by ifcmax, which is mostly dead and can use `Boost_LIBRARIES`. | 6 小时前 | |
ruff: remove unused `noqa` Most of them are actually correct, but they're not enforced in general on the repo, so using them blocks us from flagging `unused-noqa` for rules that we actually do use. | 1 个月前 | |
check-whitespace: normalize css files | 1 天前 | |
ifcparse: use std::filesystem in guess_file_type() The stat()-based path helpers were added in 573e53ebf as a speculative workaround for #7131 ("Ugly workarounds to not depend on std::filesystem"). That issue turned out to be a hardcoded schema list missing HEADER_SECTION_SCHEMA and was fixed separately. Since the plug-in architecture landed, libIfcParse already depends on std::filesystem: schema.h exports schema_plugin_directory() returning a std::filesystem::path, and plugin.cpp uses it throughout. The build also mandates C++17. The workaround therefore no longer avoids anything and its comment is misleading. Restore the std::filesystem version, using the error_code overloads so inaccessible paths are still reported as "not there" rather than throwing, and route the path through ifcopenshell::path::from_utf8 so non-ASCII paths work on Windows, as file_reader.cpp already does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WcUNL8YygRrNC5KpxELMHs | 1 天前 | |
pyproject: remove redundant "unused imports" comments Since we refer to ruff rules by names | 14 天前 | |
ruff: remove unused `noqa` Most of them are actually correct, but they're not enforced in general on the repo, so using them blocks us from flagging `unused-noqa` for rules that we actually do use. | 1 个月前 | |
pyproject: remove redundant "unused imports" comments Since we refer to ruff rules by names | 14 天前 | |
check-whitespace: normalize css files | 1 天前 | |
Improve viewer variable names Rename short local variables and parameters in the viewer loading, sidecar, and BonsaiViewer command paths to make their responsibilities clearer.\n\nGenerated with the assistance of an AI coding tool. | 2 个月前 | |
ifcviewer-web: complete the OPFS cache in the background Filling only from the viewer's reads meant the cache converged on the bytes the camera had needed — a user had to orbit every model into view (unloading others to get there) before an entry could finish. Now a filling entry fetches its uncovered spans in order, 8 MB at a time, whenever the viewer has been quiet for 1.5 s, yielding the moment real reads resume so interactive streaming always wins. A 42 MB model that levelled off at 85% viewed now completes seconds after load with no interaction. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> | 21 天前 | |
ifcviewer: latch the motion contribution cull instead of flip-flopping The coarse motion threshold (15 px vs the 3 px still floor) followed the per-frame "did the camera move" test directly. During a slow drag on a janky main thread — the 66-model web session at 20 fps, mouse events coalesced — some frames see no camera change, so the cull alternated between thresholds every few frames: 84% of the visible set vanishing and reappearing (139k <-> 22k objects in the log), with a full visible-set re-upload at each flip feeding the very jank that caused the gaps. On screen it read as the model sporadically jumping and returning while orbiting slowly, easing as streaming and caching settled — which is exactly how it was reported. The motion state now latches: any camera movement arms it, and it only drops after 250 ms of stillness, with the render loop kept alive over the hold so the fine-threshold re-cull actually runs in an on-demand loop. A drag degrades once at its start and restores once shortly after it ends. Measured with a deliberately gappy scripted drag: two transitions for the whole drag where each 120 ms pause previously flipped it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> | 21 天前 | |
cmake: export `document_serializer_rdb` There was an error building a standalone ifcwrap when previously built IfcOpenShell had rocksdb - `_ifcopenshell_wrapper.cpython-314-x86_64-linux-gnu.so: undefined symbol: _ZTV17RocksDbSerializer`. `IFOPSH_WITH_ROCKSDB` propagated to the build, requiring rocksdb symbols, but `WITH_ROCKSDB` wasn't set and `document_serializer_rdb` target wasn't provided. | 12 天前 | |
check-whitespace: normalize json files | 1 天前 | |
api.h: format consistently for readibility | 4 天前 | |
check-whitespace: normalize css files | 1 天前 | |
api.h: format consistently for readibility | 4 天前 | |
cmake: remove `CGAL_LIBRARY_DIR` It's an artifact from times when CGAL wasn't a header-only library. | 4 天前 | |
Last minute refactoring | 1 个月前 | |
Handle version postfixes | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 14 天前 | ||
| 6 小时前 | ||
| 12 天前 | ||
| 15 天前 | ||
| 13 天前 | ||
| 19 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 14 天前 | ||
| 14 天前 | ||
| 1 天前 | ||
| 8 个月前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 1 个月前 | ||
| 27 天前 | ||
| 14 天前 | ||
| 13 天前 | ||
| 1 个月前 | ||
| 13 天前 | ||
| 16 天前 | ||
| 4 天前 | ||
| 27 天前 | ||
| 6 小时前 | ||
| 1 个月前 | ||
| 1 天前 | ||
| 1 天前 | ||
| 14 天前 | ||
| 1 个月前 | ||
| 14 天前 | ||
| 1 天前 | ||
| 2 个月前 | ||
| 21 天前 | ||
| 21 天前 | ||
| 12 天前 | ||
| 1 天前 | ||
| 4 天前 | ||
| 1 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 1 个月前 | ||
| 1 个月前 |