restructure meshing

setup.py
Theophile Terraz 2024-05-14 11:55:38 +02:00
parent 9d0168a9ee
commit 9e79178d0f
6 changed files with 200 additions and 123 deletions

View File

@ -297,7 +297,8 @@ class MeshingWithMageMailleurTT(AMeshingTool):
directrices=['un', 'np'], directrices=['un', 'np'],
lplan: bool = False, lplan: bool = False,
lm: int = 3, lm: int = 3,
linear: bool = False): linear: bool = False,
origin_value = 0.0):
if reach is None or len(reach.profiles) == 0: if reach is None or len(reach.profiles) == 0:
return reach return reach
@ -320,11 +321,12 @@ class MeshingWithMageMailleurTT(AMeshingTool):
logger.info( logger.info(
f"! {self._exe_path()} " + f"! {self._exe_path()} " +
f"{st_file} {m_file} " + f"{st_file} {m_file} " +
f"mesh " +
f"{str(step)} " + f"{str(step)} " +
f"{limites[0]} {limites[1]} " + f"{limites[0]} {limites[1]} " +
f"{directrices[0]} {directrices[1]} " + f"{directrices[0]} {directrices[1]} " +
f"{lplan} {lm} {linear} " + f"{lplan} {lm} {linear} " +
f"mesh {origin}" f"{origin} "
) )
proc.start( proc.start(
self._exe_path(), self._exe_path(),
@ -332,11 +334,86 @@ class MeshingWithMageMailleurTT(AMeshingTool):
map( map(
str, str,
[ [
st_file, m_file, step, st_file, m_file,
"mesh", step,
limites[0], limites[1], limites[0], limites[1],
directrices[0], directrices[1], directrices[0], directrices[1],
lplan, lm, linear, lplan, lm, linear, origin, origin_value
"mesh", origin ]
)
)
)
proc.waitForFinished()
if proc.exitCode() != 0:
logger.error(
f"{logger_color_red()}" +
f"MailleurTT error: {proc.exitCode()}" +
f"{logger_color_reset()}"
)
outputs = proc.readAllStandardOutput()
logger.debug(outputs)
errors = proc.readAllStandardError()
logger.error(
f"{logger_color_red()}{errors}{logger_color_reset()}"
)
return reach
self.import_m_file(reach, m_file)
return reach
def update_kp(self, reach,
step: float = 50,
limites=[-1, -1],
origin=0,
directrices=['un', 'np'],
lplan: bool = False,
lm: int = 3,
linear: bool = False,
origin_value = 0.0):
if reach is None or len(reach.profiles) == 0:
return reach
with tempfile.TemporaryDirectory() as tmp:
logger.debug(f"temp file: {tmp}")
st_file = self.export_reach_to_st(reach, tmp)
m_file = st_file.rsplit(".ST", 1)[0] + ".M"
os.sync()
proc = QProcess()
proc.setWorkingDirectory(tmp)
# Mage section indices start at 1
origin += 1
limites[0] += 1
limites[1] += 1
lplan = 1 if lplan else 0
linear = 1 if linear else 0
logger.info(
f"! {self._exe_path()} " +
f"{st_file} {m_file} " +
f"update_kp " +
f"{str(step)} " +
f"{limites[0]} {limites[1]} " +
f"{directrices[0]} {directrices[1]} " +
f"{lplan} {lm} {linear} " +
f"{origin} "
)
proc.start(
self._exe_path(),
list(
map(
str,
[
st_file, m_file,
"update_kp", step,
limites[0], limites[1],
directrices[0], directrices[1],
lplan, lm, linear, origin, origin_value
] ]
) )
) )

View File

@ -68,17 +68,6 @@ class MeshingDialog(PamhyrDialog):
self._space_step self._space_step
) )
lm_dict = self._trad.get_dict("lm_dict")
self.combobox_add_items(
"comboBox_lm", list(
map(
lambda x: lm_dict[x],
["1", "2", "3"]
)
)
)
self.set_combobox_text("comboBox_lm", lm_dict[self._lm])
if self._linear: if self._linear:
self.set_radio_button("radioButton_linear", True) self.set_radio_button("radioButton_linear", True)
else: else:
@ -89,7 +78,6 @@ class MeshingDialog(PamhyrDialog):
self.combobox_add_items("comboBox_begin_kp", profiles) self.combobox_add_items("comboBox_begin_kp", profiles)
self.combobox_add_items("comboBox_end_kp", profiles) self.combobox_add_items("comboBox_end_kp", profiles)
self.combobox_add_items("comboBox_origin", profiles)
self.set_combobox_text("comboBox_begin_kp", profiles[0]) self.set_combobox_text("comboBox_begin_kp", profiles[0])
self.set_combobox_text("comboBox_end_kp", profiles[-1]) self.set_combobox_text("comboBox_end_kp", profiles[-1])
@ -120,8 +108,8 @@ class MeshingDialog(PamhyrDialog):
gl, _ = self._reach.compute_guidelines() gl, _ = self._reach.compute_guidelines()
gl = list(gl) gl = list(gl)
bgl = ['un'] + gl bgl = ['un'] + gl + ['np']
egl = gl + ['np'] egl = ['un'] + gl + ['np']
self.combobox_add_items("comboBox_begin_gl", bgl) self.combobox_add_items("comboBox_begin_gl", bgl)
self.combobox_add_items("comboBox_end_gl", egl) self.combobox_add_items("comboBox_end_gl", egl)

