Salome HOME
pour PSEN et Telemac
[tools/eficas.git] / generator / generator_SEP.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """
21    Ce module contient le plugin generateur de fichier au format 
22    SEP pour EFICAS.
23
24 """
25 import traceback
26 import types,string,re,os
27
28 from generator_python import PythonGenerator
29
30 def entryPoint():
31    """
32       Retourne les informations necessaires pour le chargeur de plugins
33
34       Ces informations sont retournees dans un dictionnaire
35    """
36    return {
37         # Le nom du plugin
38           'name' : 'SEP',
39         # La factory pour creer une instance du plugin
40           'factory' : SEPGenerator,
41           }
42
43
44 class SEPGenerator(PythonGenerator):
45    """
46       Ce generateur parcourt un objet de type JDC et produit
47       un texte au format eficas et 
48       un texte au format py 
49
50    """
51    # Les extensions de fichier permis?
52    extensions=('.comm',)
53
54    def gener(self,obj,format='brut',config=None):
55       self.initDico()
56       # Cette instruction génère le contenu du fichier de commandes (persistance)
57       self.text=PythonGenerator.gener(self,obj,format)
58       # Cette instruction génère le contenu du fichier de paramètres python
59       self.genereSEP()
60       return self.text
61
62    def getTubePy(self) :
63       return self.texteTubePy
64
65    def genereSEP(self) :
66       '''
67       Prépare le contenu du fichier de paramètres python. Le contenu
68       peut ensuite être obtenu au moyen de la fonction getTubePy().
69       '''
70       #self.__genereSEP_withVariables()
71       self.__genereSEP_withDico()
72
73    def __genereSEP_withVariables(self) :
74       '''
75       Les paramètres sont transcrits sous forme de variables nom=valeur.
76       '''
77       self.texteTubePy="# Parametres generes par Eficas \n"
78       for MC in self.dictMCVal.keys():
79          ligne = MC +"="+ repr(self.dictMCVal[MC])+'\n'
80          self.texteTubePy=self.texteTubePy+ligne
81
82       print self.texteTubePy
83
84       # __GBO__: Tester self.tube pour aiguiller en fonction du cas (au besoin)
85       fichier=os.path.join(os.path.dirname(__file__),"tube.py")
86       f=open(fichier,'r')
87       for ligne in f.readlines():
88          self.texteTubePy=self.texteTubePy+ligne
89       f.close
90
91    def __genereSEP_withDico(self) :
92       """
93       Les paramètres sont transcrits sous la forme d'un dictionnaire nom=valeur.
94       """
95       from Sep import properties
96       self.texteTubePy="# -*- coding: utf-8 -*-\n"
97       self.texteTubePy+="# ======================================================================================\n"
98       self.texteTubePy+="# FICHIER GENERE PAR EFICAS - OUTIL MÉTIER SOUS-EPAISSEUR - "
99       self.texteTubePy+="VERSION "+str(properties.version)+" du "+str(properties.date)+"\n"
100       self.texteTubePy+="# ======================================================================================\n"
101       self.texteTubePy+="\n"
102       self.texteTubePy+="# Parametres Utilisateur Eficas \n"
103       self.texteTubePy+="parameters={}\n"
104       
105       for MC in self.dictMCVal.keys():
106          ligne = "parameters['"+MC+"']="+ repr(self.dictMCVal[MC])+'\n'
107          self.texteTubePy=self.texteTubePy+ligne
108
109       # On ajoute des paramètres de configuration pour contrôle de
110       # cohérence avec la procédure outil métier
111       self.texteTubePy+="# Parametres de Configuration Eficas \n"
112       ligne = "parameters['OMVERSION']="+str(properties.version)+"\n"
113       self.texteTubePy+=ligne
114
115       # __GBO__: Tester self.tube pour aiguiller en fonction du cas (au besoin)
116       self.texteTubePy+="\n"
117       self.texteTubePy+="# Exécution de la procédure outil métier \n"
118       self.texteTubePy+="import os,sys\n"
119       self.texteTubePy+="sys.path.insert(0,os.environ['OM_ROOT_DIR'])\n"
120       self.texteTubePy+="import om_data\n"
121       self.texteTubePy+="om_data.setParameters(parameters)\n"
122       self.texteTubePy+="def run():\n"
123       self.texteTubePy+="    import om_smeca\n"
124       self.texteTubePy+="\n"
125       self.texteTubePy+='if __name__ == "__main__":\n'
126       self.texteTubePy+="    run()\n"
127
128       # For debug only
129       print self.texteTubePy
130
131
132    def initDico(self) :
133       self.tube=0
134       self.coude=0
135       self.dictMCVal={}
136       self.texteTubePy=""
137
138    # __GBO__: surcharge de PythonGenerator:
139    # voir example generator_cuve2dg.py (genea)
140    def generMCSIMP(self,obj) :
141       """
142       Convertit un objet MCSIMP en texte python
143       Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
144       """
145       clef=""
146       for i in obj.get_genealogie() :
147          clef=clef+"__"+i
148       #self.dictMCVal[obj.nom]=obj.valeur
149       self.dictMCVal[clef]=obj.valeur
150
151       s=PythonGenerator.generMCSIMP(self,obj)
152       return s
153   
154    # __GBO__: surcharge de PythonGenerator
155    def generMACRO_ETAPE(self,obj):
156       print obj.nom
157       if obj.nom == "S_EP_INTERNE" :
158          self.tube=1
159       if obj.nom == "M_COUDE" :
160          self.coude=1
161       s=PythonGenerator.generMACRO_ETAPE(self,obj)
162       return s
163