3131#include < algorithm>
3232#include < functional>
3333#include < vector>
34+ #include < actions/ViewPluginSamplerAction.h>
3435
3536Q_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
692747void ScatterplotPlugin::fromVariantMap (const QVariantMap& variantMap)
0 commit comments