mirror of https://gitlab.com/pamhyr/pamhyr2
implement rectangular selection in profile window
parent
e4f8bc347d
commit
601ef73b5d
|
|
@ -24,7 +24,7 @@ from tools import timer, trace
|
||||||
from View.Tools.PamhyrPlot import PamhyrPlot
|
from View.Tools.PamhyrPlot import PamhyrPlot
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
Qt, QCoreApplication, QItemSelectionModel
|
Qt, QCoreApplication, QItemSelectionModel, QItemSelection, QItemSelectionRange
|
||||||
)
|
)
|
||||||
|
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
|
|
@ -82,7 +82,7 @@ class Plot(PamhyrPlot):
|
||||||
ind, point = self._closer_point(event)
|
ind, point = self._closer_point(event)
|
||||||
|
|
||||||
self.highlight = ([point], hyd)
|
self.highlight = ([point], hyd)
|
||||||
self._select_in_table(ind)
|
self._select_in_table([ind])
|
||||||
|
|
||||||
self.update()
|
self.update()
|
||||||
return
|
return
|
||||||
|
|
@ -135,7 +135,10 @@ class Plot(PamhyrPlot):
|
||||||
self._table.setFocus()
|
self._table.setFocus()
|
||||||
|
|
||||||
selection = self._table.selectionModel()
|
selection = self._table.selectionModel()
|
||||||
index = self._table.model().index(ind, 0)
|
index = QItemSelection()
|
||||||
|
if len(ind) > 0:
|
||||||
|
for i in ind:
|
||||||
|
index.append(QItemSelectionRange(self._table.model().index(i, 0)))
|
||||||
selection.select(
|
selection.select(
|
||||||
index,
|
index,
|
||||||
QItemSelectionModel.Rows |
|
QItemSelectionModel.Rows |
|
||||||
|
|
@ -143,7 +146,8 @@ class Plot(PamhyrPlot):
|
||||||
QItemSelectionModel.Select
|
QItemSelectionModel.Select
|
||||||
)
|
)
|
||||||
|
|
||||||
self._table.scrollTo(index)
|
if len(ind) > 0:
|
||||||
|
self._table.scrollTo(self._table.model().index(ind[-1], 0))
|
||||||
self._table.blockSignals(False)
|
self._table.blockSignals(False)
|
||||||
|
|
||||||
def _closer_point(self, event):
|
def _closer_point(self, event):
|
||||||
|
|
@ -181,6 +185,34 @@ class Plot(PamhyrPlot):
|
||||||
def _get_z_from_click(self, event):
|
def _get_z_from_click(self, event):
|
||||||
return event.ydata
|
return event.ydata
|
||||||
|
|
||||||
|
def rect_select_callback(self, eclick, erelease):
|
||||||
|
|
||||||
|
_, hyd = self.highlight
|
||||||
|
|
||||||
|
x1, y1 = eclick.xdata, eclick.ydata
|
||||||
|
x2, y2 = erelease.xdata, erelease.ydata
|
||||||
|
|
||||||
|
inds, points = self._points_in_rectangle(x1, y1, x2, y2)
|
||||||
|
|
||||||
|
self.highlight = (points, hyd)
|
||||||
|
|
||||||
|
self._select_in_table(inds)
|
||||||
|
|
||||||
|
self.update()
|
||||||
|
return
|
||||||
|
|
||||||
|
def _points_in_rectangle(self, x1, y1, x2, y2):
|
||||||
|
# TODO: use lambdas
|
||||||
|
listi = []
|
||||||
|
listp = []
|
||||||
|
station = self.data._get_station(self.data.points)
|
||||||
|
for i, p in enumerate(self.data.points):
|
||||||
|
if (min(x1,x2)<station[i]<max(x1,x2) and min(y1,y2)<p.z<max(y1,y2)):
|
||||||
|
listi.append(i)
|
||||||
|
listp.append(p)
|
||||||
|
return listi, listp
|
||||||
|
|
||||||
|
|
||||||
def _compute_hydrolics(self, z):
|
def _compute_hydrolics(self, z):
|
||||||
profile = self.data
|
profile = self.data
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue