Repository navigation
feat: step-based dock (usability plan, phase 3) - #134
Merged
Merged
Conversation
Replace the tabs of the modelling dock with five steps (Data, Stratigraphy, Faults, Model, View). Each step has a check function, and the step bar and the footer show the result. Move Save, Open, Reset and Settings to the dock header, put the map2loop dialogs in the steps, and reduce the toolbar to three actions with a Tools submenu.
… step-based dock
- map2loop gives each contact the younger unit, so the oldest unit has no basal contacts. A contact on an unconformity goes to the unit above it, so the units on each side of an unconformity are still checked. - Calculate the units of the contacts layer again when the layer is edited. - Show the out-of-date derived results on step 2 only, not on step 4.
lachlangrose
added a commit
that referenced
this pull request
Oct 30, 2026
…tep branch # Conflicts: # loopstructural/gui/modelling/steps/checks.py
lachlangrose
added a commit
that referenced
this pull request
Oct 30, 2026
- When the contacts and the thicknesses are calculated together, the thickness calculation uses the new contacts, not the out-of-date layer. - The background thread does not change the data manager. finish() puts the contacts into the model on the GUI thread. - Read the inputs with basal_contacts_inputs() and thickness_inputs() without arguments. #134 changed these functions, so the build failed. - qgsLayerToGeoDataFrame accepts a GeoDataFrame. - Add unit tests for the order and for the thread rule.
- Make the step titles with dict(). - Rename the unused loop variable.
lachlangrose
added a commit
that referenced
this pull request
Oct 30, 2026
lachlangrose
added a commit
that referenced
this pull request
Nov 1, 2026
…135) * feat: model step with one build button and direct interpolation Phase 4 of the usability plan. - One primary button replaces Initialize Model, Solve Model and Update Model Data. Its text and action come from the model state. The problems of all steps show above the feature list. - A build calculates out-of-date basal contacts and thicknesses first, on a background task with progress. With "Calculate from geology polygons" the model reads the extracted contacts directly; the project layer is for display only. - Start choice: build from a geological map, or interpolate surfaces from constraints (hides steps 2 and 3). Saved with the state. - Constraint types: value, interface, gradient/normal, tangent, form line, inequality and pairwise inequality, each with a weight and a Z source (layer, DEM or constant). - Detach a generated feature to keep a fixed copy of its data. Rows added to a generated feature are now used in the build. - Preview one feature as isolines on the map. - Add Fault from a centre, strike, dip and size. * style: fix the ruff errors in the step bar - Make the step titles with dict(). - Rename the unused loop variable. * fix: give the new contacts to the thickness step of a build - When the contacts and the thicknesses are calculated together, the thickness calculation uses the new contacts, not the out-of-date layer. - The background thread does not change the data manager. finish() puts the contacts into the model on the GUI thread. - Read the inputs with basal_contacts_inputs() and thickness_inputs() without arguments. #134 changed these functions, so the build failed. - qgsLayerToGeoDataFrame accepts a GeoDataFrame. - Add unit tests for the order and for the thread rule. * fix: name the fault sizes from the slip, as LoopStructural uses them LoopStructural puts the major axis along cross(normal, slip) and the intermediate axis along the slip. The dialog said along strike and down dip, which is correct only for dip slip. The labels are now "across the slip" and "along the slip". Add axis_vectors() and tests for the axes. * fix: added rows of a generated feature - A row that the user adds to or deletes from a generated feature makes the model stale, so that the next action is a rebuild. - A bad added row is left out, and the build tells the user. Before, one bad row removed all the added rows of the feature. - Inequality and Pairwise Inequality have no weight, because LoopStructural ignores it. - Test the save and load of detached data through JSON.
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.
Phase 3 of the usability plan. Stacked on #133: the base is
feat/strat-column-ui, so retarget tomainafter #133 merges.Changes
check()function (gui/modelling/steps/checks.py, no QGIS import) that returns problems and to-do items.map2loop_tools/launchers.py. They are not rewritten.separate_dock_widgetsstill works: step 5 has an Open 3D view button.Notes
Tests
tests/unit/test_step_checks.py); all 97 unit tests pass.🤖 Generated with Claude Code