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

389 lines
14 KiB
Python
Raw Normal View History

2016-02-13 03:21:05 +05:00
# -*- coding: utf-8 -*-
2016-03-18 22:10:20 +05:00
# Copyright (C) 2006-2016 EDF R&D
2016-02-13 03:21:05 +05: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 22:10:20 +05:00
# version 2.1 of the License, or (at your option) any later version.
2016-02-13 03:21:05 +05: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
#
# 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
from blocFissure import gmu
def fissureGeneraleDlg(context):
# get context study, studyId, salomeGui
study = context.study
studyId = context.studyId
sg = context.sg
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
import os
#import subprocess
#import tempfile
2016-10-21 17:47:37 +05: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 17:47:37 +05:00
class fissureGeneraleDialog(QtWidgets.QDialog):
2016-02-13 03:21:05 +05:00
def __init__(self):
2017-03-20 17:27:30 +05:00
print("__init__")
2016-10-21 17:47:37 +05:00
QtWidgets.QDialog.__init__(self)
2016-02-13 03:21:05 +05:00
# Set up the user interface from Designer.
self.ui = Ui_Dialog()
self.ui.setupUi(self)
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05: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 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
self.initDefaut()
self.initDialog(self.defaut)
self.ui.lb_calcul.hide()
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
# Connect up the buttons.
2016-10-21 17:47:37 +05: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-13 03:21:05 +05:00
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,
areteVives = 0,
reptrav = '.',
nomres = 'casStandard_fissure.med',
verbosite = 0)
2016-02-13 03:21:05 +05:00
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
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.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 17:27:30 +05: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'])
2016-02-13 03:21:05 +05:00
incomplet = self.testval(dico)
pass
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05: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)
if not os.path.lexists(dico['brepFaceFissure']):
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):
2017-03-20 17:27:30 +05:00
print("not isinstance(i, int)")
2016-02-13 03:21:05 +05:00
incomplet = True
edgeFissIdsOK=False
break
except:
2017-03-20 17:27:30 +05:00
print("except eval")
2016-02-13 03:21:05 +05:00
incomplet = True
edgeFissIdsOK=False
if edgeFissIdsOK:
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 17:47:37 +05:00
2017-03-20 17:27:30 +05:00
print("incomplet: ", incomplet)
2016-02-13 03:21:05 +05:00
return incomplet
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
def fileDefault(self):
filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
2017-03-20 17:27:30 +05:00
print(filedef)
2016-02-13 03:21:05 +05:00
return filedef
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
def writeDefault(self, dico):
filedef = self.fileDefault()
with open(filedef, 'w') as f:
f.write(str(dico))
2016-10-21 17:47:37 +05:00
2016-05-01 22:23:11 +05:00
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)):
self.initDialog(self.defaut)
else:
2016-05-01 22:43:55 +05:00
self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
2016-05-01 22:23:11 +05:00
self.ui.lb_calcul.show()
from blocFissure.materielCasTests import genereMateriel
self.ui.lb_calcul.hide()
self.initDialog(self.defaut)
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
def readValPrec(self):
filedef = self.fileDefault()
if os.path.exists(filedef):
with open(filedef, 'r') as f:
txt = f.read()
2016-02-13 03:21:05 +05:00
dico = eval(txt)
2017-03-20 17:27:30 +05:00
print(dico)
2016-02-13 03:21:05 +05:00
self.initDialog(dico)
def resetVal(self):
#self.initDefaut()
self.initDialog(self.defaut)
2016-10-21 17:47:37 +05:00
2016-02-27 01:05:40 +05:00
def setLogVerbosity(self, logfile):
from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
2017-03-20 17:27:30 +05:00
print("setLogVerbosity")
index = self.ui.cb_log.currentIndex()
2017-03-20 17:27:30 +05:00
print(index)
if index == 0:
2016-02-27 01:05:40 +05:00
initLog.setRelease(logfile)
elif index == 1:
2016-02-27 01:05:40 +05:00
initLog.setVerbose(logfile)
elif index == 2:
2016-02-27 01:05:40 +05:00
initLog.setDebug(logfile)
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
def sauver(self):
2017-03-20 17:27:30 +05:00
print("sauver")
2016-02-13 03:21:05 +05: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 17:27:30 +05:00
print(fileNames)
2016-02-13 03:21:05 +05:00
filedef = fileNames[0]
2016-05-01 22:23:11 +05:00
if filedef[-4:] not in ['.dic']:
filedef += '.dic'
2016-02-13 03:21:05 +05:00
dico = self.creeDico()
with open(filedef, 'w') as f:
f.write(str(dico))
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
def recharger(self):
2017-03-20 17:27:30 +05:00
print("recharger")
2016-02-13 03:21:05 +05: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 17:27:30 +05:00
print(filedef)
2016-02-13 03:21:05 +05:00
if os.path.exists(filedef):
with open(filedef, 'r') as f:
txt = f.read()
2016-02-13 03:21:05 +05:00
dico = eval(txt)
2017-03-20 17:27:30 +05:00
print(dico)
2016-02-13 03:21:05 +05:00
self.initDialog(dico)
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05: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 17:27:30 +05:00
print(filedef)
2016-02-13 03:21:05 +05:00
self.ui.le_maillage.setText(filedef)
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05: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 17:27:30 +05:00
print(filedef)
2016-02-13 03:21:05 +05:00
self.ui.le_facefiss.setText(filedef)
2016-10-21 17:47:37 +05: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 17:27:30 +05:00
print("reptrav ", reptrav)
self.ui.le_reptrav.setText(os.path.abspath(reptrav))
2016-10-21 17:47:37 +05: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 17:27:30 +05:00
print("nomres ", tempnom)
self.ui.le_nomres.setText(tempnom)
else:
self.ui.le_nomres.setText(nomres)
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
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(),
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-13 03:21:05 +05:00
)
2017-03-20 17:27:30 +05:00
print(dico)
2016-02-13 03:21:05 +05:00
return dico
2016-10-21 17:47:37 +05:00
2016-02-13 03:21:05 +05:00
def checkValues(self):
return self.NOK
def execute(self):
2017-03-20 17:27:30 +05:00
print("execute")
2016-02-13 03:21:05 +05:00
dico = self.creeDico()
NOK = self.testval(dico)
if not(NOK):
self.writeDefault(dico)
2016-05-01 22:23:11 +05:00
self.ui.lb_calcul.setText("--- Calcul en cours ---")
2016-02-13 03:21:05 +05:00
self.ui.lb_calcul.show()
2016-02-27 01:05:40 +05: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 17:27:30 +05:00
print('-'*60)
print(type(erreur))
print('-'*60)
print(erreur.msg)
print('-'*60)
for ligne in erreur.pile:
2017-03-20 17:27:30 +05: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 17:47:37 +05:00
mbox.setText(str(texte))
mbox.exec_()
# except Exception as erreur:
# print "exception non répertoriée"
2016-02-13 03:21:05 +05:00
self.NOK = NOK
2016-05-01 22:23:11 +05:00
self.ui.lb_calcul.hide()
#self.accept()
2016-10-21 17:47:37 +05:00
pass
2016-02-13 03:21:05 +05:00
# ----------------------------------------------------------------------------
2016-10-21 17:47:37 +05:00
2017-03-20 17:27:30 +05:00
print("main")
2016-02-13 03:21:05 +05:00
window = fissureGeneraleDialog()
retry = True
while(retry):
retry = False
window.exec_()
result = window.result()
if result:
# dialog accepted
2017-03-20 17:27:30 +05:00
print("dialog accepted, check")
2016-02-13 03:21:05 +05:00
retry = window.checkValues()
else:
2017-03-20 17:27:30 +05:00
print("dialog rejected, exit")
2016-02-13 03:21:05 +05:00
pass
2016-10-21 17:47:37 +05:00