Skip to content

Commit b3a41e0

Browse files
authored
Optionally disable a mapping's surjective check (#14)
* Add a button to the additional settings * Add convenience function * Opionally do NOT check mapping surjectivity
1 parent dc41ac3 commit b3a41e0

3 files changed

Lines changed: 21 additions & 4 deletions

File tree

src/AdditionalSettings.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ AdditionalSettingsDialog::AdditionalSettingsDialog(const mv::Dataset<Points>& cu
9999
mv::util::Serializable("AdditionalSettingsDialog"),
100100
_okButton(this, "Ok"),
101101
_selectionMappingSourcePicker(this, "Selection mapping source"),
102+
_checkMappingSurjective(this, "Check mapping surjectivity", true),
102103
_currentDataGUID(this, "currentDataGUID")
103104
{
104105
setWindowTitle("Additional DE Viewer settings");
@@ -107,6 +108,8 @@ AdditionalSettingsDialog::AdditionalSettingsDialog(const mv::Dataset<Points>& cu
107108

108109
setCurrentData(currentData);
109110

111+
_checkMappingSurjective.setToolTip("Only un-check this if you really know what you are doing.");
112+
110113
connect(&_okButton, &mv::gui::TriggerAction::triggered, this, &QDialog::accept);
111114

112115
auto* layout = new QGridLayout(this);
@@ -115,6 +118,7 @@ AdditionalSettingsDialog::AdditionalSettingsDialog(const mv::Dataset<Points>& cu
115118

116119
layout->addWidget(_selectionMappingSourcePicker.createLabelWidget(this), ++row, 0, 1, 1);
117120
layout->addWidget(_selectionMappingSourcePicker.createWidget(this), row, 1, 1, -1);
121+
layout->addWidget(_checkMappingSurjective.createWidget(this), ++row, 1, 1, -1);
118122

119123
layout->addWidget(_okButton.createWidget(this), ++row, 0, 1, -1, Qt::AlignRight);
120124

src/AdditionalSettings.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,19 @@ bool checkSurjectiveMapping(const mv::LinkedData* linkedData, const std::uint32_
6363
// checks whether the mapping covers all elements in the target
6464
bool checkSelectionMapping(const mv::Dataset<Points>& other, const mv::Dataset<Points>& current);
6565

66+
inline bool isMappingValid(const mv::LinkedData* selectionMapping, unsigned int numPointsTarget, const mv::Dataset<Points>& testData, bool checkSurjective = true) {
67+
if (!selectionMapping)
68+
return false;
69+
70+
if (numPointsTarget != testData->getNumPoints())
71+
return false;
72+
73+
if (checkSurjective)
74+
return checkSurjectiveMapping(selectionMapping, numPointsTarget);
75+
76+
return true;
77+
}
78+
6679
//
6780
// AdditionalSettingsDialog
6881
//
@@ -87,6 +100,8 @@ class AdditionalSettingsDialog : public QDialog, public mv::util::Serializable
87100

88101
mv::gui::DatasetPickerAction& getSelectionMappingSourcePicker() { return _selectionMappingSourcePicker; }
89102

103+
bool checkMappingSurjective() const { return _checkMappingSurjective.isChecked(); }
104+
90105
std::vector<uint32_t>& getSelection(const QString& selectionName) {
91106
if (selectionName == "A")
92107
return _selectionA;
@@ -105,6 +120,7 @@ class AdditionalSettingsDialog : public QDialog, public mv::util::Serializable
105120
private:
106121
mv::gui::TriggerAction _okButton;
107122
mv::gui::DatasetPickerAction _selectionMappingSourcePicker;
123+
mv::gui::ToggleAction _checkMappingSurjective;
108124

109125
mv::Dataset<Points> _currentData = {};
110126
mv::gui::StringAction _currentDataGUID; // internal for serialization

src/DifferentialExpressionPlugin.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,10 +398,7 @@ void DifferentialExpressionPlugin::init()
398398

399399
// Check if the selection mapping makes sense
400400
const auto [selectionMapping, numPointsTarget] = getSelectionMappingOtherToCurrent(otherData, _points);
401-
const bool useOtherSelection =
402-
selectionMapping != nullptr &&
403-
numPointsTarget == _points->getNumPoints() &&
404-
checkSurjectiveMapping(selectionMapping, numPointsTarget);
401+
const bool useOtherSelection = isMappingValid(selectionMapping, numPointsTarget, _points, _additionalSettingsDialog.checkMappingSurjective());
405402

406403
otherData->getSelection<Points>()->indices = useOtherSelection ? _additionalSettingsDialog.getSelection(selectionName) : std::vector<uint32_t>{};
407404

0 commit comments

Comments
 (0)