Skip to content

Commit b07f1b6

Browse files
authored
Adhere to improved view plugin sampler action (#148)
* Adhere to changes in the view plugin sampler action * Adhere to added SamplingMode::Selection * View sampler action is now positioned in the primary toolbar * Small change in comment
1 parent b4f8b5d commit b07f1b6

File tree

4 files changed

+73
-20
lines changed

4 files changed

+73
-20
lines changed

src/ScatterplotPlugin.cpp

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include <algorithm>
3232
#include <functional>
3333
#include <vector>
34+
#include <actions/ViewPluginSamplerAction.h>
3435

3536
Q_PLUGIN_METADATA(IID "nl.tudelft.ScatterplotPlugin")
3637

@@ -78,6 +79,7 @@ ScatterplotPlugin::ScatterplotPlugin(const PluginFactory* factory) :
7879
_primaryToolbarAction.addAction(&_settingsAction.getSubsetAction());
7980
_primaryToolbarAction.addAction(&_settingsAction.getClusteringAction());
8081
_primaryToolbarAction.addAction(&_settingsAction.getSelectionAction());
82+
_primaryToolbarAction.addAction(&getSamplerAction());
8183

8284
_secondaryToolbarAction.addAction(&_settingsAction.getColoringAction().getColorMap1DAction(), 1);
8385

@@ -231,7 +233,7 @@ ScatterplotPlugin::ScatterplotPlugin(const PluginFactory* factory) :
231233
auto& selectionAction = _settingsAction.getSelectionAction();
232234

233235
getSamplerAction().initialize(this, &selectionAction.getPixelSelectionAction(), &selectionAction.getSamplerPixelSelectionAction());
234-
getSamplerAction().setTooltipGeneratorFunction([this](const ViewPluginSamplerAction::SampleContext& toolTipContext) -> QString {
236+
getSamplerAction().setViewGeneratorFunction([this](const ViewPluginSamplerAction::SampleContext& toolTipContext) -> QString {
235237
QStringList localPointIndices, globalPointIndices;
236238

237239
for (const auto& localPointIndex : toolTipContext["LocalPointIndices"].toList())
@@ -251,6 +253,9 @@ ScatterplotPlugin::ScatterplotPlugin(const PluginFactory* factory) :
251253
</table>").arg(globalPointIndices.join(", "));
252254
});
253255

256+
//getSamplerAction().setViewingMode(ViewPluginSamplerAction::ViewingMode::Tooltip);
257+
getSamplerAction().getEnabledAction().setChecked(false);
258+
254259
getLearningCenterAction().setPluginTitle("Scatterplot view");
255260

256261
getLearningCenterAction().setShortDescription("Scatterplot view plugin");
@@ -367,7 +372,7 @@ void ScatterplotPlugin::selectPoints()
367372
continue;
368373

369374
if (selectionAreaImage.pixelColor(uv).alpha() > 0)
370-
targetSelectionIndices.push_back(localGlobalIndices[localPointIndex]);
375+
targetSelectionIndices.push_back(localGlobalIndices[localPointIndex]);
371376
}
372377

373378
switch (const auto selectionModifier = pixelSelectionTool.isAborted() ? PixelSelectionModifierType::Subtract : pixelSelectionTool.getModifier())
@@ -414,9 +419,6 @@ void ScatterplotPlugin::selectPoints()
414419

415420
break;
416421
}
417-
418-
default:
419-
break;
420422
}
421423

422424
_positionDataset->setSelectionIndices(targetSelectionIndices);
@@ -687,6 +689,59 @@ void ScatterplotPlugin::updateSelection()
687689
highlights[i] = selected[i] ? 1 : 0;
688690

