Open
Conversation
generate_grid_axis_reference_points was building the grid-to-world transform using get_local_placement(grid.ObjectPlacement), which returns raw IFC world coordinates. When the project uses a geolocation offset (survey point shift), these coordinates are hundreds of meters from the Blender world origin, placing grid vertices far outside the camera's ortho bounds and causing clip_segment to return None for every axis. Fix by using tool.Ifc.get_object(grid).matrix_world instead, which already has the importer-applied geolocation offset baked in, keeping the coordinate space consistent with the camera. Generated with the assistance of an AI coding tool.
After moving an IfcGridAxis in Blender, the drawing annotation was not tracking the axis to its new visual position. Two issues were found and fixed: 1. generate_grid_axis_reference_points used the IFC AxisCurve geometry (via create_shape) with the grid object's matrix_world. After a save, the IFC AxisCurve is updated but the Blender mesh is not rebuilt, causing the two sources to diverge. The fix reads the axis object's Blender mesh vertices directly with axis_obj.matrix_world, which always matches what Blender renders. 2. When no Blender axis object exists, falls back to reading IFC geometry with the grid object's matrix_world (unchanged behavior). Minor refactors: extracted matrices_differ variable in sync_grid_axis_object_placement (export_ifc.py and drawing.py) and extracted grid_placement variable in create_axis_curve.py for clarity. Generated with the assistance of an AI coding tool.
When duplicating an IfcGridAxis one or more times before saving, duplicates shared the same IfcPolyline as the source via shallow copy. This caused two issues: (1) updating any one axis's AxisCurve during export would destroy the shared curve, corrupting others; (2) duplicates whose matrix_world checksum happened to match their current position were skipped entirely by the is_moved guard, so their moved position was never written to IFC. Three fixes: - geometry.py: call create_axis_curve immediately after copy_class for IfcGridAxis duplicates, so each new axis owns its AxisCurve from the moment of duplication rather than sharing the source's. - create_axis_curve.py: only remove the old AxisCurve when its inverse count drops to zero, preventing destruction of curves still referenced by other axes. - export_ifc.py: move the IfcGridAxis branch before the is_moved guard. Grid axes store position in AxisCurve geometry rather than ObjectPlacement, so is_moved is not a reliable gate. The internal matrices_differ check is the correct decision point, and record_object_position at the end keeps checksums in sync. Generated with the assistance of an AI coding tool.
In IFC4X3, IfcGrid is a subtype of IfcPositioningElement, but IfcGridAxis is not. The unlock handler only fetched IfcPositioningElement instances, so grid axes were never unlocked and remained immovable. Fix: include IfcGridAxis in the element list for the IFC4X3 (non-IFC2X3/IFC4) branch of update_grid_is_locked.
- Add test_create_axis_curve.py with three unit tests: basic polyline creation, safe removal of an unshared existing curve, and preservation of a shared curve when only one referencing axis is updated (regression for the shallow-copy duplication bug) - Add feature scenario "Export IFC - with duplicate-of-duplicate grid axis locations preserved" to project.feature, reproducing the case where duplicates of duplicates lost their positions on save/reload
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fixes: #7639, #7800, #6231, #6808,