feat: add fault-domain-boundary - #112
Merged
Merged
Conversation
…ic columns Guards against the swap fixed in 814be12: model_manager.py's per-unit training value and LoopStructural's get_isovalues() must agree on which direction values increase, or extracted isosurfaces get labelled with the wrong unit while keeping correct geometry. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Lets a stratigraphic-column unconformity be linked to an existing fault instead of a flat isovalue surface, so the fault's own (non-displacing) geometry splits the model into two domains -- built via LoopStructural's create_and_add_domain_fault, reusing the same trace data already ingested for the fault. - Stratigraphic column UI gains a "fault" boundary type with a fault picker; faults used this way are excluded from the fault topology's FAULTED/ABUTTING and fault-stratigraphy tables, since those assume a displacement-modelled fault. - The fault's trace is automatically extended to the model's bounding box edges along its own trend, and given synthetic strike/dip orientation constraints, so the interpolated surface spans and properly varies across the whole domain rather than only being reliable near the digitised trace. - A domain-boundary fault is skipped by the ordinary displacement-fault build loop, and any region a later unconformity incorrectly attaches to it is stripped after each build (defensive; the root cause is fixed upstream in LoopStructural core separately). - Fixes a project-load ordering bug where the model CRS was restored after the layers that get reprojected against it, silently skipping reprojection for any layer already in the project's own CRS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… follow-ups Several fixes to make domain-fault-bounded stratigraphic columns build and display correctly: - update_foliation_features now trains each unit's basal-contact data at its own max() (the boundary with the next-older unit, i.e. its true base) instead of min() (the boundary with the next-younger unit, i.e. its top). Basal contacts represent a unit's base, so training at min() anchored every unit's own data to the wrong boundary -- confirmed on a live project where units evaluated into their next-younger neighbour's bracket instead of their own, and a basement unit with no contact data of its own never appeared in the model at all. - Unit thickness now accumulates unconditionally while building that training data, so an undigitised placeholder unit no longer shifts every later unit's value by its own thickness. - Use each fault trace point's own local tangent (rather than one global best-fit line) when extending a domain-boundary fault to the model's bounding box and deriving its orientation constraints, so a curved trace doesn't get flattened into the wrong extrapolation. - Recompute stratigraphic unit value ranges after restoring a column from a saved project (both initial load and reload), matching what a fresh column already gets -- otherwise every restored unit kept the default (0, inf) range and couldn't be told apart from its neighbours. - Show the generic details panel for a domain-fault feature instead of an empty widget. - Skip an isosurface with no geometry when adding stratigraphic surfaces to the 3D viewer instead of crashing, since an undigitised unit can legitimately have no constrained geometry anywhere in the model. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ault nelements to 50k
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
update_foliation_features re-reversed group.units, which get_groups() already returns in the order get_isovalues() walks, so every basal contact was trained with the wrong scalar value. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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.
Adds a fault surface as an unconformity between two groups.