smesh/src/Tools/blocFissure/ihm/fissureGenerale_plugin.py

400 lines
15 KiB
Python
Raw Normal View History

2016-02-12 23:21:05 +01:00
# -*- coding: utf-8 -*-
2021-03-23 17:44:27 +03:00
# Copyright (C) 2006-2021 EDF R&D
2016-02-12 23:21:05 +01:00
#
# 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
2016-03-18 20:10:20 +03:00
# version 2.1 of the License, or (at your option) any later version.
2016-02-12 23:21:05 +01:00
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
2021-01-28 11:34:20 +01:00
"""Pilotage de la fenêtre de dialogue"""
2016-02-12 23:21:05 +01:00
# 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
2021-01-28 11:34:20 +01:00
import sys
import traceback
2016-02-12 23:21:05 +01:00
from blocFissure import gmu
def fissureGeneraleDlg(context):
2021-01-28 11:34:20 +01:00
"""get context study, salomeGui"""
2016-02-12 23:21:05 +01:00
study = context.study
sg = context.sg
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
import os
#import subprocess
#import tempfile
2016-10-21 14:47:37 +02:00
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
2016-10-21 14:47:37 +02:00
class fissureGeneraleDialog(QtWidgets.QDialog):
2021-01-28 11:34:20 +01:00
"""classe du dialogue"""
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def __init__(self):
2017-03-20 13:27:30 +01:00
print("__init__")
2016-10-21 14:47:37 +02:00
QtWidgets.QDialog.__init__(self)
2016-02-12 23:21:05 +01:00
# Set up the user interface from Designer.
self.ui = Ui_Dialog()
self.ui.setupUi(self)
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
self.blackPalette = self.ui.dsb_influence.palette()
self.redPalette = QPalette()
self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
self.NOK = False
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
self.initDefaut()
self.initDialog(self.defaut)
self.ui.lb_calcul.hide()
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
# Connect up the buttons.
2016-10-21 14:47:37 +02:00
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)
2016-02-12 23:21:05 +01:00
def initDefaut(self):
self.defaut = dict( \
2021-01-22 18:31:51 +01:00
nomCas = "angleCube", \
maillageSain = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med"), \
2021-01-28 11:34:20 +01:00
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, \
2021-01-22 18:31:51 +01:00
reptrav = os.curdir, \
nomres = "maillage_avec_fissure", \
verbosite = 0)
2016-02-12 23:21:05 +01:00
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def initDialog(self, dico):
self.ui.le_maillage.setText(dico['maillageSain'])
2021-01-28 11:34:20 +01:00
self.ui.le_facefiss.setText(dico['CAOFaceFissure'])
self.ui.le_fondfiss.setText(str(dico['edgeFiss']))
2016-02-12 23:21:05 +01:00
self.ui.dsb_influence.setValue(dico['lgInfluence'])
self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
self.ui.sb_couronnes.setValue(dico['nbSegRad'])
self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
2017-03-20 13:27:30 +01:00
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])
self.ui.cb_log.setCurrentIndex(dico['verbosite'])
2021-01-28 11:34:20 +01:00
#incomplet = self.testval(dico)
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def testval(self, dico):
incomplet = False
if not os.path.lexists(dico['maillageSain']):
self.ui.le_maillage.setPalette(self.redPalette)
incomplet = True
else:
self.ui.le_maillage.setPalette(self.blackPalette)
2021-01-28 11:34:20 +01:00
cao_file = dico['CAOFaceFissure']
if not os.path.lexists(cao_file):
2016-02-12 23:21:05 +01:00
self.ui.le_facefiss.setPalette(self.redPalette)
incomplet = True
else:
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)
2021-01-28 11:34:20 +01:00
if dico['edgeFiss']:
edgeFissOK=True
param_0 = dico['edgeFiss'][0]
type_param_id = type(param_0)
2021-01-28 11:34:20 +01:00
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)))
2016-02-12 23:21:05 +01:00
incomplet = True
2021-01-28 11:34:20 +01:00
edgeFissOK=False
if edgeFissOK:
if isinstance(param_0, int):
pass
elif isinstance(param_0, str):
pass
else:
2021-01-28 11:34:20 +01:00
print("Il faut une liste de noms de groupes d'arêtes ou une liste d'IDs d'arêtes.")
incomplet = True
2021-01-28 11:34:20 +01:00
edgeFissOK=False
else:
2016-02-12 23:21:05 +01:00
incomplet = True
2021-01-28 11:34:20 +01:00
edgeFissOK=False
if edgeFissOK:
2016-02-12 23:21:05 +01:00
self.ui.le_fondfiss.setPalette(self.blackPalette)
else:
self.ui.le_fondfiss.setPalette(self.redPalette)
if dico['meshBrep'][0] == 0:
self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
incomplet = True
else:
self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
if dico['meshBrep'][1] == 0:
self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
incomplet = True
else:
self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
if dico['rayonPipe'] == 0:
self.ui.dsb_rayonPipe.setPalette(self.redPalette)
incomplet = True
else:
self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
if dico['lenSegPipe'] == 0:
self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
incomplet = True
else:
self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
if dico['areteFaceFissure'] == 0:
self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
incomplet = True
else:
self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
2016-10-21 14:47:37 +02:00
2017-03-20 13:27:30 +01:00
print("incomplet: ", incomplet)
2016-02-12 23:21:05 +01:00
return incomplet
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def fileDefault(self):
2021-01-28 11:34:20 +01:00
filedef = os.path.expanduser( os.path.join(os.environ["HOME"], ".config", "salome", "dialogFissureGenerale.dic") )
2017-03-20 13:27:30 +01:00
print(filedef)
2016-02-12 23:21:05 +01:00
return filedef
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def writeDefault(self, dico):
filedef = self.fileDefault()
2021-01-28 11:34:20 +01:00
with open(filedef, 'w') as fichier:
fichier.write(str(dico))
2016-10-21 14:47:37 +02:00
2016-05-01 19:23:11 +02:00
def genereExemples(self):
2021-01-22 18:31:51 +01:00
maillageSain = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med")
2021-01-28 11:34:20 +01:00
CAOFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep")
if (os.path.exists(maillageSain) and os.path.exists(CAOFaceFissure )):
2016-05-01 19:23:11 +02:00
self.initDialog(self.defaut)
else:
2016-05-01 19:43:55 +02:00
self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
2016-05-01 19:23:11 +02:00
self.ui.lb_calcul.show()
from blocFissure.materielCasTests import genereMateriel
self.ui.lb_calcul.hide()
self.initDialog(self.defaut)
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def readValPrec(self):
filedef = self.fileDefault()
if os.path.exists(filedef):
2021-01-28 11:34:20 +01:00
with open(filedef, 'r') as fichier:
txt = fichier.read()
2016-02-12 23:21:05 +01:00
dico = eval(txt)
2017-03-20 13:27:30 +01:00
print(dico)
2016-02-12 23:21:05 +01:00
self.initDialog(dico)
def resetVal(self):
#self.initDefaut()
self.initDialog(self.defaut)
2016-10-21 14:47:37 +02:00
2016-02-26 21:05:40 +01:00
def setLogVerbosity(self, logfile):
from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
2017-03-20 13:27:30 +01:00
print("setLogVerbosity")
index = self.ui.cb_log.currentIndex()
2017-03-20 13:27:30 +01:00
print(index)
if index == 0:
2016-02-26 21:05:40 +01:00
initLog.setRelease(logfile)
elif index == 1:
2016-02-26 21:05:40 +01:00
initLog.setVerbose(logfile)
elif index == 2:
2016-02-26 21:05:40 +01:00
initLog.setDebug(logfile)
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def sauver(self):
2017-03-20 13:27:30 +01:00
print("sauver")
2016-02-12 23:21:05 +01:00
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.AnyFile)
fileDiag.setNameFilter("Parametres *.dic (*.dic)")
fileDiag.setViewMode(QFileDialog.List)
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
2017-03-20 13:27:30 +01:00
print(fileNames)
2016-02-12 23:21:05 +01:00
filedef = fileNames[0]
2016-05-01 19:23:11 +02:00
if filedef[-4:] not in ['.dic']:
filedef += '.dic'
2016-02-12 23:21:05 +01:00
dico = self.creeDico()
2021-01-28 11:34:20 +01:00
with open(filedef, 'w') as fichier:
fichier.write(str(dico))
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def recharger(self):
2017-03-20 13:27:30 +01:00
print("recharger")
2016-02-12 23:21:05 +01:00
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.ExistingFile)
fileDiag.setNameFilter("Parametres *.dic (*.dic)")
fileDiag.setViewMode(QFileDialog.Detail)
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
2017-03-20 13:27:30 +01:00
print(filedef)
2016-02-12 23:21:05 +01:00
if os.path.exists(filedef):
2021-01-28 11:34:20 +01:00
with open(filedef, 'r') as fichier:
txt = fichier.read()
2016-02-12 23:21:05 +01:00
dico = eval(txt)
2017-03-20 13:27:30 +01:00
print(dico)
2016-02-12 23:21:05 +01:00
self.initDialog(dico)
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def selectMaillage(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.ExistingFile)
fileDiag.setNameFilter("Maillage *.med (*.med)")
fileDiag.setViewMode(QFileDialog.Detail)
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
2017-03-20 13:27:30 +01:00
print(filedef)
2016-02-12 23:21:05 +01:00
self.ui.le_maillage.setText(filedef)
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def selectFacefiss(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.ExistingFile)
fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
fileDiag.setViewMode(QFileDialog.Detail)
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
filedef = fileNames[0]
2017-03-20 13:27:30 +01:00
print(filedef)
2016-02-12 23:21:05 +01:00
self.ui.le_facefiss.setText(filedef)
2016-10-21 14:47:37 +02:00
def selectReptrav(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.Directory)
fileDiag.setViewMode(QFileDialog.Detail)
fileDiag.setDirectory(self.ui.le_reptrav.text())
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
reptrav = str(fileNames[0])
2017-03-20 13:27:30 +01:00
print("reptrav ", reptrav)
self.ui.le_reptrav.setText(os.path.abspath(reptrav))
2016-10-21 14:47:37 +02:00
def selectNomres(self):
fileDiag = QFileDialog(self)
fileDiag.setFileMode(QFileDialog.AnyFile)
fileDiag.setViewMode(QFileDialog.Detail)
nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
fileDiag.setDirectory(self.ui.le_reptrav.text())
fileDiag.selectFile(nomres)
fileDiag.setNameFilter("Maillage *.med (*.med)")
self.ui.le_nomres.setText(nomres)
if fileDiag.exec_() :
fileNames = fileDiag.selectedFiles()
tempnom = os.path.split(str(fileNames[0]))[1]
2017-03-20 13:27:30 +01:00
print("nomres ", tempnom)
self.ui.le_nomres.setText(tempnom)
else:
self.ui.le_nomres.setText(nomres)
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def creeDico(self):
dico = dict( \
maillageSain = str(self.ui.le_maillage.text()), \
2021-01-28 11:34:20 +01:00
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() \
2016-02-12 23:21:05 +01:00
)
2017-03-20 13:27:30 +01:00
print(dico)
2016-02-12 23:21:05 +01:00
return dico
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
def checkValues(self):
return self.NOK
def execute(self):
2017-03-20 13:27:30 +01:00
print("execute")
2016-02-12 23:21:05 +01:00
dico = self.creeDico()
NOK = self.testval(dico)
if not(NOK):
self.writeDefault(dico)
2016-05-01 19:23:11 +02:00
self.ui.lb_calcul.setText("--- Calcul en cours ---")
2016-02-12 23:21:05 +01:00
self.ui.lb_calcul.show()
2016-02-26 21:05:40 +01:00
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
from blocFissure.gmu.fissError import fissError
try:
execInstance = casStandard(dico)
except fissError as erreur:
2017-03-20 13:27:30 +01:00
print('-'*60)
print(type(erreur))
print('-'*60)
print(erreur.msg)
print('-'*60)
for ligne in erreur.pile:
2017-03-20 13:27:30 +01:00
print(repr(ligne))
print('-'*60)
texte = erreur.msg
# texte += +"<br>" +'-'*60 +"<br>"
# for ligne in erreur.pile:
# texte += repr(ligne) +"<br>"
mbox = QMessageBox(self)
mbox.setWindowTitle("erreur blocFissure")
2016-10-21 14:47:37 +02:00
mbox.setText(str(texte))
mbox.exec_()
# except Exception as erreur:
# print "exception non répertoriée"
2016-02-12 23:21:05 +01:00
self.NOK = NOK
2016-05-01 19:23:11 +02:00
self.ui.lb_calcul.hide()
#self.accept()
2016-10-21 14:47:37 +02:00
2016-02-12 23:21:05 +01:00
# ----------------------------------------------------------------------------
2016-10-21 14:47:37 +02:00
2017-03-20 13:27:30 +01:00
print("main")
2016-02-12 23:21:05 +01:00
window = fissureGeneraleDialog()
retry = True
while(retry):
retry = False
window.exec_()
result = window.result()
if result:
# dialog accepted
2017-03-20 13:27:30 +01:00
print("dialog accepted, check")
2016-02-12 23:21:05 +01:00
retry = window.checkValues()
else:
2017-03-20 13:27:30 +01:00
print("dialog rejected, exit")