debug mesh + update_rk (verry slow mesh)

This commit is contained in:
Theophile Terraz committed 2025-10-13 17:48:48 +02:00
1 parent 19045329dc
commit f16856d23b
8 files changed
+184 -122

No files matched your search

+4 -4
View File
@@ -250,12 +250,12 @@ class GeometryReachTableModel(PamhyrTableModel):
self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit()
def meshing(self, mesher, data):
def meshing(self, mesher, data, tableView):
self.layoutAboutToBeChanged.emit()
self._undo.push(
MeshingCommand(
self._data, mesher, data, "mesh"
self._data, mesher, data, tableView
)
)
@@ -266,8 +266,8 @@ class GeometryReachTableModel(PamhyrTableModel):
self.layoutAboutToBeChanged.emit()
self._undo.push(
MeshingCommand(
self._data, mesher, data, "update_rk"
UpdateRKCommand(
self._data, mesher, data
)
)
+91 -27
View File
@@ -22,8 +22,10 @@ from copy import deepcopy
from tools import trace, timer, logger_exception
from PyQt5.QtWidgets import (
QMessageBox, QUndoCommand, QUndoStack, QTableView
QMessageBox, QUndoCommand, QUndoStack, QTableView,
)
from PyQt5.QtCore import (QItemSelection, QItemSelectionRange,
QItemSelectionModel)
from Model.Geometry import Reach
from Model.Except import exception_message_box
@@ -227,47 +229,109 @@ class ImportCommand(QUndoCommand):
self._reach.insert_profile(self._row, profile)
class MeshingCommand(QUndoCommand):
def __init__(self, reach, mesher, data, command):
class UpdateRKCommand(QUndoCommand):
def __init__(self, reach, mesher, data):
QUndoCommand.__init__(self)
self._reach = reach
self._data = data
self._mesher = mesher
self._command = command
self._rks = reach.get_rk()
self._profiles = [p.copy() for p in reach.profiles]
self._profiles.reverse()
self._new_profiles = None
self._new_rks = None
def undo(self):
self._reach.purge()
for rk, profile in zip(self._rks, self._reach.profiles):
profile.rk = rk
for profile in self._profiles:
self._reach.insert_profile(0, profile)
def redo(self):
if self._new_rks is None:
self._new_rks = self._mesher.update_rk(
self._reach,
**self._data
)
for rk, profile in zip(self._new_rks, self._reach.profiles):
profile.rk = rk
class MeshingCommand(QUndoCommand):
def __init__(self, reach, mesher, data, tableView):
QUndoCommand.__init__(self)
self._reach = reach
self._data = data
self._limites = data["limites"]
self._mesher = mesher
self._new_profiles = None
self._new_profiles_indexes = None
self._tableView = tableView
self._indexes = tableView.selectionModel().selection()
rows = list(
set(
(i.row() for i in tableView.selectedIndexes())
)
)
self._selected_rk = [self._reach.profile(r).rk for r in rows]
self._new_indexes = None
def undo(self):
self._reach.hard_delete(self._new_profiles_indexes)
# Update selection
selection = self._tableView.selectionModel()
selection.select(
self._indexes,
QItemSelectionModel.Rows |
QItemSelectionModel.ClearAndSelect |
QItemSelectionModel.Select
)
def redo(self):
if self._new_profiles is None:
if self._command == "update_rk":
self._mesher.update_rk(
self._reach,
**self._data
)
else:
self._mesher.meshing(
self._reach,
**self._data
)
self._new_profiles = self._mesher.meshing(
self._reach,
**self._data
)
self._new_profiles = [p.copy() for p in self._reach.profiles]
self._new_profiles.reverse()
else:
self._reach.purge()
if self._new_profiles_indexes is None:
k = self._limites[0]
self._new_profiles_indexes = []
for i in range(self._limites[1] - self._limites[0]):
k += 1
for p in self._new_profiles[i]:
self._new_profiles_indexes.append(k)
k += 1
for profile in self._new_profiles:
self._reach.insert_profile(0, profile)
k = self._limites[0]
for i in range(self._limites[1] - self._limites[0]):
k += 1
for p in self._new_profiles[i]:
self._reach.insert_profile(k, p)
k += 1
# Update selection
if self._new_indexes is None:
ind = []
for i in range(self._reach.number_profiles):
if self._reach.profile(i).rk in self._selected_rk:
ind.append(i)
self._tableView.setFocus()
self._new_indexes = QItemSelection()
if len(ind) > 0:
for i in ind:
self._new_indexes.append(QItemSelectionRange(
self._tableView.model().index(i, 0)
))
selection = self._tableView.selectionModel()
selection.select(
self._new_indexes,
QItemSelectionModel.Rows |
QItemSelectionModel.ClearAndSelect |
QItemSelectionModel.Select
)
class PurgeCommand(QUndoCommand):
def __init__(self, reach, np_purge):
+13 -2
View File
@@ -64,8 +64,17 @@ class UpdateRKDialog(PamhyrDialog):
self._end_dir = self._gl[i]
self._orientation = 0
self._origin = self._reach.profile(0)
self._origin_value = self._reach.profile(0).rk
r = self.parent.tableView\
.selectionModel()\
.selectedRows()
if len(r) < 1:
self._origin = self._reach.profile(0)
self._origin_value = self._reach.profile(0).rk
self._origin_index = 0
else:
self._origin = self._reach.profile(r[0].row())
self._origin_value = self._reach.profile(r[0].row()).rk
self._origin_index = r[0].row()
self._init_default_values_profiles()
self._init_default_values_guidelines()
@@ -80,6 +89,8 @@ class UpdateRKDialog(PamhyrDialog):
.connect(
self.changed_profile
)
self.find(QComboBox, "comboBox_origin")\
.setCurrentIndex(self._origin_index)
buttonbox = self.find(QButtonGroup, "buttonGroup_orientation")
+2 -21
View File
@@ -323,29 +323,10 @@ class GeometryWindow(PamhyrWindow):
logger_exception(e)
return
ind = []
for i in range(self._reach.number_profiles):
if self._reach.profile(i).rk in selected_rk:
ind.append(i)
self.tableView.setFocus()
selection = self.tableView.selectionModel()
index = QItemSelection()
if len(ind) > 0:
for i in ind:
index.append(QItemSelectionRange(
self.tableView.model().index(i, 0)
))
selection.select(
index,
QItemSelectionModel.Rows |
QItemSelectionModel.ClearAndSelect |
QItemSelectionModel.Select
)
def _edit_meshing(self, data):
try:
mesher = InternalMeshing()
self._table.meshing(mesher, data)
self._table.meshing(mesher, data, self.tableView)
except Exception as e:
logger_exception(e)
@@ -370,7 +351,7 @@ class GeometryWindow(PamhyrWindow):
def _update_rk(self, data):
try:
mesher = MeshingWithMageMailleurTT()
mesher = InternalMeshing()
self._table.update_rk(mesher, data)
except Exception as e:
logger_exception(e)