1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2006-2019 EDF R&D
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License, or (at your option) any later version.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 # if you already have plugins defined in a salome_plugins.py file, add this file at the end.
23 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
27 from blocFissure import gmu
29 def fissureGeneraleDlg(context):
30 # get context study, salomeGui
37 from PyQt5 import QtCore
38 from PyQt5 import QtWidgets
39 from PyQt5 import QtGui
40 from PyQt5.QtWidgets import QFileDialog
41 from PyQt5.QtWidgets import QMessageBox
42 from PyQt5.QtGui import QPalette
43 from PyQt5.QtGui import QColor
44 from blocFissure.ihm.fissureGenerale_ui import Ui_Dialog
46 class fissureGeneraleDialog(QtWidgets.QDialog):
50 QtWidgets.QDialog.__init__(self)
51 # Set up the user interface from Designer.
55 self.blackPalette = self.ui.dsb_influence.palette()
56 self.redPalette = QPalette()
57 self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
61 self.initDialog(self.defaut)
62 self.ui.lb_calcul.hide()
64 # Connect up the buttons.
66 self.ui.pb_exemple.clicked.connect(self.genereExemples)
67 self.ui.pb_valPrec.clicked.connect(self.readValPrec)
68 self.ui.pb_reset.clicked.connect(self.resetVal)
69 self.ui.pb_recharger.clicked.connect(self.recharger)
70 self.ui.pb_sauver.clicked.connect(self.sauver)
71 self.ui.pb_maillage.clicked.connect(self.selectMaillage)
72 self.ui.pb_facefiss.clicked.connect(self.selectFacefiss)
73 self.ui.pb_reptrav.clicked.connect(self.selectReptrav)
74 self.ui.bb_OkCancel.accepted.disconnect(self.accept)
75 self.ui.bb_OkCancel.accepted.connect(self.execute)
80 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
81 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
89 areteFaceFissure = 10,
92 nomres = 'casStandard_fissure.med',
96 def initDialog(self, dico):
97 self.ui.le_maillage.setText(dico['maillageSain'])
98 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
99 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
100 self.ui.dsb_influence.setValue(dico['lgInfluence'])
101 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
102 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
103 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
104 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
105 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
106 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
107 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
108 if 'aretesVives' in dico:
109 self.ui.dsb_aretesVives.setValue(dico['aretesVives'])
111 self.ui.dsb_aretesVives.setValue(0)
112 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
113 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
114 self.ui.cb_log.setCurrentIndex(dico['verbosite'])
115 incomplet = self.testval(dico)
118 def testval(self, dico):
120 if not os.path.lexists(dico['maillageSain']):
121 self.ui.le_maillage.setPalette(self.redPalette)
124 self.ui.le_maillage.setPalette(self.blackPalette)
125 if not os.path.lexists(dico['brepFaceFissure']):
126 self.ui.le_facefiss.setPalette(self.redPalette)
129 self.ui.le_facefiss.setPalette(self.blackPalette)
132 l = dico['edgeFissIds']
134 if not isinstance(i, int):
135 print("not isinstance(i, int)")
144 self.ui.le_fondfiss.setPalette(self.blackPalette)
146 self.ui.le_fondfiss.setPalette(self.redPalette)
147 if dico['meshBrep'][0] == 0:
148 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
151 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
152 if dico['meshBrep'][1] == 0:
153 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
156 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
157 if dico['rayonPipe'] == 0:
158 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
161 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
162 if dico['lenSegPipe'] == 0:
163 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
166 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
167 if dico['areteFaceFissure'] == 0:
168 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
171 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
173 print("incomplet: ", incomplet)
176 def fileDefault(self):
177 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
181 def writeDefault(self, dico):
182 filedef = self.fileDefault()
183 with open(filedef, 'w') as f:
186 def genereExemples(self):
187 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med')
188 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep")
189 if (os.path.exists(maillageSain) and os.path.exists(brepFaceFissure)):
190 self.initDialog(self.defaut)
192 self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
193 self.ui.lb_calcul.show()
194 from blocFissure.materielCasTests import genereMateriel
195 self.ui.lb_calcul.hide()
196 self.initDialog(self.defaut)
198 def readValPrec(self):
199 filedef = self.fileDefault()
200 if os.path.exists(filedef):
201 with open(filedef, 'r') as f:
205 self.initDialog(dico)
209 self.initDialog(self.defaut)
211 def setLogVerbosity(self, logfile):
212 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
213 print("setLogVerbosity")
214 index = self.ui.cb_log.currentIndex()
217 initLog.setRelease(logfile)
219 initLog.setVerbose(logfile)
221 initLog.setDebug(logfile)
226 fileDiag = QFileDialog(self)
227 fileDiag.setFileMode(QFileDialog.AnyFile)
228 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
229 fileDiag.setViewMode(QFileDialog.List)
230 if fileDiag.exec_() :
231 fileNames = fileDiag.selectedFiles()
233 filedef = fileNames[0]
234 if filedef[-4:] not in ['.dic']:
236 dico = self.creeDico()
237 with open(filedef, 'w') as f:
242 fileDiag = QFileDialog(self)
243 fileDiag.setFileMode(QFileDialog.ExistingFile)
244 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
245 fileDiag.setViewMode(QFileDialog.Detail)
246 if fileDiag.exec_() :
247 fileNames = fileDiag.selectedFiles()
248 filedef = fileNames[0]
250 if os.path.exists(filedef):
251 with open(filedef, 'r') as f:
255 self.initDialog(dico)
257 def selectMaillage(self):
258 fileDiag = QFileDialog(self)
259 fileDiag.setFileMode(QFileDialog.ExistingFile)
260 fileDiag.setNameFilter("Maillage *.med (*.med)")
261 fileDiag.setViewMode(QFileDialog.Detail)
262 if fileDiag.exec_() :
263 fileNames = fileDiag.selectedFiles()
264 filedef = fileNames[0]
266 self.ui.le_maillage.setText(filedef)
268 def selectFacefiss(self):
269 fileDiag = QFileDialog(self)
270 fileDiag.setFileMode(QFileDialog.ExistingFile)
271 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
272 fileDiag.setViewMode(QFileDialog.Detail)
273 if fileDiag.exec_() :
274 fileNames = fileDiag.selectedFiles()
275 filedef = fileNames[0]
277 self.ui.le_facefiss.setText(filedef)
279 def selectReptrav(self):
280 fileDiag = QFileDialog(self)
281 fileDiag.setFileMode(QFileDialog.Directory)
282 fileDiag.setViewMode(QFileDialog.Detail)
283 fileDiag.setDirectory(self.ui.le_reptrav.text())
284 if fileDiag.exec_() :
285 fileNames = fileDiag.selectedFiles()
286 reptrav = str(fileNames[0])
287 print("reptrav ", reptrav)
288 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
291 def selectNomres(self):
292 fileDiag = QFileDialog(self)
293 fileDiag.setFileMode(QFileDialog.AnyFile)
294 fileDiag.setViewMode(QFileDialog.Detail)
295 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
296 fileDiag.setDirectory(self.ui.le_reptrav.text())
297 fileDiag.selectFile(nomres)
298 fileDiag.setNameFilter("Maillage *.med (*.med)")
299 self.ui.le_nomres.setText(nomres)
300 if fileDiag.exec_() :
301 fileNames = fileDiag.selectedFiles()
302 tempnom = os.path.split(str(fileNames[0]))[1]
303 print("nomres ", tempnom)
304 self.ui.le_nomres.setText(tempnom)
306 self.ui.le_nomres.setText(nomres)
310 maillageSain = str(self.ui.le_maillage.text()),
311 brepFaceFissure = str(self.ui.le_facefiss.text()),
312 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
313 lgInfluence = self.ui.dsb_influence.value(),
314 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
315 rayonPipe = self.ui.dsb_rayonPipe.value(),
316 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
317 nbSegRad = self.ui.sb_couronnes.value(),
318 nbSegCercle = self.ui.sb_secteurs.value(),
319 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
320 aretesVives = self.ui.dsb_aretesVives.value(),
321 reptrav = str(self.ui.le_reptrav.text()),
322 nomres = str(self.ui.le_nomres.text()),
323 verbosite = self.ui.cb_log.currentIndex()
328 def checkValues(self):
333 dico = self.creeDico()
334 NOK = self.testval(dico)
336 self.writeDefault(dico)
337 self.ui.lb_calcul.setText("--- Calcul en cours ---")
338 self.ui.lb_calcul.show()
339 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
340 self.setLogVerbosity(logfile)
341 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
342 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
343 from blocFissure.gmu.fissError import fissError
345 execInstance = casStandard(dico)
346 except fissError as erreur:
352 for ligne in erreur.pile:
356 # texte += +"<br>" +'-'*60 +"<br>"
357 # for ligne in erreur.pile:
358 # texte += repr(ligne) +"<br>"
359 mbox = QMessageBox(self)
360 mbox.setWindowTitle("erreur blocFissure")
361 mbox.setText(str(texte))
363 # except Exception as erreur:
364 # print "exception non répertoriée"
366 self.ui.lb_calcul.hide()
371 # ----------------------------------------------------------------------------
374 window = fissureGeneraleDialog()
379 result = window.result()
382 print("dialog accepted, check")
383 retry = window.checkValues()
385 print("dialog rejected, exit")