Salome HOME
fin portage python 3
[tools/eficas.git] / Ihm / I_FONCTION.py
index 44f6a170fb12b373419aa26ee79d4978dc4a8317..53a7fc3e0bdaf6db8327e0b6f4e69e845909159b 100644 (file)
@@ -1,14 +1,36 @@
-from I_ASSD import ASSD
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-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
+#
+from __future__ import absolute_import
+from __future__ import print_function
+from .I_ASSD import ASSD
+from Extensions.i18n import tr
+from Extensions.eficas_exception import EficasException
 
 class FONCTION(ASSD):
   def __init__(self,etape=None,sd=None,reg='oui'):
-    #ASSD.__init__(self,etape=etape,sd=sd,reg=reg)
     if reg=='oui':
       self.jdc.register_fonction(self)
 
   def get_formule(self):
     """
-    Retourne une formule décrivant self sous la forme d'un tuple :
+    Retourne une formule decrivant self sous la forme d'un tuple :
     (nom,type_retourne,arguments,corps)
     """
     if hasattr(self.etape,'get_formule'):
@@ -18,5 +40,33 @@ class FONCTION(ASSD):
       # on est dans le cas d'une fonction
       return (self.nom,'REEL','(REEL:x)','''bidon''')
 
+# On ajoute la classe formule pour etre coherent avec la
+# modification de C Durand sur la gestion des formules dans le superviseur
+# On conserve l'ancienne classe fonction (ceinture et bretelles)
 class fonction(FONCTION) : pass
 
+from Extensions import param2
+class formule(FONCTION) : 
+   def __call__(self,*val):
+      if len(val) != len(self.nompar):
+         raise TypeError(" %s() takes exactly %d argument (%d given)" % (self.nom,len(self.nompar),len(val)))
+      return param2.Unop2(self.nom,self.real_call,val)
+
+   def real_call(self,*val):
+      if hasattr(self.parent,'contexte_fichier_init'):
+                        context=self.parent.contexte_fichier_init
+      else            : context={}
+      i=0
+      for param in self.nompar :
+         context[param]=val[i]
+         i=i+1
+      try :
+       res=eval(self.expression,self.jdc.const_context, context)
+      except :
+       print (75 * '!')
+       print ('! ' + "Erreur evaluation formule %s" % self.nom + 20*'!')
+       print (75 * '!')
+       raise EficasException
+      return res
+
+