diff --git a/src/Model/Geometry/Point.py b/src/Model/Geometry/Point.py index a844e7d4080e4a222196d5e87fad860190ada990..f83731f60dc6fb4eb536eae5602266f8844daa5c 100644 --- a/src/Model/Geometry/Point.py +++ b/src/Model/Geometry/Point.py @@ -19,4 +19,4 @@ class Point(object): Returns: True if the point is named. """ - return self._name.strip() == "" + return self._name.strip() != "" diff --git a/src/Model/Geometry/ProfileXYZ.py b/src/Model/Geometry/ProfileXYZ.py index de194fbe193aaa32817f70d9edd893589fc52c11..5485d63e8f75e1504cb87c196e31cf753ca50553 100644 --- a/src/Model/Geometry/ProfileXYZ.py +++ b/src/Model/Geometry/ProfileXYZ.py @@ -188,7 +188,9 @@ class ProfileXYZ(Profile): Returns: Projection of the points of the profile on a plane. """ - if self.nb_points >= 3: + if self.nb_points < 3: + return np.array(np.nan) + else: first_named_point = None index_first_named_point = None last_named_point = None @@ -227,8 +229,9 @@ class ProfileXYZ(Profile): station_i = (normalized_direction_vec[0] * xi + normalized_direction_vec[1] * yi) station.append(station_i) - ret = np.array(station) - constant = ret[index_first_named_point] + + ret = np.array(station) + constant = ret[index_first_named_point] elif first_named_point is None: vector = Vector1d(first_point_not_nan, last_point_not_nan) @@ -246,8 +249,6 @@ class ProfileXYZ(Profile): constant = ret[index_profile_z_min] return (ret - constant) - else: - return np.array(np.nan) def _first_point_not_nan(self): first_point = self._points[0] diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 526716a4e11af09e3ad840b1437bcd56ea01d912..ea2c59a09f461a6092a10bb4d8fa58801c890ae9 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -230,6 +230,9 @@ class Reach: return (complete, incomplete) def _map_guidelines_points(self, func, _filter=None): + if len(self._guidelines) == 0: + _ = compute_guidelines() + return list( # Map for each guideline map( diff --git a/src/View/Geometry/GeometryWindow.py b/src/View/Geometry/GeometryWindow.py index 0d858b2e8f73c0f93010bc40f0380f277ceb821c..7a045b5ad56741f759bf61d3bccefae2077a35c0 100644 --- a/src/View/Geometry/GeometryWindow.py +++ b/src/View/Geometry/GeometryWindow.py @@ -42,6 +42,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.setup_model() self.setup_connections() self.setup_plot() + self.changed_slider_value() def setup_window(self): self.setWindowTitle(f"{self.ui.mainwindow_title} - {self._reach.name}") @@ -55,9 +56,10 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.tableView.setItemDelegate(qtableview_reach.Delegate()) def setup_plot(self): - self.graphic_1() - self.graphic_2() - self.graphic_3() + if self._reach.number_profiles != 0: + self.graphic_1() + self.graphic_2() + self.graphic_3() def setup_connections(self): self.ui.btn_open.clicked.connect(self.open_file_dialog) @@ -75,6 +77,22 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.ui.btn_slider_down.clicked.connect(self.increment_value_slider) self.ui.btn_move_up.clicked.connect(self.changed_profile_slot) + + # Profile selection when line change in table + self.tableView.selectionModel()\ + .selectionChanged\ + .connect(self.select_current_profile) + + # Update plot when profile data change + 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) + self.tableView.selectionModel()\ + .selectionChanged\ + .connect(self.update_graphic_2) + def open_file_dialog(self): options = QFileDialog.Options() DEFAULT_DIRECTORY = os.getenv("HOME") @@ -105,20 +123,6 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.graphic_2() self.graphic_3() - # Profile selection when line change in table - self.tableView.selectionModel()\ - .selectionChanged\ - .connect(self.select_current_profile) - - # Update plot when profile data change - 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) - self.tableView.selectionModel()\ - .selectionChanged\ - .connect(self.update_graphic_2) def messagebox_profile_editing(self): @@ -232,9 +236,13 @@ class GeometryWindow(QMainWindow, WindowToolKit): for x, y in zip(self._reach.get_x(), self._reach.get_y()) ] + + self.x_complete = self._reach.get_guidelines_x() + self.y_complete = self._reach.get_guidelines_y() + self.line_gl_1 = self.ui.canvas_1.axes.plot( - self._reach.get_guidelines_x(), - self._reach.get_guidelines_y() + self.x_complete, + self.y_complete ) self.plot_selected_1, = self.ui.canvas_1.axes.plot( @@ -310,14 +318,18 @@ class GeometryWindow(QMainWindow, WindowToolKit): ) self.after_plot_selected_2.set_visible(False) - try: - self.line_kp_zgl = [ + kp = self._reach.get_kp() + self.line_kp_zgl = [] + for z in self._reach.get_guidelines_z(): + # Is incomplete guideline? + if len(z) != len(kp): + continue + + self.line_kp_zgl.append( self.ui.canvas_2.axes.plot( - self._reach.get_kp(), i, lw=1. - ) for i in self._reach.get_guidelines_z() - ] - except: - print("Graphic 2: Z guidelines failed") + kp, z, lw=1. + ) + ) self.line_kp_zmin, = self.ui.canvas_2.axes.plot( kp, z_min, @@ -370,8 +382,8 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.line_kp_zgl[i][0].set_data( kp, self._tablemodel.z_complete_guideline()[i] ) - except: - print("Failed to update graphic 2") + except Exception as e: + print(f"Failed to update graphic 2: {e}") self.tableView.model().blockSignals(False) self.ui.canvas_2.axes.autoscale_view(True, True, True) @@ -491,11 +503,12 @@ class GeometryWindow(QMainWindow, WindowToolKit): gl = self._reach.profile(ind).name complete, incomplete = self._reach.compute_guidelines() + self.x_complete = [] + color_scat_complete = [] + self.x_incomplete = [] + color_scat_incomplete = [] + try: - x_complete = [] - color_scat_complete = [] - x_incomplete = [] - color_scat_incomplete = [] for i, txt in enumerate(list(gl)): if txt in complete: annotate = self.ui.canvas_3.axes.annotate( @@ -508,7 +521,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): size=10 ) self.annotation_3.append(annotate) - x_complete.append([x[i], y[i]]) + self.x_complete.append([x[i], y[i]]) color_scat_complete.append( self.color_complete[self.complete.index(txt)] ) @@ -523,7 +536,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): size=10 ) self.annotation_3.append(annotate) - x_incomplete.append([x[i], y[i]]) + self.x_incomplete.append([x[i], y[i]]) color_scat_incomplete.append( self.color_incomplete[incomplete.index(txt)] ) @@ -668,7 +681,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.tableView.model().blockSignals(True) if len(self.tableView.selectedIndexes()) > 0: - row = self.index_selected_row + row = self.index_selected_row() self.ui.verticalSlider.setValue(row) self.select_plot_graphic_1(row) @@ -715,7 +728,8 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.select_plot_graphic_1(slider_value) self.select_plot_graphic_2(slider_value) self.select_row_profile_slider(slider_value) - self.tableView.model().blockSignals(False) + + self.tableView.model().blockSignals(False) def increment_value_slider(self): if 0 <= self.ui.verticalSlider.value() < self._tablemodel.rowCount() - 1: @@ -729,7 +743,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): if len(self.tableView.selectedIndexes()) == 0: self._tablemodel.insertRows(self._tablemodel.rowCount(), 1) else: - row = self.index_selected_row + row = self.index_selected_row() self._tablemodel.insertRows(row + 1, 1) if self.filename is not None: @@ -751,9 +765,12 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.graphic_2() self.changed_slider_value() - @property + def index_selected_row(self): - return self.tableView.selectedIndexes()[0].row() + return self.tableView\ + .selectionModel()\ + .selectedRows()[0]\ + .row() def sort_ascending(self): self._tablemodel.sort_profiles(True) @@ -761,7 +778,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.changed_slider_value() self.update_graphic_2() - self.update_graphic_3(self.index_selected_row) + self.update_graphic_3(self.index_selected_row()) def sort_descending(self): self._tablemodel.sort_profiles(False) @@ -770,10 +787,10 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.changed_slider_value() self.update_graphic_2() - self.update_graphic_3(self.index_selected_row) + self.update_graphic_3(self.index_selected_row()) def move_row_down(self): - row = self.index_selected_row + row = self.index_selected_row() if row < self._tablemodel.rowCount() - 1: self._tablemodel.moveRowDown(row) @@ -796,7 +813,7 @@ class GeometryWindow(QMainWindow, WindowToolKit): self.update_graphic_2() def move_row_up(self): - row = self.index_selected_row + row = self.index_selected_row() if 0 < row <= self._tablemodel.rowCount() - 1: self._tablemodel.moveRowUp(row) diff --git a/src/View/Main/ConfigureWindow.py b/src/View/Main/ConfigureWindow.py index 1632fff305db60e78a6ccd323f92e6c44e8362c3..4988863b68b18690af531d02ec7f39ad9dbc5bea 100644 --- a/src/View/Main/ConfigureWindow.py +++ b/src/View/Main/ConfigureWindow.py @@ -159,8 +159,8 @@ class ConfigureWindow(ASubWindow, ListedSubWindow): self.close() def edit_solver(self): - indices = self.find(QTableView, "tableView_solver").selectionModel().selectedRows() - for index in indices: + indexes = self.find(QTableView, "tableView_solver").selectionModel().selectedRows() + for index in indexes: self.edit_solver = ConfigureAddSolverWindow( data=self.solver_table_model.rows[index.row()], parent=self