View File

@ -240,7 +240,19 @@ class GeometryReachTableModel(PamhyrTableModel):
self._undo.push( self._undo.push(
MeshingCommand( MeshingCommand(
self._data, mesher, data self._data, mesher, data, "mesh"
)
)
self.layoutAboutToBeChanged.emit()
self.layoutChanged.emit()
def update_kp(self, mesher, data):
self.layoutAboutToBeChanged.emit()
self._undo.push(
MeshingCommand(
self._data, mesher, data, "update_kp"
) )
) )

View File

@ -222,12 +222,13 @@ class ImportCommand(QUndoCommand):
class MeshingCommand(QUndoCommand): class MeshingCommand(QUndoCommand):
def __init__(self, reach, mesher, data): def __init__(self, reach, mesher, data, command):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._reach = reach self._reach = reach
self._data = data self._data = data
self._mesher = mesher self._mesher = mesher
self._command = command
self._profiles = reach.profiles.copy() self._profiles = reach.profiles.copy()
self._profiles.reverse() self._profiles.reverse()
@ -242,10 +243,16 @@ class MeshingCommand(QUndoCommand):
def redo(self): def redo(self):
if self._new_profiles is None: if self._new_profiles is None:
self._mesher.meshing( if self._command == "update_kp":
self._reach, self._mesher.update_kp(
**self._data self._reach,
) **self._data
)
else:
self._mesher.meshing(
self._reach,
**self._data
)
self._new_profiles = self._reach.profiles.copy() self._new_profiles = self._reach.profiles.copy()
self._new_profiles.reverse() self._new_profiles.reverse()

View File

@ -56,6 +56,7 @@ from View.Geometry.PlotXY import PlotXY
from View.Geometry.PlotAC import PlotAC from View.Geometry.PlotAC import PlotAC
from View.Geometry.PlotKPZ import PlotKPZ from View.Geometry.PlotKPZ import PlotKPZ
from View.Geometry.MeshingDialog import MeshingDialog from View.Geometry.MeshingDialog import MeshingDialog
from View.Geometry.UpdateKPDialog import UpdateKPDialog
from View.Geometry.Translate import GeometryTranslate from View.Geometry.Translate import GeometryTranslate
from View.Geometry.Profile.Window import ProfileWindow from View.Geometry.Profile.Window import ProfileWindow
@ -321,10 +322,36 @@ class GeometryWindow(PamhyrWindow):
src_except=e src_except=e
) )
pyqtSlot(bool) def update_kp(self):
try:
dlg = UpdateKPDialog(
reach=self._reach,
trad=self._trad,
parent=self
)
if dlg.exec():
data = {
"origin": dlg.origin,
"directrices": [dlg.begin_dir, dlg.end_dir],
"origin_value": dlg.origin_value,
}
self._update_kp(data)
except Exception as e:
logger_exception(e)
return
def changed_profile_slot(self, status): def _update_kp(self, data):
self.update_view1 = status try:
mesher = MeshingWithMageMailleurTT()
self._table.update_kp(mesher, data)
except Exception as e:
logger_exception(e)
raise ExternFileMissingError(
module="mage",
filename="MailleurTT",
path=MeshingWithMageMailleurTT._path(),
src_except=e
)
def plot_xy(self): def plot_xy(self):
self.tableView.model().blockSignals(True) self.tableView.model().blockSignals(True)
@ -509,9 +536,6 @@ class GeometryWindow(PamhyrWindow):
self._table.move_down(row) self._table.move_down(row)
self.select_current_profile() self.select_current_profile()
def update_kp(self):
pass
def purge(self): def purge(self):
self._table.purge() self._table.purge()
self.update_redraw() self.update_redraw()

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>608</width> <width>520</width>
<height>342</height> <height>341</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -108,78 +108,23 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Limits</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>First cross section</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_begin_kp">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Last cross section</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_end_kp">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QGroupBox" name="groupBox_3"> <widget class="QGroupBox" name="groupBox_3">
<property name="title"> <property name="title">
<string>Distance computation</string> <string>Distance computation</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_6">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text"> <property name="text">
<string>Original section</string> <string>Second guide-line</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="0">
<widget class="QComboBox" name="comboBox_origin"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
@ -190,45 +135,69 @@
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QComboBox" name="comboBox_begin_gl">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_6">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Second guide-line</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QComboBox" name="comboBox_end_gl"> <widget class="QComboBox" name="comboBox_end_gl">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="0" column="1">
<widget class="QLabel" name="label_4"> <widget class="QComboBox" name="comboBox_begin_gl">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="text">
<string>Takes</string>
</property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> </layout>
<widget class="QComboBox" name="comboBox_lm"> </widget>
<property name="enabled"> </item>
<bool>true</bool> <item row="0" column="0">
</property> <widget class="QGroupBox" name="groupBox">
</widget> <property name="title">
<string>Limits</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>First cross section</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_begin_kp">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="enabled">
<bool>true</bool>
</property>
<property name="text">
<string>Last cross section</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_end_kp">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>