mirror of https://gitlab.com/pamhyr/pamhyr2
geometry: Profile: Continue to import.
parent
a2e1208d42
commit
215b93d6ed
|
|
@ -1,5 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from tools import timer
|
||||||
|
|
||||||
from Model.Geometry.Point import Point
|
from Model.Geometry.Point import Point
|
||||||
from Model.Except import NotImplementedMethodeError
|
from Model.Except import NotImplementedMethodeError
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -352,16 +352,16 @@ class GeometryWindow(QMainWindow, WindowToolKit):
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
self.changed_slider_value()
|
self.changed_slider_value()
|
||||||
|
|
||||||
def move_row_down(self):
|
|
||||||
row = self.index_selected_row()
|
|
||||||
self._tablemodel.move_row_down(row)
|
|
||||||
self.select_current_profile()
|
|
||||||
|
|
||||||
def move_row_up(self):
|
def move_row_up(self):
|
||||||
row = self.index_selected_row()
|
row = self.index_selected_row()
|
||||||
self._tablemodel.move_row_up(row)
|
self._tablemodel.move_row_up(row)
|
||||||
self.select_current_profile()
|
self.select_current_profile()
|
||||||
|
|
||||||
|
def move_row_down(self):
|
||||||
|
row = self.index_selected_row()
|
||||||
|
self._tablemodel.move_row_down(row)
|
||||||
|
self.select_current_profile()
|
||||||
|
|
||||||
def copy(self):
|
def copy(self):
|
||||||
rows = self.tableView\
|
rows = self.tableView\
|
||||||
.selectionModel()\
|
.selectionModel()\
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ class DelCommand(QUndoCommand):
|
||||||
self._profile.delete(row)
|
self._profile.delete(row)
|
||||||
|
|
||||||
class SortCommand(QUndoCommand):
|
class SortCommand(QUndoCommand):
|
||||||
def __init__(self, profile, column _reverse):
|
def __init__(self, profile, column, _reverse):
|
||||||
QUndoCommand.__init__(self)
|
QUndoCommand.__init__(self)
|
||||||
|
|
||||||
self._profile = profile
|
self._profile = profile
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import sys
|
||||||
import csv
|
import csv
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
|
from tools import trace, timer
|
||||||
|
|
||||||
from PyQt5 import QtWidgets, QtGui
|
from PyQt5 import QtWidgets, QtGui
|
||||||
from PyQt5.QtCore import QModelIndex, Qt, QEvent, QCoreApplication
|
from PyQt5.QtCore import QModelIndex, Qt, QEvent, QCoreApplication
|
||||||
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QCheckBox
|
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QCheckBox
|
||||||
|
|
@ -37,7 +39,6 @@ class ProfileWindow(QMainWindow):
|
||||||
self.graph()
|
self.graph()
|
||||||
|
|
||||||
self._model.dataChanged.connect(self.graph)
|
self._model.dataChanged.connect(self.graph)
|
||||||
self.filters = "CSV files (*.csv)"
|
|
||||||
self.fileName = None
|
self.fileName = None
|
||||||
|
|
||||||
self.ui.tableView.installEventFilter(self)
|
self.ui.tableView.installEventFilter(self)
|
||||||
|
|
@ -86,27 +87,30 @@ class ProfileWindow(QMainWindow):
|
||||||
self.ui.btn_reset.clicked.connect(self.go_back_to_initial_state)
|
self.ui.btn_reset.clicked.connect(self.go_back_to_initial_state)
|
||||||
|
|
||||||
def setup_model(self):
|
def setup_model(self):
|
||||||
self._model = qtableview_profile.PandasModelEditable(self._profile)
|
self._model = PandasModelEditable(self._profile)
|
||||||
self._last_saved_model_data = copy.deepcopy(self._model.model_data)
|
self._last_saved_model_data = copy.deepcopy(self._model.model_data)
|
||||||
self.__initial_model_data = copy.deepcopy(self._model.model_data)
|
self.__initial_model_data = copy.deepcopy(self._model.model_data)
|
||||||
|
|
||||||
self.ui.tableView.setModel(self._model)
|
self.ui.tableView.setModel(self._model)
|
||||||
self.ui.tableView.setItemDelegate(qtableview_profile.Delegate())
|
self.ui.tableView.setItemDelegate(Delegate())
|
||||||
|
|
||||||
|
@timer
|
||||||
def graph(self):
|
def graph(self):
|
||||||
"""
|
"""
|
||||||
Returns: Le tracé de la cote z en fonction de l'abscisse (calculée).
|
Returns: Le tracé de la cote z en fonction de l'abscisse (calculée).
|
||||||
"""
|
"""
|
||||||
x = self._model.station # abscisse en travers
|
x = self._profile.get_station()
|
||||||
y = self._model.z # cote z
|
y = self._profile.z()
|
||||||
ld = self._model.name # nom des points
|
gl = self._profile.name()
|
||||||
x_carto = self._model.x # x 'cartographique'
|
x_carto = self._profile.x()
|
||||||
y_carto = self._model.y # y 'cartographique'
|
y_carto = self._profile.y()
|
||||||
|
|
||||||
if len(self._model.x) >= 3 and len(self._model.y) >= 3 and len(self._model.station) >= 3:
|
self.ui.canvas.axes.cla()
|
||||||
|
self.ui.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
|
||||||
|
|
||||||
self.ui.canvas.axes.cla()
|
if (len(x_carto) >= 3 and
|
||||||
self.ui.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
|
len(y_carto) >= 3 and
|
||||||
|
len(x) >= 3):
|
||||||
self.profile_line2D, = self.ui.canvas.axes.plot(
|
self.profile_line2D, = self.ui.canvas.axes.plot(
|
||||||
x, y, color='r', lw=1.5, markersize=7, marker='+',
|
x, y, color='r', lw=1.5, markersize=7, marker='+',
|
||||||
picker=30
|
picker=30
|
||||||
|
|
@ -114,8 +118,7 @@ class ProfileWindow(QMainWindow):
|
||||||
self.ui.canvas.axes.set_xlabel(
|
self.ui.canvas.axes.set_xlabel(
|
||||||
_translate("MainWindowProfile",
|
_translate("MainWindowProfile",
|
||||||
"Abscisse en travers (m)"),
|
"Abscisse en travers (m)"),
|
||||||
color='black',
|
color='black', fontsize=10
|
||||||
fontsize=10
|
|
||||||
)
|
)
|
||||||
self.ui.canvas.axes.set_ylabel(
|
self.ui.canvas.axes.set_ylabel(
|
||||||
_translate("MainWindowProfile", "Cote (m)"),
|
_translate("MainWindowProfile", "Cote (m)"),
|
||||||
|
|
@ -124,7 +127,7 @@ class ProfileWindow(QMainWindow):
|
||||||
|
|
||||||
# Add label on graph
|
# Add label on graph
|
||||||
self.annotation = []
|
self.annotation = []
|
||||||
for i, txt in enumerate(list(ld)):
|
for i, txt in enumerate(list(gl)):
|
||||||
annotation = self.ui.canvas.axes.annotate(
|
annotation = self.ui.canvas.axes.annotate(
|
||||||
txt, (x[i], y[i]),
|
txt, (x[i], y[i]),
|
||||||
horizontalalignment='left',
|
horizontalalignment='left',
|
||||||
|
|
@ -136,11 +139,10 @@ class ProfileWindow(QMainWindow):
|
||||||
annotation.set_color("black")
|
annotation.set_color("black")
|
||||||
self.annotation.append(annotation)
|
self.annotation.append(annotation)
|
||||||
|
|
||||||
al = 8. # arrow length in points
|
al = 8.
|
||||||
arrowprops = dict(
|
arrowprops = dict(
|
||||||
clip_on=True, # plotting outside axes on purpose
|
clip_on=True,
|
||||||
# frac=1., # make end arrowhead the whole size of arrow
|
headwidth=5.,
|
||||||
headwidth=5., # in points
|
|
||||||
facecolor='k'
|
facecolor='k'
|
||||||
)
|
)
|
||||||
kwargs = dict(
|
kwargs = dict(
|
||||||
|
|
@ -150,120 +152,100 @@ class ProfileWindow(QMainWindow):
|
||||||
)
|
)
|
||||||
|
|
||||||
self.ui.canvas.axes.annotate("", (1, 0), xytext=(-al, 0), **kwargs)
|
self.ui.canvas.axes.annotate("", (1, 0), xytext=(-al, 0), **kwargs)
|
||||||
self.ui.canvas.axes.annotate("", (0, 1), xytext=(0, -al), **kwargs) # left spin arrow
|
self.ui.canvas.axes.annotate("", (0, 1), xytext=(0, -al), **kwargs)
|
||||||
|
|
||||||
self.ui.canvas.axes.spines[['top', 'right']].set_color('none')
|
self.ui.canvas.axes.spines[['top', 'right']].set_color('none')
|
||||||
self.ui.canvas.axes.yaxis.tick_left()
|
self.ui.canvas.axes.yaxis.tick_left()
|
||||||
self.ui.canvas.axes.xaxis.tick_bottom()
|
self.ui.canvas.axes.xaxis.tick_bottom()
|
||||||
self.ui.canvas.axes.set_facecolor('#F9F9F9') # '#E0FFFF')
|
self.ui.canvas.axes.set_facecolor('#F9F9F9')
|
||||||
self.ui.canvas.figure.patch.set_facecolor('white')
|
self.ui.canvas.figure.patch.set_facecolor('white')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.onpick_event = OnpickEvent(self.ui.canvas.axes, x, y, x_carto, y_carto, self.ui.tableView)
|
self.onpick_event = OnpickEvent(
|
||||||
self.ui.canvas.figure.canvas.mpl_connect('pick_event', self.onpick_event.onpick)
|
self.ui.canvas.axes,
|
||||||
|
x, y, x_carto, y_carto,
|
||||||
|
self.ui.tableView
|
||||||
|
)
|
||||||
|
self.ui.canvas\
|
||||||
|
.figure\
|
||||||
|
.canvas\
|
||||||
|
.mpl_connect('pick_event', self.onpick_event.onpick)
|
||||||
|
|
||||||
self.onclick_event = OnpickEvent(self.ui.canvas.axes, x, y, x_carto, y_carto, self.ui.tableView)
|
self.onclick_event = OnpickEvent(
|
||||||
self.ui.canvas.figure.canvas.mpl_connect('button_press_event', self.onclick_event.onclick)
|
self.ui.canvas.axes,
|
||||||
|
x, y, x_carto, y_carto,
|
||||||
|
self.ui.tableView
|
||||||
|
)
|
||||||
|
self.ui.canvas\
|
||||||
|
.figure\
|
||||||
|
.canvas\
|
||||||
|
.mpl_connect('button_press_event', self.onclick_event.onclick)
|
||||||
except:
|
except:
|
||||||
print("TODO")
|
print("TODO")
|
||||||
|
|
||||||
self.ui.canvas.figure.tight_layout()
|
self.ui.canvas.figure.tight_layout()
|
||||||
self.ui.canvas.figure.canvas.draw_idle()
|
self.ui.canvas.figure.canvas.draw_idle()
|
||||||
else:
|
|
||||||
self.ui.canvas.axes.cla()
|
|
||||||
self.ui.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
|
|
||||||
|
|
||||||
def insert_row(self):
|
def insert_row(self):
|
||||||
if len(self.ui.tableView.selectedIndexes()) == 0:
|
if len(self.tableView.selectedIndexes()) == 0:
|
||||||
self._model.insertRows(self._model.rowCount(), 1)
|
self._tablemodel.insert_row(self._tablemodel.rowCount())
|
||||||
else:
|
else:
|
||||||
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()]))
|
row = self.index_selected_row()
|
||||||
for row in rows: # [::-1]:
|
self._tablemodel.insert_row(row + 1)
|
||||||
self._model.insertRows(row + 1, 1)
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.graph()
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def delete_row(self):
|
def delete_row(self):
|
||||||
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()]))
|
rows = sorted(
|
||||||
|
list(
|
||||||
|
set(
|
||||||
|
[index.row() for index in self.tableView.selectedIndexes()]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if len(rows) > 0:
|
if len(rows) > 0:
|
||||||
self._model.remove_rows(rows)
|
self._tablemodel.remove_rows(rows)
|
||||||
|
|
||||||
try:
|
|
||||||
self.graph()
|
|
||||||
except:
|
|
||||||
print("TODO")
|
|
||||||
|
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def sort_X_ascending(self):
|
def sort_X_ascending(self):
|
||||||
self._model.sort(0, order=Qt.AscendingOrder)
|
self._model.sort('x', order=Qt.AscendingOrder)
|
||||||
self.graph()
|
self.graph()
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def sort_X_descending(self):
|
def sort_X_descending(self):
|
||||||
self._model.sort(0, order=Qt.DescendingOrder)
|
self._model.sort('x', order=Qt.DescendingOrder)
|
||||||
self.graph()
|
self.graph()
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def sort_Y_ascending(self):
|
def sort_Y_ascending(self):
|
||||||
self._model.sort(1, order=Qt.AscendingOrder)
|
self._model.sort('y', order=Qt.AscendingOrder)
|
||||||
self.graph()
|
self.graph()
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def sort_Y_descending(self):
|
def sort_Y_descending(self):
|
||||||
self._model.sort(1, order=Qt.DescendingOrder)
|
self._model.sort('y', order=Qt.DescendingOrder)
|
||||||
self.graph()
|
self.graph()
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def move_row_down(self):
|
def move_row_down(self):
|
||||||
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()]))
|
rows = list(
|
||||||
|
set(
|
||||||
|
[index.row() for index in self.ui.tableView.selectedIndexes()]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
for row in rows:
|
for row in rows:
|
||||||
if row < self._model.rowCount() - 1:
|
if row < self._model.rowCount() - 1:
|
||||||
self._model.moveRowDown(row)
|
self._model.moveRowDown(row)
|
||||||
|
|
||||||
self.graph()
|
self.graph()
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def move_row_up(self):
|
def move_row_up(self):
|
||||||
rows = list(set([index.row() for index in self.ui.tableView.selectedIndexes()]))
|
rows = list(
|
||||||
|
set(
|
||||||
|
[index.row() for index in self.ui.tableView.selectedIndexes()]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
for row in rows:
|
for row in rows:
|
||||||
if 0 < row:
|
if 0 < row:
|
||||||
self._model.moveRowUp(row)
|
self._model.moveRowUp(row)
|
||||||
|
|
||||||
self.graph()
|
self.graph()
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def eventFilter(self, source, event):
|
def eventFilter(self, source, event):
|
||||||
if event.type() == QEvent.KeyPress:
|
if event.type() == QEvent.KeyPress:
|
||||||
|
|
@ -302,9 +284,11 @@ class ProfileWindow(QMainWindow):
|
||||||
print(minCol)
|
print(minCol)
|
||||||
print(minRow, columns)
|
print(minRow, columns)
|
||||||
for index in selected:
|
for index in selected:
|
||||||
self.clipboard.append((index.row() - minRow,
|
self.clipboard.append(
|
||||||
index.column() - minCol,
|
(index.row() - minRow,
|
||||||
index.data_frame()))
|
index.column() - minCol,
|
||||||
|
index.data_frame())
|
||||||
|
)
|
||||||
|
|
||||||
def pasteSelection(self):
|
def pasteSelection(self):
|
||||||
if not self.clipboard:
|
if not self.clipboard:
|
||||||
|
|
@ -358,15 +342,11 @@ class ProfileWindow(QMainWindow):
|
||||||
print("TODO")
|
print("TODO")
|
||||||
|
|
||||||
self.graph()
|
self.graph()
|
||||||
self.status_change_tableview = True
|
|
||||||
self.ui.btn_check.setEnabled(True)
|
|
||||||
self.ui.btn_go_back.setEnabled(True)
|
|
||||||
self.ui.btn_reset.setEnabled(True)
|
|
||||||
|
|
||||||
def handleSave(self):
|
def handleSave(self):
|
||||||
if self.fileName is None or self.fileName == '':
|
if self.fileName is None or self.fileName == '':
|
||||||
self.fileName, self.filters = QFileDialog.getSaveFileName(
|
self.fileName, self.filters = QFileDialog.getSaveFileName(
|
||||||
self, filter=self.filters
|
self, filter="CSV files (*.csv)"
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.fileName != '':
|
if self.fileName != '':
|
||||||
|
|
@ -405,7 +385,7 @@ class ProfileWindow(QMainWindow):
|
||||||
buf.append(row)
|
buf.append(row)
|
||||||
|
|
||||||
self._model = None
|
self._model = None
|
||||||
self._model = qtableview_profile.PandasModelEditable(buf)
|
self._model = PandasModelEditable(buf)
|
||||||
self.ui.tableView.setModel(self._model)
|
self.ui.tableView.setModel(self._model)
|
||||||
self.fileName = ''
|
self.fileName = ''
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ class PandasModelEditable(QAbstractTableModel):
|
||||||
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
|
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
|
||||||
return self._header[section]
|
return self._header[section]
|
||||||
elif orientation == Qt.Vertical and role == Qt.DisplayRole:
|
elif orientation == Qt.Vertical and role == Qt.DisplayRole:
|
||||||
return return str(section + 1)
|
return str(section + 1)
|
||||||
|
|
||||||
if role == Qt.ToolTipRole and section == 4:
|
if role == Qt.ToolTipRole and section == 4:
|
||||||
return _translate(
|
return _translate(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue