From af5b1bcf4c9e3137ab81cbd88939dfa9b10ce112 Mon Sep 17 00:00:00 2001 From: Thomas Kroes Date: Mon, 16 Feb 2026 14:59:40 +0100 Subject: [PATCH 1/2] Do not update the HUD during de-serialization, do it post-de-serialization. Put guard in updateHeadsUpDisplay --- src/ScatterplotPlugin.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ScatterplotPlugin.cpp b/src/ScatterplotPlugin.cpp index 94d4826..5357bbc 100644 --- a/src/ScatterplotPlugin.cpp +++ b/src/ScatterplotPlugin.cpp @@ -288,6 +288,8 @@ ScatterplotPlugin::ScatterplotPlugin(const PluginFactory* factory) : getLearningCenterAction().addVideos(QStringList({ "Practitioner", "Developer" })); setOverlayActionsTargetWidget(_scatterPlotWidget); + + connect(&mv::projects(), &AbstractProjectManager::projectOpened, this, &ScatterplotPlugin::updateHeadsUpDisplay); } ScatterplotPlugin::~ScatterplotPlugin() @@ -1016,6 +1018,9 @@ void ScatterplotPlugin::updateSelection() void ScatterplotPlugin::updateHeadsUpDisplay() { + if (mv::projects().isOpeningProject()) + return; + getHeadsUpDisplayAction().removeAllHeadsUpDisplayItems(); if (_positionDataset.isValid()) { @@ -1037,6 +1042,7 @@ void ScatterplotPlugin::updateHeadsUpDisplay() } else { getHeadsUpDisplayAction().addHeadsUpDisplayItem("No datasets loaded", "", ""); } + } void ScatterplotPlugin::updateHeadsUpDisplayTextColor() @@ -1065,12 +1071,7 @@ void ScatterplotPlugin::fromVariantMap(const QVariantMap& variantMap) _primaryToolbarAction.fromParentVariantMap(variantMap); _settingsAction.fromParentVariantMap(variantMap); - updateHeadsUpDisplay(); - if (pointRenderer.getNavigator().getNavigationAction().getSerializationCountFrom() == 0) { - qDebug() << "Resetting view"; - - _scatterPlotWidget->update(); } From a4faf06af3e910c754bb5233a696b857c7249f7d Mon Sep 17 00:00:00 2001 From: Thomas Kroes Date: Mon, 16 Feb 2026 16:28:04 +0100 Subject: [PATCH 2/2] Properly sync HUD with loaded color, point size and point opacity dataset(s) --- src/ScatterplotPlugin.cpp | 36 +++++++++++++++++++++++++++++------- src/ScatterplotPlugin.h | 4 +++- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/ScatterplotPlugin.cpp b/src/ScatterplotPlugin.cpp index 5357bbc..9adb621 100644 --- a/src/ScatterplotPlugin.cpp +++ b/src/ScatterplotPlugin.cpp @@ -344,9 +344,6 @@ void ScatterplotPlugin::init() connect(&_positionDataset, &Dataset<>::guiNameChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay); const auto currentColorDatasetChanged = [this](Dataset currentColorDataset) -> void { - if (_colorDataset == currentColorDataset) - return; - if (_colorDataset.isValid()) disconnect(&_colorDataset, &Dataset<>::guiNameChanged, this, nullptr); @@ -362,8 +359,35 @@ void ScatterplotPlugin::init() currentColorDatasetChanged(_settingsAction.getColoringAction().getCurrentColorDataset()); }); - connect(&_settingsAction.getPlotAction().getPointPlotAction().getSizeAction(), &ScalarAction::sourceDataChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay); - connect(&_settingsAction.getPlotAction().getPointPlotAction().getOpacityAction(), &ScalarAction::sourceDataChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay); + const auto currentPointSizeDatasetChanged = [this]() -> void { + auto currentPointSizeDataset = _settingsAction.getPlotAction().getPointPlotAction().getSizeAction().getCurrentDataset(); + + if (_pointSizeDataset.isValid()) + disconnect(&_pointSizeDataset, &Dataset<>::guiNameChanged, this, nullptr); + + _pointSizeDataset = currentPointSizeDataset; + + connect(&_pointSizeDataset, &Dataset<>::guiNameChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay); + + updateHeadsUpDisplay(); + }; + + connect(&_settingsAction.getPlotAction().getPointPlotAction().getSizeAction(), &ScalarAction::sourceSelectionChanged, this, currentPointSizeDatasetChanged); + + const auto currentPointOpacityDatasetChanged = [this]() -> void { + auto currentPointOpacityDataset = _settingsAction.getPlotAction().getPointPlotAction().getOpacityAction().getCurrentDataset(); + + if (_pointOpacityDataset.isValid()) + disconnect(&_pointOpacityDataset, &Dataset<>::guiNameChanged, this, nullptr); + + _pointOpacityDataset = currentPointOpacityDataset; + + connect(&_pointOpacityDataset, &Dataset<>::guiNameChanged, this, &ScatterplotPlugin::updateHeadsUpDisplay); + + updateHeadsUpDisplay(); + }; + + connect(&_settingsAction.getPlotAction().getPointPlotAction().getOpacityAction(), &ScalarAction::sourceSelectionChanged, this, currentPointOpacityDatasetChanged); connect(&_settingsAction.getMiscellaneousAction().getBackgroundColorAction(), &ColorAction::colorChanged, this, &ScatterplotPlugin::updateHeadsUpDisplayTextColor); @@ -1038,11 +1062,9 @@ void ScatterplotPlugin::updateHeadsUpDisplay() addMetaDataToHeadsUpDisplay("Size", _settingsAction.getPlotAction().getPointPlotAction().getSizeAction().getCurrentDataset(), datasetsItem); addMetaDataToHeadsUpDisplay("Opacity", _settingsAction.getPlotAction().getPointPlotAction().getOpacityAction().getCurrentDataset(), datasetsItem); - } else { getHeadsUpDisplayAction().addHeadsUpDisplayItem("No datasets loaded", "", ""); } - } void ScatterplotPlugin::updateHeadsUpDisplayTextColor() diff --git a/src/ScatterplotPlugin.h b/src/ScatterplotPlugin.h index 4155039..301364d 100644 --- a/src/ScatterplotPlugin.h +++ b/src/ScatterplotPlugin.h @@ -116,7 +116,9 @@ class ScatterplotPlugin : public ViewPlugin ScatterplotWidget* _scatterPlotWidget; /** The visualization widget */ Dataset _positionDataset; /** Smart pointer to points dataset for point position */ Dataset _positionSourceDataset; /** Smart pointer to source of the points dataset for point position (if any) */ - Dataset _colorDataset; /** Smart pointer to dataset used for coloring (if any) */ + Dataset _colorDataset; /** Smart pointer to dataset used for coloring (if any) */ + Dataset _pointSizeDataset; /** Smart pointer to dataset for driving point size (if any) */ + Dataset _pointOpacityDataset; /** Smart pointer to dataset for driving point opacity (if any) */ std::vector _positions; /** Point positions */ unsigned int _numPoints; /** Number of point positions */ SettingsAction _settingsAction; /** Group action for all settings */