]> SALOME platform Git repositories - tools/eficas.git/blob - generator/generator_vers3DSalome.py
Salome HOME
CCAR: rabattre la version V1_15a4 dans la branche principale
[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       if obj.nom in dir(self) :
132          suite = self.__class__.__dict__[obj.nom](self,obj)
133       else :
134          clef=self.dict_traduit[obj.nom]
135          # Traitement des parametres
136          try :
137              self.dict_attributs[clef]=obj.val.eval()
138          except :
139              self.dict_attributs[clef]=obj.val
140
141
142    def generMCFACT(self,obj):
143       """
144           Convertit un objet MCFACT en une liste de chaines de caractères à la
145           syntaxe python
146       """
147       self.init_ligne()
148       self.commande=self.dict_deb_com[obj.nom]
149       for v in obj.mc_liste:
150          self.generator(v)
151       if self.boolGpMa == 1:
152          self.list_commandes.append((self.commande,self.dict_attributs)) 
153       else :
154          #showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
155          print ("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
156          pass
157
158    def generMCList(self,obj):
159       """
160       """
161       for mcfact in obj.data:
162           self.generator(mcfact)
163
164    def generMCBLOC(self,obj):
165       """
166       """
167       for v in obj.mc_liste:
168          self.generator(v)
169
170    def GROUP_MA(self,obj):
171       self.boolGpMa = 1
172       self.dict_attributs["Group_Maille"]=obj.val
173
174    def SECTION(self,obj):
175       assert (self.commande != "" )
176       if self.commande == "VisuCable" :
177          self.dict_attributs["R"]= math.sqrt(obj.val/math.pi).eval()
178       elif (self.commande !="VisuGrille")  :
179          self.commande=self.commande+self.dict_suite_com[obj.valeur]
180
181    def CARA(self,obj) :
182        self.clefs=obj.val
183        if type(self.clefs) == types.StringType :
184           self.clefs=(obj.val,)
185
186    def VALE(self,obj) :
187        atraiter=obj.val
188        if len(self.clefs) > 1 :
189            assert (len(atraiter) == len(self.clefs))
190        else :
191            atraiter=(atraiter,)
192        for k in range(len(atraiter)) :
193            clef=self.clefs[k]
194            val =atraiter[k] 
195            if isinstance (val, Extensions.parametre.PARAMETRE):
196               val=val.valeur
197               print val.__class__
198               context={}
199               if type(val) == type("aaa") :
200                  for p in self.jdc.params:
201                      context[p.nom]=eval(p.val,self.jdc.const_context, context)
202                      print context[p.nom]
203                  res=eval(val,self.jdc.const_context, context)
204                  val=res
205            self.dict_attributs[clef]=val
206
207    def ANGL_REP(self,obj) :
208       assert (len(obj.val) == 2)
209       alpha,beta=obj.val
210       self.dict_attributs["angleAlpha"]=alpha
211       self.dict_attributs["angleBeta"]=beta
212
213    def ORIG_AXE(self,obj) :
214       assert (len(obj.val) == 3)
215       alpha,beta,gamma=obj.val
216       self.dict_attributs["origAxeX"]=alpha
217       self.dict_attributs["origAxeY"]=beta
218       self.dict_attributs["origAxeZ"]=gamma
219
220    def AXE(self,obj) :
221       assert (len(obj.val) == 3)
222       alpha,beta,gamma=obj.val
223       self.dict_attributs["axeX"]=alpha
224       self.dict_attributs["axeY"]=beta
225       self.dict_attributs["axeZ"]=gamma
226