689691
_scatterPlotWidget->setHighlights(highlights, static_cast<std::int32_t>(selection->indices.size()));
692+
693+
if (getSamplerAction().getSamplingMode() == ViewPluginSamplerAction::SamplingMode::Selection) {
694+
std::vector<std::uint32_t> localGlobalIndices;
695+
696+
_positionDataset->getGlobalIndices(localGlobalIndices);
697+
698+
std::vector<std::uint32_t> sampledPoints;
699+
700+
sampledPoints.reserve(_positions.size());
701+
702+
for (auto selectionIndex : selection->indices)
703+
sampledPoints.push_back(selectionIndex);
704+
705+
std::int32_t numberOfPoints = 0;
706+
707+
QVariantList localPointIndices, globalPointIndices;
708+
709+
const auto numberOfSelectedPoints = selection->indices.size();
710+
711+
localPointIndices.reserve(static_cast<std::int32_t>(numberOfSelectedPoints));
712+
globalPointIndices.reserve(static_cast<std::int32_t>(numberOfSelectedPoints));
713+
714+
for (const auto& sampledPoint : sampledPoints) {
715+
if (getSamplerAction().getRestrictNumberOfElementsAction().isChecked() && numberOfPoints >= getSamplerAction().getMaximumNumberOfElementsAction().getValue())
716+
break;
717+
718+
const auto& localPointIndex = sampledPoint;
719+
const auto& globalPointIndex = localGlobalIndices[localPointIndex];
720+
721+
localPointIndices << localPointIndex;
722+
globalPointIndices << globalPointIndex;
723+
724+
numberOfPoints++;
725+
}
726+
727+
_scatterPlotWidget->update();
728+
729+
auto& coloringAction = _settingsAction.getColoringAction();
730+
731+
getSamplerAction().setSampleContext({
732+
{ "PositionDatasetID", _positionDataset.getDatasetId() },
733+
{ "ColorDatasetID", _settingsAction.getColoringAction().getCurrentColorDataset().getDatasetId() },
734+
{ "LocalPointIndices", localPointIndices },
735+
{ "GlobalPointIndices", globalPointIndices },
736+
{ "Distances", QVariantList()},
737+
{ "ColorBy", coloringAction.getColorByAction().getCurrentText() },
738+
{ "ConstantColor", coloringAction.getConstantColorAction().getColor() },
739+
{ "ColorMap1D", coloringAction.getColorMap1DAction().getColorMapImage() },
740+
{ "ColorMap2D", coloringAction.getColorMap2DAction().getColorMapImage() },
741+
{ "ColorDimensionIndex", coloringAction.getDimensionAction().getCurrentDimensionAction().getCurrentIndex() },
742+
{ "RenderMode", _settingsAction.getRenderModeAction().getCurrentText() }
743+
});
744+
}
690745
}
691746

692747
void ScatterplotPlugin::fromVariantMap(const QVariantMap& variantMap)

src/ScatterplotPlugin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class ScatterplotPlugin : public ViewPlugin
101101

102102
/**
103103
* Load plugin from variant map
104-
* @param Variant map representation of the plugin
104+
* @param variantMap Variant map representation of the plugin
105105
*/
106106
void fromVariantMap(const QVariantMap& variantMap) override;
107107

src/SelectionAction.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,6 @@ void SelectionAction::initialize(ScatterplotPlugin* scatterplotPlugin)
130130
updateReadOnly();
131131

132132
connect(&scatterplotPlugin->getPositionDataset(), &Dataset<Points>::changed, this, updateReadOnly);
133-
134-
addAction(&scatterplotPlugin->getSamplerAction());
135133
}
136134

137135
void SelectionAction::connectToPublicAction(WidgetAction* publicAction, bool recursive)

src/SettingsAction.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class SettingsAction : public GroupAction
4545

4646
/**
4747
* Load plugin from variant map
48-
* @param Variant map representation of the plugin
48+
* @param variantMap Variant map representation of the plugin
4949
*/
5050
void fromVariantMap(const QVariantMap& variantMap) override;
5151

@@ -69,15 +69,15 @@ class SettingsAction : public GroupAction
6969
DatasetsAction& getDatasetsAction() { return _datasetsAction; }
7070

7171
protected:
72-
ScatterplotPlugin* _scatterplotPlugin; /** Pointer to scatter plot plugin */
73-
RenderModeAction _renderModeAction; /** Action for configuring render mode */
74-
PositionAction _positionAction; /** Action for configuring point positions */
75-
PlotAction _plotAction; /** Action for configuring plot settings */
76-
ColoringAction _coloringAction; /** Action for configuring point coloring */
77-
SubsetAction _subsetAction; /** Action for creating subset(s) */
78-
ClusteringAction _clusteringAction; /** Action for creating clusters */
79-
SelectionAction _selectionAction; /** Action for selecting points */
80-
ExportAction _exportAction; /** Action for exporting */
81-
MiscellaneousAction _miscellaneousAction; /** Action for miscellaneous settings */
82-
DatasetsAction _datasetsAction; /** Action for picking dataset(s) */
72+
ScatterplotPlugin* _scatterplotPlugin; /** Pointer to scatter plot plugin */
73+
RenderModeAction _renderModeAction; /** Action for configuring render mode */
74+
PositionAction _positionAction; /** Action for configuring point positions */
75+
PlotAction _plotAction; /** Action for configuring plot settings */
76+
ColoringAction _coloringAction; /** Action for configuring point coloring */
77+
SubsetAction _subsetAction; /** Action for creating subset(s) */
78+
ClusteringAction _clusteringAction; /** Action for creating clusters */
79+
SelectionAction _selectionAction; /** Action for selecting points */
80+
ExportAction _exportAction; /** Action for exporting */
81+
MiscellaneousAction _miscellaneousAction; /** Action for miscellaneous settings */
82+
DatasetsAction _datasetsAction; /** Action for picking dataset(s) */
8383
};

0 commit comments

Comments
 (0)