Salome HOME
PR: add blocFissure plugin
[modules/smesh.git] / src / Tools / blocFissure / ihm / fissureCoude_plugin.py
diff --git a/src/Tools/blocFissure/ihm/fissureCoude_plugin.py b/src/Tools/blocFissure/ihm/fissureCoude_plugin.py
new file mode 100644 (file)
index 0000000..67e4cd8
--- /dev/null
@@ -0,0 +1,393 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2006-2013  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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# 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
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+#initLog.setDebug()
+initLog.setVerbose()
+
+from blocFissure.gmu import geomsmesh
+from blocFissure.casStandard import casStandard
+
+from blocFissure.ihm.fissureCoude_ihm import fissureCoude_ihm
+
+def fissureCoudeDlg(context):
+  # get context study, studyId, 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 fissureCoude_ui import Ui_Dialog
+  
+  class fissureCoudeDialog(QtGui.QDialog):
+    
+    def __init__(self):
+      QtGui.QDialog.__init__(self)
+      # Set up the user interface from Designer.
+      self.ui = Ui_Dialog()
+      self.ui.setupUi(self)
+      
+      self.blackPalette = self.ui.dsb_angle.palette()
+      self.redPalette = QPalette()
+      self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
+      self.NOK = False
+      
+      self.initDefaut()
+      self.initDialog(self.defaut)
+      self.ui.dsb_angle.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_rCintr.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_lTubeP1.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_lTubeP2.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_epais.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_dext.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_profondeur.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_longueur.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_azimut.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_orientation.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_posiAngul.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_absCurv.setSpecialValueText("saisie_obligatoire")
+      self.ui.sb_nbTranches.setSpecialValueText("saisie_obligatoire")
+      self.ui.sb_nbCouronne.setSpecialValueText("saisie_obligatoire")
+      self.ui.sb_nbSecteur.setSpecialValueText("saisie_obligatoire")
+      self.ui.dsb_aretesFaceFissure.setSpecialValueText("automatique")
+      self.ui.dsb_influence.setSpecialValueText("automatique")
+      
+      # 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.disconnect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"), self.accept)
+      self.connect(self.ui.buttonBox, QtCore.SIGNAL("accepted()"),
+                   self.execute)
+    
+    def initDefaut(self):
+      self.defaut = dict(
+        angle             = -181.0,
+        rCintr            = 0.0,
+        lTubeP1           = 0.0,
+        lTubeP2           = 0.0,
+        epais             = 0.0,
+        dext              = 0.0,
+        profondeur        = 0.0,
+        longueur          = 0.0,
+        azimut            = -181.0,
+        orientation       = -1.0,
+        posiAngul         = -181.0,
+        absCurv           = 0.0,
+        nbTranches        = 7,
+        nbCouronnes       = 1,
+        nbSecteurs        = 3,
+        cbOptDiscrSain    = False,
+        cbOptDiscrFiss    = False,
+        rbPosiAngul       = True,
+        rbFissExt         = True,
+        cbForceEllipse    = False,
+        nbAxeTubeP1       = 15,
+        nbAxeTubeP2       = 15,
+        nbAxeCoude        = 10,
+        nbCirconf         = 20,
+        nbEpaisseur       = 3,
+        rayonTore         = 2.0,
+        aretesFaceFissure = 0.0,
+        influence         = 0.0,
+        )
+      
+    def initDialog(self, dico):
+      self.ui.dsb_angle.setValue(dico['angle'])
+      self.ui.dsb_rCintr.setValue(dico['rCintr'])
+      self.ui.dsb_lTubeP1.setValue(dico['lTubeP1'])
+      self.ui.dsb_lTubeP2.setValue(dico['lTubeP2'])
+      self.ui.dsb_epais.setValue(dico['epais'])
+      self.ui.dsb_dext.setValue(dico['dext'])
+      self.ui.dsb_profondeur.setValue(dico['profondeur'])
+      self.ui.dsb_longueur.setValue(dico['longueur'])
+      self.ui.dsb_azimut.setValue(dico['azimut'])
+      self.ui.dsb_orientation.setValue(dico['orientation'])
+      self.ui.dsb_posiAngul.setValue(dico['posiAngul'])
+      self.ui.dsb_absCurv.setValue(dico['absCurv'])
+      self.ui.sb_nbTranches.setValue(dico['nbTranches'])
+      self.ui.sb_nbCouronne.setValue(dico['nbCouronnes'])
+      self.ui.sb_nbSecteur.setValue(dico['nbSecteurs'])
+      self.ui.dsb_aretesFaceFissure.setValue(dico['aretesFaceFissure'])
+      self.ui.dsb_influence.setValue(dico['influence'])
+      self.ui.sb_nbAxeTubeP1.setValue(dico['nbAxeTubeP1'])
+      self.ui.sb_nbAxeTubeP2.setValue(dico['nbAxeTubeP2'])
+      self.ui.sb_nbAxeCoude.setValue(dico['nbAxeCoude'])
+      self.ui.sb_nbCirconf.setValue(dico['nbCirconf'])
+      self.ui.sb_nbEpaisseur.setValue(dico['nbEpaisseur'])
+      self.ui.dsb_rayonTore.setValue(dico['rayonTore'])
+      #self.ui.cb_optDiscrSain.setChecked(False)
+      #self.ui.gb_discrSain.setShown(False)
+      self.ui.cb_optDiscrSain.setChecked(not(dico['cbOptDiscrSain']))
+      self.ui.cb_optDiscrSain.click()
+      self.ui.cb_optDiscrFiss.setChecked(not(dico['cbOptDiscrFiss']))
+      self.ui.cb_optDiscrFiss.click()
+      if dico['rbPosiAngul']:
+        self.ui.dsb_absCurv.setEnabled(False)
+        self.ui.dsb_posiAngul.setEnabled(True)
+        self.ui.rb_posiAngul.setChecked(True)
+        #self.ui.rb_posiAngul.click()
+      else:
+        self.ui.dsb_absCurv.setEnabled(True)
+        self.ui.dsb_posiAngul.setEnabled(False)
+        self.ui.rb_absCurv.setChecked(True)
+        #self.ui.rb_absCurv.click()
+      self.ui.rb_fissExt.setChecked(dico['rbFissExt'])
+      self.ui.cb_forceEllipse.setChecked(dico['cbForceEllipse'])
+      incomplet = self.testval(dico)
+      pass
+    
+    def testval(self, dico):
+      incomplet = False
+      if dico['angle'] < -180.0:
+        self.ui.dsb_angle.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_angle.setPalette(self.blackPalette)
+        
+      if dico['rCintr'] == 0.0:
+        self.ui.dsb_rCintr.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_rCintr.setPalette(self.blackPalette)
+        
+      if dico['lTubeP1'] == 0.0:  
+        self.ui.dsb_lTubeP1.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_lTubeP1.setPalette(self.blackPalette)
+        
+      if dico['lTubeP2'] == 0.0:  
+        self.ui.dsb_lTubeP2.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_lTubeP2.setPalette(self.blackPalette)
+        
+      if dico['epais'] == 0.0:  
+        self.ui.dsb_epais.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_epais.setPalette(self.blackPalette)
+        
+      if dico['dext'] == 0.0:  
+        self.ui.dsb_dext.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_dext.setPalette(self.blackPalette)
+        
+      if dico['profondeur'] == 0.0:  
+        self.ui.dsb_profondeur.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_profondeur.setPalette(self.blackPalette)
+        
+      if dico['longueur'] == 0.0:  
+        self.ui.dsb_longueur.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_longueur.setPalette(self.blackPalette)
+        
+      if dico['azimut'] < -180.0:  
+        self.ui.dsb_azimut.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_azimut.setPalette(self.blackPalette)
+        
+      if dico['orientation'] < 0.0:  
+        self.ui.dsb_orientation.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_orientation.setPalette(self.blackPalette)
+        
+      if dico['posiAngul'] < -180.0 and dico['rbPosiAngul'] == True:  
+        self.ui.dsb_posiAngul.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_posiAngul.setPalette(self.blackPalette)
+        
+      if dico['absCurv'] == 0.0 and dico['rbPosiAngul'] == False:  
+        self.ui.dsb_absCurv.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.dsb_absCurv.setPalette(self.blackPalette)
+        
+      if dico['nbTranches'] == 7:  
+        self.ui.sb_nbTranches.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.sb_nbTranches.setPalette(self.blackPalette)
+        
+      if dico['nbCouronnes'] == 1:  
+        self.ui.sb_nbCouronne.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.sb_nbCouronne.setPalette(self.blackPalette)
+        
+      if dico['nbSecteurs'] == 3:  
+        self.ui.sb_nbSecteur.setPalette(self.redPalette)
+        incomplet = True
+      else:
+        self.ui.sb_nbSecteur.setPalette(self.blackPalette)
+        
+      print "incomplet: ", incomplet
+      return incomplet
+    
+    def fileDefault(self):
+      filedef = os.path.expanduser("~/.config/salome/dialogFissureCoude.dic")
+      print filedef
+      return filedef
+    
+    def writeDefault(self, dico):
+      filedef = self.fileDefault()
+      f = open(filedef, 'w')
+      f.write(str(dico))
+      f.close()
+    
+    def readValPrec(self):
+      filedef = self.fileDefault()
+      if os.path.exists(filedef):
+        f = open(filedef, 'r')
+        txt = f.read()
+        dico = eval(txt)
+        print dico
+        self.initDialog(dico)
+
+    def resetVal(self):
+      #self.initDefaut()
+      self.initDialog(self.defaut)
+      
+    def sauver(self):
+      print "sauver"
+      fileDiag = QFileDialog(self)
+      fileDiag.setFileMode(QFileDialog.AnyFile)
+      fileDiag.setNameFilter("Parametres *.dic (*.dic)")
+      fileDiag.setViewMode(QFileDialog.List)
+      if fileDiag.exec_() :
+        fileNames = fileDiag.selectedFiles()
+        filedef = fileNames[0]
+        dico = self.creeDico()
+        f = open(filedef, 'w')
+        f.write(str(dico))
+        f.close()
+        
+    def recharger(self):
+      print "recharger"
+      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]
+        print filedef
+        if os.path.exists(filedef):
+          f = open(filedef, 'r')
+          txt = f.read()
+          dico = eval(txt)
+          print dico
+          self.initDialog(dico)
+         
+    def creeDico(self):
+      dico = dict(
+        angle             = self.ui.dsb_angle.value(),
+        rCintr            = self.ui.dsb_rCintr.value(),
+        lTubeP1           = self.ui.dsb_lTubeP1.value(),
+        lTubeP2           = self.ui.dsb_lTubeP2.value(),
+        epais             = self.ui.dsb_epais.value(),
+        dext              = self.ui.dsb_dext.value(),
+        profondeur        = self.ui.dsb_profondeur.value(),
+        longueur          = self.ui.dsb_longueur.value(),
+        azimut            = self.ui.dsb_azimut.value(),
+        orientation       = self.ui.dsb_orientation.value(),
+        posiAngul         = self.ui.dsb_posiAngul.value(),
+        absCurv           = self.ui.dsb_absCurv.value(),
+        nbTranches        = self.ui.sb_nbTranches.value(),
+        nbCouronnes       = self.ui.sb_nbCouronne.value(),
+        nbSecteurs        = self.ui.sb_nbSecteur.value(),
+        cbOptDiscrSain    = self.ui.cb_optDiscrSain.isChecked(),
+        cbOptDiscrFiss    = self.ui.cb_optDiscrFiss.isChecked(),
+        rbPosiAngul       = self.ui.rb_posiAngul.isChecked(),
+        rbFissExt         = self.ui.rb_fissExt.isChecked(),
+        cbForceEllipse    = self.ui.cb_forceEllipse.isChecked(),
+        nbAxeTubeP1       = self.ui.sb_nbAxeTubeP1.value(),
+        nbAxeTubeP2       = self.ui.sb_nbAxeTubeP2.value(),
+        nbAxeCoude        = self.ui.sb_nbAxeCoude.value(),
+        nbCirconf         = self.ui.sb_nbCirconf.value(),
+        nbEpaisseur       = self.ui.sb_nbEpaisseur.value(),
+        rayonTore         = self.ui.dsb_rayonTore.value(),
+        aretesFaceFissure = self.ui.dsb_aretesFaceFissure.value(),
+        influence         = self.ui.dsb_influence.value(),
+        )
+      print dico
+      return dico
+      
+    def checkValues(self):
+      return self.NOK
+
+    def execute(self):
+      dico = self.creeDico()
+      NOK = self.testval(dico)
+      if not(NOK):
+        dico['lenSegPipe'] = (dico['longueur'] + 3.14*dico['profondeur'])/dico['nbTranches']
+        self.writeDefault(dico)
+        probleme = fissureCoude_ihm(0)
+        probleme.setDicoParams(dico)
+        probleme.executeProbleme()
+      self.NOK = NOK
+      self.accept()
+    
+    pass 
+
+# ----------------------------------------------------------------------------
+                     
+  window = fissureCoudeDialog()
+#  window.ui.dsb_tolerance.setValue(0.01)
+  retry = True
+  while(retry):
+    retry = False
+    window.exec_()
+    result = window.result()
+    if result:
+      # dialog accepted
+      print "dialog accepted, check"
+      retry = window.checkValues()
+    else:
+      print "dialog rejected, exit"
+  pass
+