Salome HOME
CCAR: merge de la branche de développement V1_11a1 dans la branche
[tools/eficas.git] / generator / generator_vers3DSalome.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 """
22     Ce module contient le plugin generateur de fichier au format 
23     python pour EFICAS.
24     PN
25
26 """
27 import traceback
28 import types,string,re
29 import math
30
31 from Noyau import N_CR
32 from Noyau.N_utils import repr_float
33 import Accas
34 import Extensions
35 from Extensions.parametre import ITEM_PARAMETRE
36 from Formatage import Formatage
37 from generator_python import PythonGenerator
38 from Editeur.widgets import showerror
39
40 def entryPoint():
41    """
42        Retourne les informations nécessaires pour le chargeur de plugins
43
44        Ces informations sont retournées dans un dictionnaire
45    """
46    return {
47         # Le nom du plugin
48           'name' : 'vers3DSalome',
49         # La factory pour créer une instance du plugin
50           'factory' : vers3DSalomeGenerator,
51           }
52
53
54 class vers3DSalomeGenerator(PythonGenerator):
55    """
56        Ce generateur parcourt un objet AFFE-CARA_ELEM
57        et produit un fichier au format texte contenant
58        les instructions idl pour PAL 
59    """
60
61    def __init__(self,cr=None):
62       self.list_commandes=[];
63       self.jdc=None
64       self.node=None
65       self.clefs=None
66       self.liste_motetat = ("AFFE_CARA_ELEM", "ORIG_AXE", "AXE" , 
67                             "BARRE", "CABLE", "CARA", "COQUE", "EPAIS", 
68                             "EXCENTREMENT", "GROUP_MA", "ORIENTATION", 
69                             "POUTRE", "SECTION", "VALE", "VARI_SECT",
70                             "GRILLE", "ANGL_REP",
71                              "b_constant", "b_homothetique", 
72                             "b_rectangle", "b_affine", "b_cercle" )
73       self.dict_deb_com={"POUTRE":"VisuPoutre", "CABLE" : "VisuCable",
74                          "COQUE" : "VisuCoque", "GRILLE" : "VisuGrille",
75                          "ORIENTATION" : "Orientation", "BARRE" : "VisuBarre"}
76
77       self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale",
78                            "CERCLE":"Cercle"}
79
80       self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais"}
81
82       self.init_ligne() 
83
84    def init_jdc(self,jdc) :
85       self.jdc=jdc
86
87    def init_ligne (self) :
88       self.boolGpMa = 0
89       self.commande = ""
90       self.dict_attributs = {} 
91
92    def gener(self,node):
93       """
94       """
95       self.node=node
96       self.list_commandes=[];
97       self.generator(self.node.object)
98       return self.list_commandes
99
100    def generator(self,obj):
101       if (obj.nom in self.liste_motetat) and (self.calcule_ouinon(obj)):
102          PythonGenerator.generator(self,obj)
103       """
104         f1=PythonGenerator.generator(self,obj)
105       else :
106         return ""
107       """
108
109    def calcule_ouinon(self,obj):
110       ouinon=1
111       for l in obj.get_genealogie() :
112           if not l in self.liste_motetat :
113              ouinon=0
114              break
115       return ouinon
116
117        
118    def generETAPE(self,obj):
119       """
120       """
121       if obj.isvalid() == 0 :
122          showerror("Element non valide","Salome ne sait pas traiter les élements non valides")
123          return
124       for v in obj.mc_liste:
125          liste=self.generator(v)
126
127
128    def generMCSIMP(self,obj) :
129       """
130       """
131       #print "MCSIMP : ", obj.nom
132       if obj.nom in dir(self) :
133          suite = self.__class__.__dict__[obj.nom](self,obj)
134       else :
135          clef=self.dict_traduit[obj.nom]
136          self.dict_attributs[clef]=obj.val
137
138    def generMCFACT(self,obj):
139       """
140           Convertit un objet MCFACT en une liste de chaines de caractères à la
141           syntaxe python
142       """
143       self.init_ligne()
144       self.commande=self.dict_deb_com[obj.nom]
145       print self.commande
146       for v in obj.mc_liste:
147          self.generator(v)
148       #print self.commande
149       #print self.dict_attributs
150       if self.boolGpMa == 1:
151          self.list_commandes.append((self.commande,self.dict_attributs)) 
152       else :
153          showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
154
155    def generMCList(self,obj):
156       """
157       """
158       for mcfact in obj.data:
159           self.generator(mcfact)
160
161    def generMCBLOC(self,obj):
162       """
163       """
164       for v in obj.mc_liste:
165          self.generator(v)
166
167    def GROUP_MA(self,obj):
168       self.boolGpMa = 1
169       self.dict_attributs["Group_Maille"]=obj.val
170
171    def SECTION(self,obj):
172       assert (self.commande != "" )
173       if self.commande == "VisuCable" :
174          self.dict_attributs["R"]= math.sqrt(obj.val/math.pi).eval()
175       elif (self.commande !="VisuGrille")  :
176          self.commande=self.commande+self.dict_suite_com[obj.valeur]
177
178    def CARA(self,obj) :
179        self.clefs=obj.val
180        if type(self.clefs) == types.StringType :
181           self.clefs=(obj.val,)
182
183    def VALE(self,obj) :
184        atraiter=obj.val
185        if len(self.clefs) > 1 :
186            assert (len(atraiter) == len(self.clefs))
187        else :
188            atraiter=(atraiter,)
189        for k in range(len(atraiter)) :
190            clef=self.clefs[k]
191            val =atraiter[k] 
192            if isinstance (val, Extensions.parametre.PARAMETRE):
193               val=val.valeur
194               print val.__class__
195               context={}
196               if type(val) == type("aaa") :
197                  for p in self.jdc.params:
198                      context[p.nom]=eval(p.val,self.jdc.const_context, context)
199                      print context[p.nom]
200                  res=eval(val,self.jdc.const_context, context)
201                  val=res
202            self.dict_attributs[clef]=val
203
204    def ANGL_REP(self,obj) :
205       assert (len(obj.val) == 2)
206       alpha,beta=obj.val
207       self.dict_attributs["angleAlpha"]=alpha
208       self.dict_attributs["angleBeta"]=beta
209
210    def ORIG_AXE(self,obj) :
211       assert (len(obj.val) == 3)
212       alpha,beta,gamma=obj.val
213       self.dict_attributs["origAxeX"]=alpha
214       self.dict_attributs["origAxeY"]=beta
215       self.dict_attributs["origAxeZ"]=gamma
216
217    def AXE(self,obj) :
218       assert (len(obj.val) == 3)
219       alpha,beta,gamma=obj.val
220       self.dict_attributs["axeX"]=alpha
221       self.dict_attributs["axeY"]=beta
222       self.dict_attributs["axeZ"]=gamma
223