Salome HOME
Copyright update 2020
[modules/smesh.git] / src / Tools / blocFissure / ihm / fissureGenerale_plugin.py
index fe0627fd18559d53c00afabc0993644e11bd5116..15ff7bc0c10c0979fbd0f6d08baf2385f7d3b383 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (C) 2006-2016  EDF R&D
+# Copyright (C) 2006-2020  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
@@ -27,62 +27,53 @@ import math
 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 PyQt4.QtCore import QString
-  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):
+
     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',
@@ -96,11 +87,12 @@ def fissureGeneraleDlg(context):
         nbSegRad          = 5,
         nbSegCercle       = 32,
         areteFaceFissure  = 10,
+        areteVives        = 0,
         reptrav           = '.',
         nomres            = 'casStandard_fissure.med',
         verbosite         = 0)
 
-      
+
     def initDialog(self, dico):
       self.ui.le_maillage.setText(dico['maillageSain'])
       self.ui.le_facefiss.setText(dico['brepFaceFissure'])
@@ -113,12 +105,16 @@ 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])
       self.ui.cb_log.setCurrentIndex(dico['verbosite'])
       incomplet = self.testval(dico)
       pass
-  
+
     def testval(self, dico):
       incomplet = False
       if not os.path.lexists(dico['maillageSain']):
@@ -136,12 +132,12 @@ def fissureGeneraleDlg(context):
         l = dico['edgeFissIds']
         for i in l:
           if not isinstance(i, int):
-            print"not isinstance(i, int)"
+            print("not isinstance(i, int)")
             incomplet = True
             edgeFissIdsOK=False
             break
       except:
-        print "except eval"
+        print("except eval")
         incomplet = True
         edgeFissIdsOK=False
       if edgeFissIdsOK:
@@ -173,63 +169,76 @@ 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
+      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 f:
+          f.write(str(dico))
+
+    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:
+        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 f:
+            txt = f.read()
         dico = eval(txt)
-        print dico
+        print(dico)
         self.initDialog(dico)
 
     def resetVal(self):
       #self.initDefaut()
       self.initDialog(self.defaut)
-      
+
     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(logfile)
       elif index == 1:
         initLog.setVerbose(logfile)
       elif index == 2:
         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 f:
+          f.write(str(dico))
+
     def recharger(self):
-      print "recharger"
+      print("recharger")
       fileDiag = QFileDialog(self)
       fileDiag.setFileMode(QFileDialog.ExistingFile)
       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
@@ -237,14 +246,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 f:
+            txt = f.read()
           dico = eval(txt)
-          print dico
+          print(dico)
           self.initDialog(dico)
-          
+
     def selectMaillage(self):
       fileDiag = QFileDialog(self)
       fileDiag.setFileMode(QFileDialog.ExistingFile)
@@ -253,9 +262,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)
@@ -264,9 +273,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)
@@ -275,10 +284,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)
@@ -291,11 +300,11 @@ 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()),
@@ -308,22 +317,24 @@ def fissureGeneraleDlg(context):
                   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()
         logfile=os.path.join(dico['reptrav'], dico['nomres']+".log")
         self.setLogVerbosity(logfile)
@@ -333,32 +344,33 @@ def fissureGeneraleDlg(context):
         try:
           execInstance = casStandard(dico)
         except fissError as erreur:
-          print '-'*60
-          print type(erreur)
-          print '-'*60
-          print erreur.msg
-          print '-'*60
+          print('-'*60)
+          print(type(erreur))
+          print('-'*60)
+          print(erreur.msg)
+          print('-'*60)
           for ligne in erreur.pile:
-            print repr(ligne)        
-          print '-'*60
+            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")
-          mbox.setText(QString.fromUtf8(texte))
-          mbox.exec_()          
+          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()
+
+    pass
 
 # ----------------------------------------------------------------------------
-  
-  print "main"                   
+
+  print("main")
   window = fissureGeneraleDialog()
   retry = True
   while(retry):
@@ -367,9 +379,9 @@ 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"
+      print("dialog rejected, exit")
   pass
-  
+