This commit is contained in:
GERALD NICOLAS 2021-01-28 11:34:20 +01:00
parent bb1db63155
commit 681c10775e
2 changed files with 45 additions and 47 deletions

View File

@ -7,20 +7,20 @@
<x>0</x>
<y>0</y>
<width>664</width>
<height>624</height>
<height>681</height>
</rect>
</property>
<property name="windowTitle">
<string>Insertion de fissure dans un maillage sain</string>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Insertion d'un maillage de fissure dans un maillage hexaédrique sain.&lt;/p&gt;&lt;p&gt;Le maillage sain est fourni sous forme de fichier med.&lt;/p&gt;&lt;p&gt;La face de fissure est décrite par une géométrie dans un fichier brep.&lt;/p&gt;&lt;p&gt;La ou les arêtes de fond de fissure sont données par leurs index dans la face de fissure du point de vue de GEOM.&lt;/p&gt;&lt;p&gt;La procédure identifie des mailles saines à enlever et à remailler, construit un maillage régulier rayonnant autour de la ligne de fond de fissure, reconstitue les faces externes en triangles, complète la zone à remailler en tétraèdres.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Insertion d'un maillage de fissure dans un maillage hexaédrique sain.&lt;/p&gt;&lt;p&gt;Le maillage sain est fourni sous forme de fichier med.&lt;/p&gt;&lt;p&gt;La face de fissure est décrite par une géométrie dans un fichier de cao au format xao ou brep.&lt;/p&gt;&lt;p&gt;Si le format xao est utilisé, le fond de la fissure est identifiable par les noms du ou des groupes d'arêtes créés sur ce fond.&lt;/p&gt;&lt;p&gt; Avec le format brep, le fond de fissure est donné par les index des arêtes du fond dans la face de fissure du point de vue de GEOM. Cela est également possible pour un format xao.&lt;/p&gt;&lt;p&gt;La procédure identifie des mailles saines à enlever et à remailler, construit un maillage régulier rayonnant autour de la ligne de fond de fissure, reconstitue les faces externes en triangles, complète la zone à remailler en tétraèdres.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Maillage sain et géometries de fissure</string>
<string>Maillage sain et géométries de fissure</string>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="1" column="0">
@ -28,14 +28,14 @@
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Index arêtes fond de fissure</string>
<string>Arêtes fond de fissure</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="le_fondfiss">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Index des arêtes décrivant le fond de fissure, dans la face de fissure.&lt;/p&gt;&lt;p&gt;Sous forme d'une liste Python.&lt;/p&gt;&lt;p&gt;Exemples : &lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[5,9]&lt;/span&gt; ou&lt;span style=&quot; font-weight:600;&quot;/&gt;&lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[3]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(On peut récupérer ces valeurs à l'aide du dialogue de création de groupes d'edges, dans GEOM)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Liste des noms des groupes d'arêtes formant le fond de la fissure.&lt;/p&gt;&lt;p&gt;Exemples : &lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;["F_1", "F_2"]&lt;/span&gt; ou&lt;span style=&quot; font-weight:600;&quot;/&gt;&lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;["Fond"]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Ou liste des index des arêtes décrivant le fond de fissure dans la face de fissure.&lt;/p&gt;&lt;p&gt;Exemples : &lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[5,9]&lt;/span&gt; ou&lt;span style=&quot; font-weight:600;&quot;/&gt;&lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[3]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(On peut récupérer ces valeurs à l'aide du dialogue de création de groupes d'edges, dans GEOM)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@ -66,7 +66,7 @@
<item row="1" column="0">
<widget class="QPushButton" name="pb_facefiss">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;sélection du fichier brep (géométrie) décrivant la face de fissure.&lt;/p&gt;&lt;p&gt;Un champ rouge correspond à un fichier inexistant.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;sélection du fichier cao (format xao ou brep) décrivant la face de fissure.&lt;/p&gt;&lt;p&gt;Un champ rouge correspond à un fichier inexistant.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Face fissure</string>
@ -76,7 +76,7 @@
<item row="1" column="1">
<widget class="QLineEdit" name="le_facefiss">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Fichier brep de la géométrie décrivant la face de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Fichier cao de la géométrie décrivant la face de fissure (xao ou brep).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@ -110,7 +110,7 @@
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Distance influence</string>
<string>Distance d'influence</string>
</property>
</widget>
</item>
@ -209,7 +209,7 @@
<item>
<widget class="QLabel" name="label_10">
<property name="text">
<string>mode</string>
<string>Mode</string>
</property>
</widget>
</item>
@ -499,7 +499,7 @@
<item row="1" column="0">
<widget class="QPushButton" name="pb_nomres">
<property name="text">
<string>Nom résultat</string>
<string>Nom du résultat</string>
</property>
</widget>
</item>

