@@ -128,19 +128,6 @@ ScatterplotWidget::ScatterplotWidget(mv::plugin::ViewPlugin* parentPlugin) :
128128 QObject::connect (winHandle, &QWindow::screenChanged, this , &ScatterplotWidget::updatePixelRatio, Qt::UniqueConnection);
129129 });
130130
131- connect (&_navigationAction.getZoomRectangleAction (), &DecimalRectangleAction::rectangleChanged, this , [this ]() -> void {
132- auto & zoomRectangleAction = _navigationAction.getZoomRectangleAction ();
133-
134- const auto zoomBounds = zoomRectangleAction.getBounds ();
135-
136- _pointRenderer.setViewBounds (zoomBounds);
137- _densityRenderer.setBounds (zoomBounds);
138-
139- _navigationAction.getZoomDataExtentsAction ().setEnabled (zoomBounds != _dataRectangleAction.getBounds ());
140-
141- update ();
142- });
143-
144131 connect (&_navigationAction.getZoomDataExtentsAction (), &TriggerAction::triggered, this , [this ]() -> void {
145132 _pointRenderer.getNavigator ().resetView ();
146133 });
@@ -156,7 +143,29 @@ ScatterplotWidget::ScatterplotWidget(mv::plugin::ViewPlugin* parentPlugin) :
156143 }
157144 });
158145
159- connect (&_pointRenderer, &Renderer2D::zoomRectangleChanged, this , [this ]() -> void { update (); });
146+ const auto zoomRectangleChanged = [this ]() -> void {
147+ _pointRenderer.getNavigator ().setZoomRectangleWorld (_navigationAction.getZoomRectangleAction ().toRectF ());
148+ update ();
149+ };
150+
151+ zoomRectangleChanged ();
152+
153+ connect (&_navigationAction.getZoomRectangleAction (), &DecimalRectangleAction::rectangleChanged, this , zoomRectangleChanged);
154+
155+ connect (&_pointRenderer.getNavigator (), &Navigator2D::zoomRectangleWorldChanged, this , [this , zoomRectangleChanged](const QRectF& previousZoomRectangleWorld, const QRectF& currentZoomRectangleWorld) -> void {
156+ disconnect (&_navigationAction.getZoomRectangleAction (), &DecimalRectangleAction::rectangleChanged, this , nullptr );
157+ {
158+ _navigationAction.getZoomDataExtentsAction ().setEnabled (_pointRenderer.getNavigator ().hasUserNavigated ());
159+
160+ _navigationAction.getZoomRectangleAction ().setLeft (currentZoomRectangleWorld.left ());
161+ _navigationAction.getZoomRectangleAction ().setRight (currentZoomRectangleWorld.right ());
162+ _navigationAction.getZoomRectangleAction ().setTop (currentZoomRectangleWorld.bottom ());
163+ _navigationAction.getZoomRectangleAction ().setBottom (currentZoomRectangleWorld.top ());
164+ }
165+ connect (&_navigationAction.getZoomRectangleAction (), &DecimalRectangleAction::rectangleChanged, this , zoomRectangleChanged);
166+
167+ update ();
168+ });
160169
161170 // auto setIsNavigating = [this](bool isNavigating) -> void {
162171 // _isNavigating = isNavigating;
@@ -171,6 +180,7 @@ ScatterplotWidget::ScatterplotWidget(mv::plugin::ViewPlugin* parentPlugin) :
171180 // };
172181
173182 _pointRenderer.getNavigator ().initialize (this );
183+ _densityRenderer.getNavigator ().initialize (this );
174184}
175185
176186bool ScatterplotWidget::event (QEvent* event)
@@ -211,6 +221,9 @@ void ScatterplotWidget::setRenderMode(const RenderMode& renderMode)
211221
212222 emit renderModeChanged (_renderMode);
213223
224+ _pointRenderer.getNavigator ().setEnabled (_renderMode == SCATTERPLOT);
225+ _densityRenderer.getNavigator ().setEnabled (_renderMode == DENSITY || _renderMode == LANDSCAPE);
226+
214227 switch (_renderMode)
215228 {
216229 case ScatterplotWidget::SCATTERPLOT:
@@ -275,42 +288,33 @@ void ScatterplotWidget::setData(const std::vector<Vector2f>* points)
275288 auto dataBounds = getDataBounds (*points);
276289
277290 // pass un-adjusted data bounds to renderer for 2D colormapping
278- _pointRenderer.setDataBounds (dataBounds);
279-
280- // Adjust data points for projection matrix creation (add a little white space around data)
281- dataBounds.ensureMinimumSize (1e-07f , 1e-07f );
282- dataBounds.makeSquare ();
283- dataBounds.expand (0 .1f );
291+ _pointRenderer.setDataBounds (QRectF (dataBounds.getLeft (), dataBounds.getTop (), dataBounds.getWidth (), dataBounds.getHeight ()));
284292
285293 const auto shouldSetBounds = (mv::projects ().isOpeningProject () || mv::projects ().isImportingProject ()) ? false : !_navigationAction.getFreezeZoomAction ().isChecked ();
286294
287- if (shouldSetBounds)
288- _pointRenderer.setViewBounds (dataBounds);
295+ // if (shouldSetBounds)
296+ // _pointRenderer.setViewBounds(dataBounds);
289297
290298 _densityRenderer.setBounds (dataBounds);
291-
292299 _dataRectangleAction.setBounds (dataBounds);
293300
294- if (shouldSetBounds)
295- _navigationAction.getZoomRectangleAction ().setBounds (dataBounds);
296-
297301 _pointRenderer.setData (*points);
298302 _densityRenderer.setData (points);
299303
300304 switch (_renderMode)
301305 {
302306 case ScatterplotWidget::SCATTERPLOT:
307+ {
308+ _pointRenderer.getNavigator ().resetView ();
303309 break ;
310+ }
304311
305312 case ScatterplotWidget::DENSITY:
306313 case ScatterplotWidget::LANDSCAPE:
307314 {
308315 _densityRenderer.computeDensity ();
309316 break ;
310317 }
311-
312- default :
313- break ;
314318 }
315319 // _pointRenderer.setSelectionOutlineColor(Vector3f(1, 0, 0));
316320
@@ -661,8 +665,8 @@ void ScatterplotWidget::resizeGL(int w, int h)
661665 // Pixel ratio tells us how many pixels map to a point
662666 // That is needed as macOS calculates in points and we do in pixels
663667 // On macOS high dpi displays pixel ration is 2
664- w *= _pixelRatio;
665- h *= _pixelRatio;
668+ // w *= _pixelRatio;
669+ // h *= _pixelRatio;
666670
667671 _pointRenderer.resize (QSize (w, h));
668672 _densityRenderer.resize (QSize (w, h));
0 commit comments