Salome HOME
onItem=Deplie
[tools/eficas.git] / generator / generator_dicoImbrique.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 """Ce module contient le plugin generateur de fichier au format  Code_Carmel3D pour EFICAS.
21 """
22
23 import traceback
24 import types,string,re,os
25 from Extensions.i18n import tr
26 from generator_python import PythonGenerator
27
28 def entryPoint():
29    """
30       Retourne les informations necessaires pour le chargeur de plugins
31       Ces informations sont retournees dans un dictionnaire
32    """
33    return {
34         # Le nom du plugin
35           'name' : 'dicoImbrique',
36         # La factory pour creer une instance du plugin
37           'factory' : DicoImbriqueGenerator,
38           }
39
40
41 class DicoImbriqueGenerator(PythonGenerator):
42    """
43       Ce generateur parcourt un objet de type JDC et produit
44       un texte au format eficas et 
45       un texte au format dictionnaire
46
47    """
48    # Les extensions de fichier permis?
49    extensions=('.comm',)
50
51 #----------------------------------------------------------------------------------------
52    def gener(self,obj,format='brut',config=None):
53        
54       self.initDico()
55       
56       # Cette instruction genere le contenu du fichier de commandes (persistance)
57       self.text=PythonGenerator.gener(self,obj,format)
58       return self.text
59
60
61 #----------------------------------------------------------------------------------------
62 # initialisations
63 #----------------------------------------------------------------------------------------
64    
65    def initDico(self) :
66  
67       self.Dico={}
68       self.Entete = ''
69
70
71 #----------------------------------------------------------------------------------------
72 # ecriture
73 #----------------------------------------------------------------------------------------
74
75    def writeDefault(self,fn) :
76        fileDico = fn[:fn.rfind(".")] + '.py'
77        f = open( str(fileDico), 'wb')
78        f.write( self.Entete + "Dico =" + str(self.Dico) )
79        f.close()
80
81 #----------------------------------------------------------------------------------------
82 #  analyse de chaque noeud de l'arbre 
83 #----------------------------------------------------------------------------------------
84
85    def generMCSIMP(self,obj) :
86         """recuperation de l objet MCSIMP"""
87
88         s=PythonGenerator.generMCSIMP(self,obj)
89         liste=obj.get_genealogie() 
90         nom=obj.etape.nom
91         if hasattr(obj.etape,'sdnom') and obj.etape.sdnom != None and obj.etape.sdnom != "" : 
92            nom = nom+ obj.etape.sdnom
93         if not(self.Dico.has_key(nom)) : dicoCourant={}
94         else : dicoCourant=self.Dico [nom]
95         if hasattr(obj.valeur,'nom'):dicoCourant[liste[-1]]=obj.valeur.nom
96         else : 
97            if type(obj.valeur)  in (types.ListType,types.TupleType):
98               try :
99 #PNPNPN a remplacer par plus propre
100                  if obj.definition.validators.typeDesTuples[0] !='R' :
101                     val=[]
102                     elt=[]
103                     for tupleElt in obj.valeur :
104                         elt=(str(tupleElt[0]),tupleElt[1])
105                         val.append(elt)
106                     dicoCourant[liste[-1]]=val
107                  else :dicoCourant[liste[-1]]=obj.valeur
108               except :
109                  dicoCourant[liste[-1]]=obj.valeurFormatee
110            else :dicoCourant[liste[-1]]=obj.valeurFormatee
111         self.Dico[nom]=dicoCourant
112
113         return s
114
115