View File

@ -19,15 +19,17 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""Pilotage de la fenêtre de dialogue"""
# if you already have plugins defined in a salome_plugins.py file, add this file at the end.
# if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
import sys, traceback
import math
import sys
import traceback
from blocFissure import gmu
def fissureGeneraleDlg(context):
# get context study, salomeGui
"""get context study, salomeGui"""
study = context.study
sg = context.sg
@ -44,6 +46,7 @@ def fissureGeneraleDlg(context):
from blocFissure.ihm.fissureGenerale_ui import Ui_Dialog
class fissureGeneraleDialog(QtWidgets.QDialog):
"""classe du dialogue"""
def __init__(self):
print("__init__")
@ -78,8 +81,8 @@ def fissureGeneraleDlg(context):
self.defaut = dict( \
nomCas = "angleCube", \
maillageSain = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med"), \
brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep"), \
edgeFissIds = [3], \
CAOFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep"), \
edgeFiss = [3], \
lgInfluence = 20, \
meshBrep = (5,10), \
rayonPipe = 5, \
@ -95,8 +98,8 @@ def fissureGeneraleDlg(context):
def initDialog(self, dico):
self.ui.le_maillage.setText(dico['maillageSain'])
self.ui.le_facefiss.setText(dico['brepFaceFissure'])
self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
self.ui.le_facefiss.setText(dico['CAOFaceFissure'])
self.ui.le_fondfiss.setText(str(dico['edgeFiss']))
self.ui.dsb_influence.setValue(dico['lgInfluence'])
self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
@ -112,8 +115,7 @@ def fissureGeneraleDlg(context):
self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
self.ui.cb_log.setCurrentIndex(dico['verbosite'])
incomplet = self.testval(dico)
pass
#incomplet = self.testval(dico)
def testval(self, dico):
incomplet = False
@ -122,7 +124,7 @@ def fissureGeneraleDlg(context):
incomplet = True
else:
self.ui.le_maillage.setPalette(self.blackPalette)
cao_file = dico['brepFaceFissure']
cao_file = dico['CAOFaceFissure']
if not os.path.lexists(cao_file):
self.ui.le_facefiss.setPalette(self.redPalette)
incomplet = True
@ -134,28 +136,28 @@ def fissureGeneraleDlg(context):
incomplet = True
else:
self.ui.le_facefiss.setPalette(self.blackPalette)
if dico['edgeFissIds']:
edgeFissIdsOK=True
param_0 = dico['edgeFissIds'][0]
if dico['edgeFiss']:
edgeFissOK=True
param_0 = dico['edgeFiss'][0]
type_param_id = type(param_0)
for param in dico['edgeFissIds'][1:]:
for param in dico['edgeFiss'][1:]:
if not isinstance(param,type_param_id):
print ("La donnée {} n'est pas du même type que la première de la liste : {}.".format(param,type(param)))
incomplet = True
edgeFissIdsOK=False
if edgeFissIdsOK:
edgeFissOK=False
if edgeFissOK:
if isinstance(param_0, int):
pass
elif isinstance(param_0, str):
pass
else:
print("Il faut une liste d'IDs d'arêtes ou une liste de noms de groupes d'arêtes.")
print("Il faut une liste de noms de groupes d'arêtes ou une liste d'IDs d'arêtes.")
incomplet = True
edgeFissIdsOK=False
edgeFissOK=False
else:
incomplet = True
edgeFissIdsOK=False
if edgeFissIdsOK:
edgeFissOK=False
if edgeFissOK:
self.ui.le_fondfiss.setPalette(self.blackPalette)
else:
self.ui.le_fondfiss.setPalette(self.redPalette)
@ -189,19 +191,19 @@ def fissureGeneraleDlg(context):
return incomplet
def fileDefault(self):
filedef = os.path.expanduser( os.path.join(os.environ["HOME"],".config", "salome", "dialogFissureGenerale.dic") )
filedef = os.path.expanduser( os.path.join(os.environ["HOME"], ".config", "salome", "dialogFissureGenerale.dic") )
print(filedef)
return filedef
def writeDefault(self, dico):
filedef = self.fileDefault()
with open(filedef, 'w') as f:
f.write(str(dico))
with open(filedef, 'w') as fichier:
fichier.write(str(dico))
def genereExemples(self):
maillageSain = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med")
brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep")
if (os.path.exists(maillageSain) and os.path.exists(brepFaceFissure)):
CAOFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep")
if (os.path.exists(maillageSain) and os.path.exists(CAOFaceFissure )):
self.initDialog(self.defaut)
else:
self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
@ -213,8 +215,8 @@ def fissureGeneraleDlg(context):
def readValPrec(self):
filedef = self.fileDefault()
if os.path.exists(filedef):
with open(filedef, 'r') as f:
txt = f.read()
with open(filedef, 'r') as fichier:
txt = fichier.read()
dico = eval(txt)
print(dico)
self.initDialog(dico)
@ -235,7 +237,6 @@ def fissureGeneraleDlg(context):
elif index == 2:
initLog.setDebug(logfile)
def sauver(self):
print("sauver")
fileDiag = QFileDialog(self)
@ -249,8 +250,8 @@ def fissureGeneraleDlg(context):
if filedef[-4:] not in ['.dic']:
filedef += '.dic'
dico = self.creeDico()
with open(filedef, 'w') as f:
f.write(str(dico))
with open(filedef, 'w') as fichier:
fichier.write(str(dico))
def recharger(self):
print("recharger")
@ -263,8 +264,8 @@ def fissureGeneraleDlg(context):
filedef = fileNames[0]
print(filedef)
if os.path.exists(filedef):
with open(filedef, 'r') as f:
txt = f.read()
with open(filedef, 'r') as fichier:
txt = fichier.read()
dico = eval(txt)
print(dico)
self.initDialog(dico)
@ -323,8 +324,8 @@ def fissureGeneraleDlg(context):
def creeDico(self):
dico = dict( \
maillageSain = str(self.ui.le_maillage.text()), \
brepFaceFissure = str(self.ui.le_facefiss.text()), \
edgeFissIds = eval(str(self.ui.le_fondfiss.text())), \
CAOFaceFissure = str(self.ui.le_facefiss.text()), \
edgeFiss = eval(str(self.ui.le_fondfiss.text())), \
lgInfluence = self.ui.dsb_influence.value(), \
meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()], \
rayonPipe = self.ui.dsb_rayonPipe.value(), \
@ -381,8 +382,6 @@ def fissureGeneraleDlg(context):
self.ui.lb_calcul.hide()
#self.accept()
pass
# ----------------------------------------------------------------------------
print("main")
@ -398,4 +397,3 @@ def fissureGeneraleDlg(context):
retry = window.checkValues()
else:
print("dialog rejected, exit")
pass