X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FTools%2FblocFissure%2Fihm%2FfissureGenerale_plugin.py;h=a9597154a4aa01414eda473f24c2aef17fc32d69;hb=499f29d24922cec66e41b41a0039a954993bc6df;hp=c8c495abe7b554a216000e7f5beb83fa516c1501;hpb=a7e3aa2650e5bb26454aa314fa11e658fd49e6e1;p=modules%2Fsmesh.git
diff --git a/src/Tools/blocFissure/ihm/fissureGenerale_plugin.py b/src/Tools/blocFissure/ihm/fissureGenerale_plugin.py
index c8c495abe..a9597154a 100644
--- a/src/Tools/blocFissure/ihm/fissureGenerale_plugin.py
+++ b/src/Tools/blocFissure/ihm/fissureGenerale_plugin.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
-# Copyright (C) 2006-2015 EDF R&D
+# Copyright (C) 2006-2022 EDF R&D
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -19,90 +19,87 @@
# 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, studyId, salomeGui
+ """get context study, salomeGui"""
study = context.study
- studyId = context.studyId
sg = context.sg
-
+
import os
#import subprocess
#import tempfile
- from PyQt4 import QtCore
- from PyQt4 import QtGui
- from PyQt4.QtGui import QFileDialog
- from PyQt4.QtGui import QMessageBox
- from PyQt4.QtGui import QPalette
- from PyQt4.QtGui import QColor
- from fissureGenerale_ui import Ui_Dialog
-
- class fissureGeneraleDialog(QtGui.QDialog):
-
+ from PyQt5 import QtCore
+ from PyQt5 import QtWidgets
+ from PyQt5 import QtGui
+ from PyQt5.QtWidgets import QFileDialog
+ from PyQt5.QtWidgets import QMessageBox
+ from PyQt5.QtGui import QPalette
+ from PyQt5.QtGui import QColor
+ from blocFissure.ihm.fissureGenerale_ui import Ui_Dialog
+
+ class fissureGeneraleDialog(QtWidgets.QDialog):
+ """classe du dialogue"""
+
def __init__(self):
- print "__init__"
- QtGui.QDialog.__init__(self)
+ print("__init__")
+ QtWidgets.QDialog.__init__(self)
# Set up the user interface from Designer.
self.ui = Ui_Dialog()
self.ui.setupUi(self)
-
+
self.blackPalette = self.ui.dsb_influence.palette()
self.redPalette = QPalette()
self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
self.NOK = False
-
+
self.initDefaut()
self.initDialog(self.defaut)
self.ui.lb_calcul.hide()
-
+
# Connect up the buttons.
- self.connect(self.ui.pb_valPrec, QtCore.SIGNAL("clicked()"),
- self.readValPrec)
- self.connect(self.ui.pb_reset, QtCore.SIGNAL("clicked()"),
- self.resetVal)
- self.connect(self.ui.pb_recharger, QtCore.SIGNAL("clicked()"),
- self.recharger)
- self.connect(self.ui.pb_sauver, QtCore.SIGNAL("clicked()"),
- self.sauver)
- self.connect(self.ui.pb_maillage, QtCore.SIGNAL("clicked()"),
- self.selectMaillage)
- self.connect(self.ui.pb_facefiss, QtCore.SIGNAL("clicked()"),
- self.selectFacefiss)
- self.connect(self.ui.pb_reptrav, QtCore.SIGNAL("clicked()"),
- self.selectReptrav)
- self.connect(self.ui.pb_nomres, QtCore.SIGNAL("clicked()"),
- self.selectNomres)
- self.disconnect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"), self.accept)
- self.connect(self.ui.bb_OkCancel, QtCore.SIGNAL("accepted()"),
- self.execute)
-
+
+ self.ui.pb_exemple.clicked.connect(self.genereExemples)
+ self.ui.pb_valPrec.clicked.connect(self.readValPrec)
+ self.ui.pb_reset.clicked.connect(self.resetVal)
+ self.ui.pb_recharger.clicked.connect(self.recharger)
+ self.ui.pb_sauver.clicked.connect(self.sauver)
+ self.ui.pb_maillage.clicked.connect(self.selectMaillage)
+ self.ui.pb_facefiss.clicked.connect(self.selectFacefiss)
+ self.ui.pb_reptrav.clicked.connect(self.selectReptrav)
+ self.ui.bb_OkCancel.accepted.disconnect(self.accept)
+ self.ui.bb_OkCancel.accepted.connect(self.execute)
+
def initDefaut(self):
- self.defaut = dict(
- nomCas = 'angleCube',
- maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
- brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
- edgeFissIds = [4],
- lgInfluence = 20,
- meshBrep = (5,10),
- rayonPipe = 5,
- lenSegPipe = 2.5,
- nbSegRad = 5,
- nbSegCercle = 32,
- areteFaceFissure = 10,
- reptrav = '.',
- nomres = 'casStandard_fissure.med')
-
-
+ self.defaut = dict( \
+ nomCas = "angleCube", \
+ maillageSain = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med"), \
+ CAOFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep"), \
+ edgeFiss = [3], \
+ lgInfluence = 20, \
+ meshBrep = (5,10), \
+ rayonPipe = 5, \
+ lenSegPipe = 2.5, \
+ nbSegRad = 5, \
+ nbSegCercle = 32, \
+ areteFaceFissure = 10, \
+ areteVives = 0, \
+ reptrav = os.curdir, \
+ nomres = "maillage_avec_fissure", \
+ verbosite = 0)
+
+
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])
@@ -111,11 +108,15 @@ def fissureGeneraleDlg(context):
self.ui.sb_couronnes.setValue(dico['nbSegRad'])
self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
+ if 'aretesVives' in dico:
+ self.ui.dsb_aretesVives.setValue(dico['aretesVives'])
+ else:
+ self.ui.dsb_aretesVives.setValue(0)
self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
- incomplet = self.testval(dico)
- pass
-
+ self.ui.cb_log.setCurrentIndex(dico['verbosite'])
+ #incomplet = self.testval(dico)
+
def testval(self, dico):
incomplet = False
if not os.path.lexists(dico['maillageSain']):
@@ -123,25 +124,40 @@ def fissureGeneraleDlg(context):
incomplet = True
else:
self.ui.le_maillage.setPalette(self.blackPalette)
- if not os.path.lexists(dico['brepFaceFissure']):
+ cao_file = dico['CAOFaceFissure']
+ if not os.path.lexists(cao_file):
self.ui.le_facefiss.setPalette(self.redPalette)
incomplet = True
else:
- self.ui.le_facefiss.setPalette(self.blackPalette)
- edgeFissIdsOK=True
- try:
- l = dico['edgeFissIds']
- for i in l:
- if not isinstance(i, int):
- print"not isinstance(i, int)"
+ suffix = os.path.basename(cao_file).split(".")[-1]
+ if ( suffix.upper() not in ("BREP","XAO") ):
+ print ("Suffixe inconnu pour le fichier {}".format(cao_file))
+ self.ui.le_facefiss.setPalette(self.redPalette)
+ incomplet = True
+ else:
+ self.ui.le_facefiss.setPalette(self.blackPalette)
+ if dico['edgeFiss']:
+ edgeFissOK=True
+ param_0 = dico['edgeFiss'][0]
+ type_param_id = type(param_0)
+ 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
- break
- except:
- print "except eval"
+ edgeFissOK=False
+ if edgeFissOK:
+ if isinstance(param_0, int):
+ pass
+ elif isinstance(param_0, str):
+ pass
+ else:
+ print("Il faut une liste de noms de groupes d'arêtes ou une liste d'IDs d'arêtes.")
+ incomplet = True
+ 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)
@@ -170,63 +186,75 @@ def fissureGeneraleDlg(context):
incomplet = True
else:
self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
-
- print "incomplet: ", incomplet
+
+ print("incomplet: ", incomplet)
return incomplet
-
+
def fileDefault(self):
- filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
- print filedef
+ 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()
- f = open(filedef, 'w')
- f.write(str(dico))
- f.close()
-
+ with open(filedef, 'w') as fichier:
+ fichier.write(str(dico))
+
+ def genereExemples(self):
+ maillageSain = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med")
+ 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 ---")
+ self.ui.lb_calcul.show()
+ from blocFissure.materielCasTests import genereMateriel
+ self.ui.lb_calcul.hide()
+ self.initDialog(self.defaut)
+
def readValPrec(self):
filedef = self.fileDefault()
if os.path.exists(filedef):
- f = open(filedef, 'r')
- txt = f.read()
+ with open(filedef, 'r') as fichier:
+ txt = fichier.read()
dico = eval(txt)
- print dico
+ print(dico)
self.initDialog(dico)
def resetVal(self):
#self.initDefaut()
self.initDialog(self.defaut)
-
- def setLogVerbosity(self):
+
+ def setLogVerbosity(self, logfile):
from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
- print "setLogVerbosity"
+ print("setLogVerbosity")
index = self.ui.cb_log.currentIndex()
- print index
+ print(index)
if index == 0:
- initLog.setRelease()
+ initLog.setRelease(logfile)
elif index == 1:
- initLog.setVerbose()
+ initLog.setVerbose(logfile)
elif index == 2:
- initLog.setDebug()
-
-
+ initLog.setDebug(logfile)
+
def sauver(self):
- print "sauver"
+ print("sauver")
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.AnyFile)
fileDiag.setNameFilter("Parametres *.dic (*.dic)")
fileDiag.setViewMode(QFileDialog.List)
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
+ print(fileNames)
filedef = fileNames[0]
+ if filedef[-4:] not in ['.dic']:
+ filedef += '.dic'
dico = self.creeDico()
- f = open(filedef, 'w')
- f.write(str(dico))
- f.close()
-
+ with open(filedef, 'w') as fichier:
+ fichier.write(str(dico))
+
def recharger(self):
- print "recharger"
+ print("recharger")
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.ExistingFile)
fileDiag.setNameFilter("Parametres *.dic (*.dic)")
@@ -234,14 +262,14 @@ def fissureGeneraleDlg(context):
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
- print filedef
+ print(filedef)
if os.path.exists(filedef):
- f = open(filedef, 'r')
- txt = f.read()
+ with open(filedef, 'r') as fichier:
+ txt = fichier.read()
dico = eval(txt)
- print dico
+ print(dico)
self.initDialog(dico)
-
+
def selectMaillage(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.ExistingFile)
@@ -250,9 +278,9 @@ def fissureGeneraleDlg(context):
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
- print filedef
+ print(filedef)
self.ui.le_maillage.setText(filedef)
-
+
def selectFacefiss(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.ExistingFile)
@@ -261,9 +289,9 @@ def fissureGeneraleDlg(context):
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
- print filedef
+ print(filedef)
self.ui.le_facefiss.setText(filedef)
-
+
def selectReptrav(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.Directory)
@@ -272,10 +300,10 @@ def fissureGeneraleDlg(context):
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
reptrav = str(fileNames[0])
- print "reptrav ", reptrav
+ print("reptrav ", reptrav)
self.ui.le_reptrav.setText(os.path.abspath(reptrav))
-
-
+
+
def selectNomres(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.AnyFile)
@@ -288,51 +316,75 @@ def fissureGeneraleDlg(context):
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
tempnom = os.path.split(str(fileNames[0]))[1]
- print "nomres ", tempnom
+ print("nomres ", tempnom)
self.ui.le_nomres.setText(tempnom)
else:
self.ui.le_nomres.setText(nomres)
-
+
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())),
- lgInfluence = self.ui.dsb_influence.value(),
- meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
- rayonPipe = self.ui.dsb_rayonPipe.value(),
- lenSegPipe = self.ui.dsb_lenSegPipe.value(),
- nbSegRad = self.ui.sb_couronnes.value(),
- nbSegCercle = self.ui.sb_secteurs.value(),
- areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
- reptrav = str(self.ui.le_reptrav.text()),
- nomres = str(self.ui.le_nomres.text()),
+ dico = dict( \
+ maillageSain = str(self.ui.le_maillage.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(), \
+ lenSegPipe = self.ui.dsb_lenSegPipe.value(), \
+ nbSegRad = self.ui.sb_couronnes.value(), \
+ nbSegCercle = self.ui.sb_secteurs.value(), \
+ areteFaceFissure = self.ui.dsb_areteFaceFissure.value(), \
+ aretesVives = self.ui.dsb_aretesVives.value(), \
+ reptrav = str(self.ui.le_reptrav.text()), \
+ nomres = str(self.ui.le_nomres.text()), \
+ verbosite = self.ui.cb_log.currentIndex() \
)
- print dico
+ print(dico)
return dico
-
+
def checkValues(self):
return self.NOK
def execute(self):
- print "execute"
+ print("execute")
dico = self.creeDico()
NOK = self.testval(dico)
if not(NOK):
self.writeDefault(dico)
+ self.ui.lb_calcul.setText("--- Calcul en cours ---")
self.ui.lb_calcul.show()
- self.setLogVerbosity()
+ logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
+ self.setLogVerbosity(logfile)
from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
- execInstance = casStandard(dico)
+ from blocFissure.gmu.fissError import fissError
+ try:
+ execInstance = casStandard(dico)
+ except fissError as erreur:
+ print('-'*60)
+ print(type(erreur))
+ print('-'*60)
+ print(erreur.msg)
+ print('-'*60)
+ for ligne in erreur.pile:
+ print(repr(ligne))
+ print('-'*60)
+ texte = erreur.msg
+# texte += +"
" +'-'*60 +"
"
+# for ligne in erreur.pile:
+# texte += repr(ligne) +"
"
+ mbox = QMessageBox(self)
+ mbox.setWindowTitle("erreur blocFissure")
+ mbox.setText(str(texte))
+ mbox.exec_()
+# except Exception as erreur:
+# print "exception non répertoriée"
self.NOK = NOK
- self.accept()
-
- pass
+ self.ui.lb_calcul.hide()
+ #self.accept()
# ----------------------------------------------------------------------------
-
- print "main"
+
+ print("main")
window = fissureGeneraleDialog()
retry = True
while(retry):
@@ -341,9 +393,7 @@ def fissureGeneraleDlg(context):
result = window.result()
if result:
# dialog accepted
- print "dialog accepted, check"
+ print("dialog accepted, check")
retry = window.checkValues()
else:
- print "dialog rejected, exit"
- pass
-
+ print("dialog rejected, exit")