1 # -*- coding: utf-8 -*-
3 # Copyright (C) 2006-2016 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, studyId, salomeGui
32 studyId = context.studyId
38 from PyQt5 import QtCore
39 from PyQt5 import QtWidgets
40 from PyQt5 import QtGui
41 from PyQt5.QtWidgets import QFileDialog
42 from PyQt5.QtWidgets import QMessageBox
43 from PyQt5.QtGui import QPalette
44 from PyQt5.QtGui import QColor
45 from fissureGenerale_ui import Ui_Dialog
47 class fissureGeneraleDialog(QtWidgets.QDialog):
51 QtWidgets.QDialog.__init__(self)
52 # Set up the user interface from Designer.
56 self.blackPalette = self.ui.dsb_influence.palette()
57 self.redPalette = QPalette()
58 self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
62 self.initDialog(self.defaut)
63 self.ui.lb_calcul.hide()
65 # Connect up the buttons.
67 self.ui.pb_exemple.clicked.connect(self.genereExemples)
68 self.ui.pb_valPrec.clicked.connect(self.readValPrec)
69 self.ui.pb_reset.clicked.connect(self.resetVal)
70 self.ui.pb_recharger.clicked.connect(self.recharger)
71 self.ui.pb_sauver.clicked.connect(self.sauver)
72 self.ui.pb_maillage.clicked.connect(self.selectMaillage)
73 self.ui.pb_facefiss.clicked.connect(self.selectFacefiss)
74 self.ui.pb_reptrav.clicked.connect(self.selectReptrav)
75 self.ui.bb_OkCancel.accepted.disconnect(self.accept)
76 self.ui.bb_OkCancel.accepted.connect(self.execute)
81 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
82 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
90 areteFaceFissure = 10,
93 nomres = 'casStandard_fissure.med',
97 def initDialog(self, dico):
98 self.ui.le_maillage.setText(dico['maillageSain'])
99 self.ui.le_facefiss.setText(dico['brepFaceFissure'])
100 self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
101 self.ui.dsb_influence.setValue(dico['lgInfluence'])
102 self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
103 self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
104 self.ui.dsb_rayonPipe.setValue(dico['rayonPipe'])
105 self.ui.dsb_lenSegPipe.setValue(dico['lenSegPipe'])
106 self.ui.sb_couronnes.setValue(dico['nbSegRad'])
107 self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
108 self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
109 if 'aretesVives' in dico:
110 self.ui.dsb_aretesVives.setValue(dico['aretesVives'])
112 self.ui.dsb_aretesVives.setValue(0)
113 self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
114 self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
115 self.ui.cb_log.setCurrentIndex(dico['verbosite'])
116 incomplet = self.testval(dico)
119 def testval(self, dico):
121 if not os.path.lexists(dico['maillageSain']):
122 self.ui.le_maillage.setPalette(self.redPalette)
125 self.ui.le_maillage.setPalette(self.blackPalette)
126 if not os.path.lexists(dico['brepFaceFissure']):
127 self.ui.le_facefiss.setPalette(self.redPalette)
130 self.ui.le_facefiss.setPalette(self.blackPalette)
133 l = dico['edgeFissIds']
135 if not isinstance(i, int):
136 print("not isinstance(i, int)")
145 self.ui.le_fondfiss.setPalette(self.blackPalette)
147 self.ui.le_fondfiss.setPalette(self.redPalette)
148 if dico['meshBrep'][0] == 0:
149 self.ui.dsb_meshBrepMin.setPalette(self.redPalette)
152 self.ui.dsb_meshBrepMin.setPalette(self.blackPalette)
153 if dico['meshBrep'][1] == 0:
154 self.ui.dsb_meshBrepMax.setPalette(self.redPalette)
157 self.ui.dsb_meshBrepMax.setPalette(self.blackPalette)
158 if dico['rayonPipe'] == 0:
159 self.ui.dsb_rayonPipe.setPalette(self.redPalette)
162 self.ui.dsb_rayonPipe.setPalette(self.blackPalette)
163 if dico['lenSegPipe'] == 0:
164 self.ui.dsb_lenSegPipe.setPalette(self.redPalette)
167 self.ui.dsb_lenSegPipe.setPalette(self.blackPalette)
168 if dico['areteFaceFissure'] == 0:
169 self.ui.dsb_areteFaceFissure.setPalette(self.redPalette)
172 self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
174 print("incomplet: ", incomplet)
177 def fileDefault(self):
178 filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
182 def writeDefault(self, dico):
183 filedef = self.fileDefault()
184 f = open(filedef, 'w')
188 def genereExemples(self):
189 maillageSain = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med')
190 brepFaceFissure = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep")
191 if (os.path.exists(maillageSain) and os.path.exists(brepFaceFissure)):
192 self.initDialog(self.defaut)
194 self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
195 self.ui.lb_calcul.show()
196 from blocFissure.materielCasTests import genereMateriel
197 self.ui.lb_calcul.hide()
198 self.initDialog(self.defaut)
200 def readValPrec(self):
201 filedef = self.fileDefault()
202 if os.path.exists(filedef):
203 f = open(filedef, 'r')
207 self.initDialog(dico)
211 self.initDialog(self.defaut)
213 def setLogVerbosity(self, logfile):
214 from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
215 print("setLogVerbosity")
216 index = self.ui.cb_log.currentIndex()
219 initLog.setRelease(logfile)
221 initLog.setVerbose(logfile)
223 initLog.setDebug(logfile)
228 fileDiag = QFileDialog(self)
229 fileDiag.setFileMode(QFileDialog.AnyFile)
230 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
231 fileDiag.setViewMode(QFileDialog.List)
232 if fileDiag.exec_() :
233 fileNames = fileDiag.selectedFiles()
235 filedef = fileNames[0]
236 if filedef[-4:] not in ['.dic']:
238 dico = self.creeDico()
239 f = open(filedef, 'w')
245 fileDiag = QFileDialog(self)
246 fileDiag.setFileMode(QFileDialog.ExistingFile)
247 fileDiag.setNameFilter("Parametres *.dic (*.dic)")
248 fileDiag.setViewMode(QFileDialog.Detail)
249 if fileDiag.exec_() :
250 fileNames = fileDiag.selectedFiles()
251 filedef = fileNames[0]
253 if os.path.exists(filedef):
254 f = open(filedef, 'r')
258 self.initDialog(dico)
260 def selectMaillage(self):
261 fileDiag = QFileDialog(self)
262 fileDiag.setFileMode(QFileDialog.ExistingFile)
263 fileDiag.setNameFilter("Maillage *.med (*.med)")
264 fileDiag.setViewMode(QFileDialog.Detail)
265 if fileDiag.exec_() :
266 fileNames = fileDiag.selectedFiles()
267 filedef = fileNames[0]
269 self.ui.le_maillage.setText(filedef)
271 def selectFacefiss(self):
272 fileDiag = QFileDialog(self)
273 fileDiag.setFileMode(QFileDialog.ExistingFile)
274 fileDiag.setNameFilter("Face fissure *.brep (*.brep)")
275 fileDiag.setViewMode(QFileDialog.Detail)
276 if fileDiag.exec_() :
277 fileNames = fileDiag.selectedFiles()
278 filedef = fileNames[0]
280 self.ui.le_facefiss.setText(filedef)
282 def selectReptrav(self):
283 fileDiag = QFileDialog(self)
284 fileDiag.setFileMode(QFileDialog.Directory)
285 fileDiag.setViewMode(QFileDialog.Detail)
286 fileDiag.setDirectory(self.ui.le_reptrav.text())
287 if fileDiag.exec_() :
288 fileNames = fileDiag.selectedFiles()
289 reptrav = str(fileNames[0])
290 print("reptrav ", reptrav)
291 self.ui.le_reptrav.setText(os.path.abspath(reptrav))
294 def selectNomres(self):
295 fileDiag = QFileDialog(self)
296 fileDiag.setFileMode(QFileDialog.AnyFile)
297 fileDiag.setViewMode(QFileDialog.Detail)
298 nomres=str(os.path.split(str(self.ui.le_nomres.text()))[1])
299 fileDiag.setDirectory(self.ui.le_reptrav.text())
300 fileDiag.selectFile(nomres)
301 fileDiag.setNameFilter("Maillage *.med (*.med)")
302 self.ui.le_nomres.setText(nomres)
303 if fileDiag.exec_() :
304 fileNames = fileDiag.selectedFiles()
305 tempnom = os.path.split(str(fileNames[0]))[1]
306 print("nomres ", tempnom)
307 self.ui.le_nomres.setText(tempnom)
309 self.ui.le_nomres.setText(nomres)
313 maillageSain = str(self.ui.le_maillage.text()),
314 brepFaceFissure = str(self.ui.le_facefiss.text()),
315 edgeFissIds = eval(str(self.ui.le_fondfiss.text())),
316 lgInfluence = self.ui.dsb_influence.value(),
317 meshBrep = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
318 rayonPipe = self.ui.dsb_rayonPipe.value(),
319 lenSegPipe = self.ui.dsb_lenSegPipe.value(),
320 nbSegRad = self.ui.sb_couronnes.value(),
321 nbSegCercle = self.ui.sb_secteurs.value(),
322 areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
323 aretesVives = self.ui.dsb_aretesVives.value(),
324 reptrav = str(self.ui.le_reptrav.text()),
325 nomres = str(self.ui.le_nomres.text()),
326 verbosite = self.ui.cb_log.currentIndex()
331 def checkValues(self):
336 dico = self.creeDico()
337 NOK = self.testval(dico)
339 self.writeDefault(dico)
340 self.ui.lb_calcul.setText("--- Calcul en cours ---")
341 self.ui.lb_calcul.show()
342 logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
343 self.setLogVerbosity(logfile)
344 from blocFissure.gmu import geomsmesh # après intialisation log dans setLogVerbosity
345 from blocFissure.gmu.casStandard import casStandard # après intialisation log dans setLogVerbosity
346 from blocFissure.gmu.fissError import fissError
348 execInstance = casStandard(dico)
349 except fissError as erreur:
355 for ligne in erreur.pile:
359 # texte += +"<br>" +'-'*60 +"<br>"
360 # for ligne in erreur.pile:
361 # texte += repr(ligne) +"<br>"
362 mbox = QMessageBox(self)
363 mbox.setWindowTitle("erreur blocFissure")
364 mbox.setText(str(texte))
366 # except Exception as erreur:
367 # print "exception non répertoriée"
369 self.ui.lb_calcul.hide()
374 # ----------------------------------------------------------------------------
377 window = fissureGeneraleDialog()
382 result = window.result()
385 print("dialog accepted, check")
386 retry = window.checkValues()
388 print("dialog rejected, exit")