feat: opstool-style scene recipe for the Plotly canvas

Frames the view deterministically: Scene now carries padded per-axis bounds
(opstool's pad_ratio 0.15, with unit slack on degenerate axes) plus
axis_overrides() pinning range + autorange=False, so the model is never
flush against the viewport edge. Adds entity hover templates (Node #n /
Element #n with an empty extra tag), and an optional axis outline (grid +
ticks) - off by default so the SAP2000-like clean viewport is unchanged;
the coloured X/Y/Z axis lines always stay as the orientation cue.

The outline is exposed as a bool in the Plot Properties table, so the
table-driven dialog now builds a checkbox for kind=bool.
This commit is contained in:
smillmorel 2026-09-16 20:05:26 -04:00
commit 5f977e9df0
5 changed files with 128 additions and 7 deletions

View file

@ -49,7 +49,7 @@ def test_editable_subset_matches_the_field_table() -> None:
kinds = {name: kind for name, _label, kind in STYLE_FIELDS}
for name in EDITABLE_FIELDS:
assert hasattr(style, name), name
assert kinds[name] in {"color", "float", "int"}
assert kinds[name] in {"color", "float", "int", "bool"}
def test_response_colorscale_is_an_evenly_spaced_mapping() -> None: