diff --git a/src/DatasetsAction.cpp b/src/DatasetsAction.cpp index e31ce00..cbec33a 100644 --- a/src/DatasetsAction.cpp +++ b/src/DatasetsAction.cpp @@ -172,17 +172,10 @@ void DatasetsAction::setupPointSizeDatasetPickerAction(ScatterplotPlugin* scatte auto& pointSizeAction = pointPlotAction.getSizeAction(); _pointSizeDatasetPickerAction.setFilterFunction([this, scatterplotPlugin](mv::Dataset dataset) -> bool { - if (dataset->getDataType() != PointType) + if (!scatterplotPlugin->getPositionDataset().isValid()) return false; - const auto positionDataset = scatterplotPlugin->getPositionDataset(); - - if (!positionDataset.isValid()) - return false; - - const mv::Dataset candidatePoints(dataset); - - if (candidatePoints->getNumPoints() != positionDataset->getNumPoints()) + if (dataset->getDataType() != PointType) return false; return true; @@ -219,19 +212,12 @@ void DatasetsAction::setupPointOpacityDatasetPickerAction(ScatterplotPlugin* sca auto& pointOpacityAction = pointPlotAction.getOpacityAction(); _pointOpacityDatasetPickerAction.setFilterFunction([this, scatterplotPlugin](mv::Dataset dataset) -> bool { - if (dataset->getDataType() != PointType) - return false; - - const auto positionDataset = scatterplotPlugin->getPositionDataset(); - - if (!positionDataset.isValid()) + if (!scatterplotPlugin->getPositionDataset().isValid()) return false; - const mv::Dataset candidatePoints(dataset); - - if (candidatePoints->getNumPoints() != positionDataset->getNumPoints()) + if (dataset->getDataType() != PointType) return false; - + return true; }); diff --git a/src/ScalarAction.cpp b/src/ScalarAction.cpp index f151703..1c8d2da 100644 --- a/src/ScalarAction.cpp +++ b/src/ScalarAction.cpp @@ -18,7 +18,25 @@ ScalarAction::ScalarAction(QObject* parent, const QString& title, const float& m addAction(&_sourceAction); connect(&_sourceAction.getPickerAction(), &OptionAction::currentIndexChanged, this, [this](const std::uint32_t& currentIndex) { - emit sourceSelectionChanged(currentIndex); + bool emitSourceSelectionChanged = true; + + if (currentIndex >= ScalarSourceModel::DefaultRow::DatasetStart) { + if (auto scatterplotPlugin = dynamic_cast(findPluginAncestor())) { + auto positionDataset = scatterplotPlugin->getPositionDataset(); + auto scalarSourcePointsDataset = Dataset(getCurrentDataset()); + const auto numScalars = scalarSourcePointsDataset->getNumPoints(); + const auto numPositions = positionDataset->getNumPoints(); + + if (numScalars != numPositions) { + emitSourceSelectionChanged = false; + + scatterplotPlugin->addNotification(QString("The number of points in the scalar source dataset does not match the number of points in the position dataset. (numPositions=%1, numScalars:%2)").arg(QString::number(numPositions), QString::number(numScalars))); + } + } + } + + if (emitSourceSelectionChanged) + emit sourceSelectionChanged(currentIndex); }); connect(&_magnitudeAction, &DecimalAction::valueChanged, this, [this](const float& value) { diff --git a/src/ScalarSourceAction.h b/src/ScalarSourceAction.h index 5387c31..c4e808a 100644 --- a/src/ScalarSourceAction.h +++ b/src/ScalarSourceAction.h @@ -54,7 +54,7 @@ class ScalarSourceAction : public GroupAction /** * Load widget action from variant map - * @param Variant map representation of the widget action + * @param variantMap Variant map representation of the widget action */ void fromVariantMap(const QVariantMap& variantMap) override;