]> SALOME platform Git repositories - tools/eficas.git/blob - generator/generator_vers3DSalome.py
Salome HOME
5fdc6af6a88607a2d41d0d081dedcc2c2e7c5348
[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          pass
155
156    def generMCList(self,obj):
157       """
158       """
159       for mcfact in obj.data:
160           self.generator(mcfact)
161
162    def generMCBLOC(self,obj):
163       """
164       """
165       for v in obj.mc_liste:
166          self.generator(v)
167
168    def GROUP_MA(self,obj):
169       self.boolGpMa = 1
170       self.dict_attributs["Group_Maille"]=obj.val
171
172    def SECTION(self,obj):
173       assert (self.commande != "" )
174       if self.commande == "VisuCable" :
175          self.dict_attributs["R"]= math.sqrt(obj.val/math.pi).eval()
176       elif (self.commande !="VisuGrille")  :
177          self.commande=self.commande+self.dict_suite_com[obj.valeur]
178
179    def CARA(self,obj) :
180        self.clefs=obj.val
181        if type(self.clefs) == types.StringType :
182           self.clefs=(obj.val,)
183
184    def VALE(self,obj) :
185        atraiter=obj.val
186        if len(self.clefs) > 1 :
187            assert (len(atraiter) == len(self.clefs))
188        else :
189            atraiter=(atraiter,)
190        for k in range(len(atraiter)) :
191            clef=self.clefs[k]
192            val =atraiter[k] 
193            if isinstance (val, Extensions.parametre.PARAMETRE):
194               val=val.valeur
195               print val.__class__
196               context={}
197               if type(val) == type("aaa") :
198                  for p in self.jdc.params:
199                      context[p.nom]=eval(p.val,self.jdc.const_context, context)
200                      print context[p.nom]
201                  res=eval(val,self.jdc.const_context, context)
202                  val=res
203            self.dict_attributs[clef]=val
204
205    def ANGL_REP(self,obj) :
206       assert (len(obj.val) == 2)
207       alpha,beta=obj.val
208       self.dict_attributs["angleAlpha"]=alpha
209       self.dict_attributs["angleBeta"]=beta
210
211    def ORIG_AXE(self,obj) :
212       assert (len(obj.val) == 3)
213       alpha,beta,gamma=obj.val
214       self.dict_attributs["origAxeX"]=alpha
215       self.dict_attributs["origAxeY"]=beta
216       self.dict_attributs["origAxeZ"]=gamma
217
218    def AXE(self,obj) :
219       assert (len(obj.val) == 3)
220       alpha,beta,gamma=obj.val
221       self.dict_attributs["axeX"]=alpha
222       self.dict_attributs["axeY"]=beta
223       self.dict_attributs["axeZ"]=gamma
224