geomerty: Minor change and fix.

mesh
Pierre-Antoine Rouby 2023-04-17 17:31:40 +02:00
parent 8fdfd52ff1
commit 54909af8dd
4 changed files with 130 additions and 150 deletions

View File

@ -229,7 +229,7 @@ class Reach:
return (complete, incomplete)
def _map_guidelines_points(self, func):
def _map_guidelines_points(self, func, _filter=None):
return list(
# Map for each guideline
map(
@ -240,7 +240,10 @@ class Reach:
self._guidelines[k],
)
),
self._guidelines
self._guidelines if not _filter else filter(
_filter,
self._guidelines
)
)
)

View File

@ -36,7 +36,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.tableView = self.ui.tableView
self.tableView_header = self.ui.tableView_header
self.model = None
self._tablemodel = None
self.setup_window()
self.setup_model()
@ -47,11 +47,11 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}")
def setup_model(self):
self.model = qtableview_reach.PandasModelEditable(
self._tablemodel = qtableview_reach.PandasModelEditable(
headers = self.ui.tableView_header,
reach = self._reach
)
self.tableView.setModel(self.model)
self.tableView.setModel(self._tablemodel)
self.tableView.setItemDelegate(qtableview_reach.Delegate())
def setup_plot(self):
@ -98,13 +98,12 @@ class GeometryWindow(QMainWindow, WindowToolKit):
if filename != "":
size = os.stat(filename).st_size
self._reach.import_geometry(filename)
self.model.layoutChanged.emit()
self._tablemodel.layoutChanged.emit()
self.update_profile_windows()
self.graphic_1()
self.graphic_2()
self.graphic_3()
self.fichier_ouvert = True
# Profile selection when line change in table
self.tableView.selectionModel()\
@ -112,8 +111,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
.connect(self.select_current_profile)
# Update plot when profile data change
self.model.dataChanged.connect(self.update_graphic_1)
self.model.dataChanged.connect(self.update_graphic_2)
self._tablemodel.dataChanged.connect(self.update_graphic_1)
self._tablemodel.dataChanged.connect(self.update_graphic_2)
self.tableView.selectionModel()\
.selectionChanged\
.connect(self.update_graphic_1)
@ -211,14 +210,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
pyqtSlot(bool)
def changed_profile_slot(self, status):
print("status du changement ", status)
self.update_view1 = status
print(self.update_view1)
def update_graphic_1_profile(self):
if self.update_view1:
self.update_graphic_1()
print("update_graphic_1_profile")
def update_profile_windows(self):
self.list_second_window = []
@ -322,10 +314,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.line_kp_zgl = [
self.ui.canvas_2.axes.plot(
self._reach.get_kp(), i, lw=1.
) for i in self.model.z_complete_guideline()
) for i in self._reach.get_guidelines_z()
]
except:
print("TODO")
print("Graphic 2: Z guidelines failed")
self.line_kp_zmin, = self.ui.canvas_2.axes.plot(
kp, z_min,
@ -342,16 +334,16 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def update_graphic_1(self):
self.tableView.model().blockSignals(True)
for ind in range(self.model.rowCount()):
for ind in range(self._tablemodel.rowCount()):
self.line_xy[ind][0].set_data(
self._reach.profile(ind).x,
self._reach.profile(ind).y
self._reach.profile(ind).x(),
self._reach.profile(ind).y()
)
for i in range(len(self.line_gl_1)):
self.line_gl_1[i].set_data(
[x[i] for x in self.get_x_complete_list_gl],
[y[i] for y in self.get_y_complete_list_gl]
[x[i] for x in self.x_complete],
[y[i] for y in self.y_complete]
)
self.tableView.model().blockSignals(False)
@ -376,10 +368,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
try:
for i in range(len(self.line_kp_zgl)):
self.line_kp_zgl[i][0].set_data(
kp, self.model.z_complete_guideline()[i]
kp, self._tablemodel.z_complete_guideline()[i]
)
except:
print("TODO")
print("Failed to update graphic 2")
self.tableView.model().blockSignals(False)
self.ui.canvas_2.axes.autoscale_view(True, True, True)
@ -494,47 +486,46 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.annotation_3[:] = []
x = self.profile(ind).get_station()
x = self._reach.profile(ind).get_station()
y = self._reach.profile(ind).z()
gl = self._reach.profile(ind).name
get_complete_list_gl = self._reach.get_complete_list_gl()
get_incomplete_list_gl = self._reach.get_incomplete_list_gl()
complete, incomplete = self._reach.compute_guidelines()
try:
x_gl_complete = []
color_scat_complete_gl = []
x_gl_incomplete = []
color_scat_incomplete_gl = []
x_complete = []
color_scat_complete = []
x_incomplete = []
color_scat_incomplete = []
for i, txt in enumerate(list(gl)):
if txt in get_complete_list_gl:
if txt in complete:
annotate = self.ui.canvas_3.axes.annotate(
txt, (x[i], y[i]), horizontalalignment='left',
verticalalignment='top', annotation_clip=True,
fontsize=11,
color=self.color_complete_gl[
get_complete_list_gl.index(txt)
color=self.color_complete[
complete.index(txt)
],
size=10
)
self.annotation_3.append(annotate)
x_gl_complete.append([x[i], y[i]])
color_scat_complete_gl.append(
self.color_complete_gl[self.complete_gl.index(txt)]
x_complete.append([x[i], y[i]])
color_scat_complete.append(
self.color_complete[self.complete.index(txt)]
)
elif txt in get_incomplete_list_gl:
elif txt in incomplete:
annotate = self.ui.canvas_3.axes.annotate(
txt, (x[i], y[i]), horizontalalignment='left',
verticalalignment='top', annotation_clip=True,
fontsize=11,
color=self.color_incomplete_gl[
get_incomplete_list_gl.index(txt)
color=self.color_incomplete[
incomplete.index(txt)
],
size=10
)
self.annotation_3.append(annotate)
x_gl_incomplete.append([x[i], y[i]])
color_scat_incomplete_gl.append(
self.color_incomplete_gl[get_incomplete_list_gl.index(txt)]
x_incomplete.append([x[i], y[i]])
color_scat_incomplete.append(
self.color_incomplete[incomplete.index(txt)]
)
except:
print("FIXME")
@ -559,43 +550,34 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def update_graphic_3(self, ind: int):
self.tableView.model().blockSignals(True)
if ind == 0:
# ind - 1
if ind != 0:
self.profile_i_minus_1.set_data(
self.get_station(ind - 1),
self.get_elevation(ind - 1)
)
else:
self.profile_i_minus_1.set_data([], [])
self.profile_i.set_data(
self.get_station(ind),
self.get_elevation(ind)
)
# ind
self.profile_i.set_data(
self.get_station(ind),
self.get_elevation(ind)
)
# ind + 1
if ind != self._tablemodel.rowCount() - 1:
self.profile_i_plus_1.set_data(
self.get_station(ind + 1),
self.get_elevation(ind + 1)
)
elif ind == self.model.rowCount() - 1:
self.profile_i_minus_1.set_data(
self.get_station(ind - 1),
self.get_elevation(ind - 1)
)
self.profile_i.set_data(
self.get_station(ind),
self.get_elevation(ind)
)
else:
self.profile_i_plus_1.set_data([], [])
elif 0 < ind < self.model.rowCount() - 1:
self.profile_i_minus_1.set_data(
self.get_station(ind - 1),
self.get_elevation(ind - 1)
)
self.profile_i.set_data(
self.get_station(ind),
self.get_elevation(ind)
)
self.profile_i_plus_1.set_data(
self.get_station(ind + 1),
self.get_elevation(ind + 1)
)
self.tableView.model().blockSignals(False)
self.update_annotate_3(ind)
# Update graphic 3
self.update_annotate_3(ind)
self.ui.canvas_3.axes.relim()
self.ui.canvas_3.axes.autoscale_view()
self.ui.canvas_3.figure.canvas.draw_idle()
@ -603,47 +585,48 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def select_plot_graphic_1(self, ind: int):
self.tableView.model().blockSignals(True)
if 0 <= ind < self.model.rowCount():
self.plot_selected_1.set_data(self._reach.profile(ind).x,
self._reach.profile(ind).y)
if 0 <= ind < self._tablemodel.rowCount():
self.plot_selected_1.set_data(self._reach.profile(ind).x(),
self._reach.profile(ind).y())
self.plot_selected_1.set_visible(True)
self.tableView.model().blockSignals(False)
def select_plot_graphic_2(self, ind: int):
kp_i = self._reach.profile(ind).kp
z_min_i = self._reach.profile(ind).z_min
z_max_i = self._reach.profile(ind).z_max
z_min_i = self._reach.profile(ind).z_min()
z_max_i = self._reach.profile(ind).z_max()
if 0 <= ind < self.model.rowCount():
if 0 <= ind < self._tablemodel.rowCount():
self.plot_selected_2.set_data((kp_i, kp_i),
(z_min_i, z_max_i))
self.plot_selected_2.set_visible(True)
def select_before_plot_selected_1(self, ind: int):
if 0 <= ind < self.model.rowCount():
if 0 <= ind < self._tablemodel.rowCount():
self.before_plot_selected_1.set_data(
self._reach.profile(ind).x,
self._reach.profile(ind).y
self._reach.profile(ind).x(),
self._reach.profile(ind).y()
)
self.before_plot_selected_1.set_visible(True)
self.ui.canvas_1.figure.canvas.draw_idle()
def select_after_plot_selected_1(self, ind: int):
if 0 <= ind < self.model.rowCount():
if 0 <= ind < self._tablemodel.rowCount():
self.after_plot_selected_1.set_data(
self._reach.profile(ind).x,
self._reach.profile(ind).y
self._reach.profile(ind).x(),
self._reach.profile(ind).y()
)
self.after_plot_selected_1.set_visible(True)
self.ui.canvas_1.figure.canvas.draw_idle()
def select_before_plot_selected_2(self, ind: int):
if 0 <= ind < self.model.rowCount():
if 0 <= ind < self._tablemodel.rowCount():
kp_i = self._reach.profile(ind).kp
z_min_i = self._reach.profile(ind).z_min
z_max_i = self._reach.profile(ind).z_max
z_min_i = self._reach.profile(ind).z_min()
z_max_i = self._reach.profile(ind).z_max()
self.before_plot_selected_2.set_data(
(kp_i, kp_i),
@ -654,10 +637,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.ui.canvas_2.figure.canvas.draw_idle()
def select_after_plot_selected_2(self, ind: int):
if 0 <= ind < self.model.rowCount():
if 0 <= ind < self._tablemodel.rowCount():
kp_i = self._reach.profile(ind).kp
z_min_i = self._reach.profile(ind).z_min
z_max_i = self._reach.profile(ind).z_max
z_min_i = self._reach.profile(ind).z_min()
z_max_i = self._reach.profile(ind).z_max()
self.after_plot_selected_2.set_data(
(kp_i, kp_i),
@ -696,12 +679,12 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.select_after_plot_selected_1(row + 1)
self.before_plot_selected_2.set_visible(False)
self.select_after_plot_selected_2(row + 1)
elif 0 < row < self.model.rowCount() - 1:
elif 0 < row < self._tablemodel.rowCount() - 1:
self.select_before_plot_selected_1(row - 1)
self.select_after_plot_selected_1(row + 1)
self.select_before_plot_selected_2(row - 1)
self.select_after_plot_selected_2(row + 1)
elif row == self.model.rowCount() - 1:
elif row == self._tablemodel.rowCount() - 1:
self.after_plot_selected_1.set_visible(False)
self.select_before_plot_selected_1(row - 1)
self.after_plot_selected_2.set_visible(False)
@ -715,8 +698,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def changed_slider_value(self):
self.tableView.model().blockSignals(True)
if self.model.rowCount() != 0:
self.ui.verticalSlider.setMaximum(self.model.rowCount() - 1)
if self._tablemodel.rowCount() != 0:
self.ui.verticalSlider.setMaximum(self._tablemodel.rowCount() - 1)
slider_value = self.ui.verticalSlider.value()
kp = self._reach.profile(slider_value).kp
@ -735,19 +718,19 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.tableView.model().blockSignals(False)
def increment_value_slider(self):
if 0 <= self.ui.verticalSlider.value() < self.model.rowCount() - 1:
if 0 <= self.ui.verticalSlider.value() < self._tablemodel.rowCount() - 1:
self.ui.verticalSlider.setValue(self.ui.verticalSlider.value() + 1)
def decrement_value_slider(self):
if 0 < self.ui.verticalSlider.value() < self.model.rowCount():
if 0 < self.ui.verticalSlider.value() < self._tablemodel.rowCount():
self.ui.verticalSlider.setValue(self.ui.verticalSlider.value() - 1)
def insert_row(self):
if len(self.tableView.selectedIndexes()) == 0:
self.model.insertRows(self.model.rowCount(), 1)
self._tablemodel.insertRows(self._tablemodel.rowCount(), 1)
else:
row = self.index_selected_row
self.model.insertRows(row + 1, 1)
self._tablemodel.insertRows(row + 1, 1)
if self.filename is not None:
self.graphic_1()
@ -760,7 +743,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
))
if len(rows) > 0:
self.model.remove_rows(rows)
self._tablemodel.remove_rows(rows)
self.update_graphic_1()
self.select_current_profile()
@ -770,10 +753,10 @@ class GeometryWindow(QMainWindow, WindowToolKit):
@property
def index_selected_row(self):
return [index.row() for index in self.tableView.selectedIndexes()][0]
return self.tableView.selectedIndexes()[0].row()
def sort_ascending(self):
self.model.sort_profiles(True)
self._tablemodel.sort_profiles(True)
self.select_current_profile()
self.changed_slider_value()
@ -781,7 +764,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.update_graphic_3(self.index_selected_row)
def sort_descending(self):
self.model.sort_profiles(False)
self._tablemodel.sort_profiles(False)
self.select_current_profile()
self.changed_slider_value()
@ -792,22 +775,22 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def move_row_down(self):
row = self.index_selected_row
if row < self.model.rowCount() - 1:
self.model.moveRowDown(row)
if row < self._tablemodel.rowCount() - 1:
self._tablemodel.moveRowDown(row)
self.update_graphic_3(row + 1)
self.ui.canvas_3.axes.relim()
self.ui.canvas_3.axes.autoscale_view()
if row < self.model.rowCount() - 2:
if row < self._tablemodel.rowCount() - 2:
self.select_before_plot_selected_1(row)
self.select_after_plot_selected_1(row + 2)
self.select_before_plot_selected_2(row)
self.select_after_plot_selected_2(row + 2)
if row == self.model.rowCount() - 2:
self.select_before_plot_selected_1(self.model.rowCount() - 2)
if row == self._tablemodel.rowCount() - 2:
self.select_before_plot_selected_1(self._tablemodel.rowCount() - 2)
self.after_plot_selected_1.set_visible(False)
self.select_before_plot_selected_2(self.model.rowCount() - 2)
self.select_before_plot_selected_2(self._tablemodel.rowCount() - 2)
self.after_plot_selected_2.set_visible(False)
self.update_graphic_2()
@ -815,8 +798,8 @@ class GeometryWindow(QMainWindow, WindowToolKit):
def move_row_up(self):
row = self.index_selected_row
if 0 < row <= self.model.rowCount() - 1:
self.model.moveRowUp(row)
if 0 < row <= self._tablemodel.rowCount() - 1:
self._tablemodel.moveRowUp(row)
if row == 1:
self.select_after_plot_selected_1(row)
@ -824,7 +807,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
self.select_after_plot_selected_2(row)
self.before_plot_selected_2.set_visible(False)
elif row == self.model.rowCount() - 1:
elif row == self._tablemodel.rowCount() - 1:
self.select_before_plot_selected_1(row - 2)
self.select_after_plot_selected_1(row)
self.select_before_plot_selected_2(row - 2)
@ -851,9 +834,9 @@ class GeometryWindow(QMainWindow, WindowToolKit):
filename, filters = QFileDialog.getSaveFileName(
self,
filter=_translate("MainWindow_reach",
"Fichiers .ST(*.ST ou *.st)")
"Files .ST(*.ST or *.st)")
+ ";; " +
_translate("MainWindow_reach", "Tous les fichiers "
_translate("MainWindow_reach", "All files "
"(*)"),
options=options
)
@ -861,7 +844,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
current_dir = os.path.split(filename)[0] or DEFAULT_DIRECTORY
if filename != '':
self.model.export_reach(filename)
self._tablemodel.export_reach(filename)
def handleOpen(self):
filename, filterName = QFileDialog.getOpenFileName(self)
@ -875,7 +858,7 @@ class GeometryWindow(QMainWindow, WindowToolKit):
row[0] = QCheckBox("-")
buf.append(row)
self.model = None
self.model = qtableview_reach.PandasModelEditable(buf)
self.tableView.setModel(self.model)
self._tablemodel = None
self._tablemodel = qtableview_reach.PandasModelEditable(buf)
self.tableView.setModel(self._tablemodel)
filename = ''

View File

@ -46,31 +46,32 @@ class PandasModelEditable(QAbstractTableModel):
return len(self.headers)
def data(self, index, role=Qt.DisplayRole):
if index.isValid():
if role == Qt.DisplayRole and index.column() == 0:
return self._reach.profile(index.row()).name
if not index.isValid():
return QVariant()
if role == Qt.DisplayRole and index.column() == 1:
kp = self._reach.profile(index.row()).kp
return f"{kp:.4f}"
if role == Qt.DisplayRole and index.column() == 0:
return self._reach.profile(index.row()).name
if role == Qt.DisplayRole and index.column() == 2:
return self._reach.profile(index.row()).profile_type
if role == Qt.DisplayRole and index.column() == 1:
kp = self._reach.profile(index.row()).kp
return f"{kp:.4f}"
for column in range(0, self.columnCount()):
if index.column() == column and role == Qt.TextAlignmentRole:
return Qt.AlignHCenter | Qt.AlignVCenter
if role == Qt.DisplayRole and index.column() == 2:
return self._reach.profile(index.row()).profile_type
if role == Qt.ForegroundRole and index.column() == 0:
name = self._reach.profile(index.row()).name\
.strip()\
.lower()
if (name == "upstream" or name == "up" or
name == _translate("Geometry", "upstream")):
return QtGui.QColor("Green")
elif (name == "downstream" or name == "down" or
name == _translate("Geometry", "downstream")):
return QtGui.QColor("Red")
if role == Qt.TextAlignmentRole:
return Qt.AlignHCenter | Qt.AlignVCenter
if role == Qt.ForegroundRole and index.column() == 0:
name = self._reach.profile(index.row()).name\
.strip()\
.lower()
if (name == "upstream" or name == "up" or
name == _translate("Geometry", "upstream")):
return QtGui.QColor("Green")
elif (name == "downstream" or name == "down" or
name == _translate("Geometry", "downstream")):
return QtGui.QColor("Red")
return QVariant()
@ -89,11 +90,11 @@ class PandasModelEditable(QAbstractTableModel):
column = index.column()
if role == Qt.EditRole and index.column() != 2:
if role == Qt.EditRole and index.column() == 0:
if index.column() == 0:
self._reach.profile(index.row()).name = value
if role == Qt.EditRole and index.column() == 1:
self._reach.profile(index.row()).pk = float(value)
if index.column() == 1:
self._reach.profile(index.row()).kp = value
self.dataChanged.emit(index, index)
self.layoutChanged.emit()
@ -173,27 +174,20 @@ class Delegate(QtWidgets.QStyledItemDelegate):
self.setModelDataEvent = setModelDataEvent
def createEditor(self, parent, option, index):
"""retourne le widget (éditeur) pour éditer l'item se trouvant à l'index index."""
index.model().data(index, Qt.DisplayRole)
return QtWidgets.QLineEdit(parent)
def setEditorData(self, editor, index):
"""permet de transmettre à l'éditeur editor les données à afficher à partir du modèle se trouvant à l'index
index. """
value = index.model().data(index, Qt.DisplayRole) # DisplayRole
editor.setText(str(value)) # récupère la valeur de la cellule applique la méthode définie dans setData
print('Donnée éditée dans la case [{},{}] :'.format(index.row(), index.column()), value)
def setModelData(self, editor, model, index):
"""permet de récupérer les données de l'éditeur et de les stocker à l'intérieur du modèle, à l'index identifié
par le paramètre index """
model.setData(index, editor.currentItem().text())
model.setData(index, editor.text())
if not self.setModelDataEvent is None:
self.setModelDataEvent()
def updateEditorGeometry(self, editor, option, index):
"""permet de redimensionner l'éditeur à la bonne taille lorsque la taille de la vue change"""
editor.setGeometry(option.rect)
class Delegate1(QtWidgets.QStyledItemDelegate):

View File

@ -39,7 +39,7 @@ def main():
application = ApplicationWindow(conf=conf)
application.show()
sys.exit(int(app.exec_()))
sys.exit(app.exec_())
if __name__ == "__main__":
main()