]> SALOME platform Git repositories - tools/eficas.git/blob - generator/generator_vers3DSalome.py
Salome HOME
gitignore V1
[tools/eficas.git] / generator / generator_vers3DSalome.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     python pour EFICAS.
23     PN
24
25 """
26 import traceback
27 import types,string,re
28 import math
29
30 from Noyau import N_CR
31 from Noyau.N_utils import repr_float
32 import Accas
33 import Extensions
34 from Extensions.parametre import ITEM_PARAMETRE
35 from Formatage import Formatage
36 from generator_python import PythonGenerator
37 #from Editeur.widgets import showerror
38
39 def entryPoint():
40    """
41        Retourne les informations nécessaires pour le chargeur de plugins
42
43        Ces informations sont retournées dans un dictionnaire
44    """
45    return {
46         # Le nom du plugin
47           'name' : 'vers3DSalome',
48         # La factory pour créer une instance du plugin
49           'factory' : vers3DSalomeGenerator,
50           }
51
52
53 class vers3DSalomeGenerator(PythonGenerator):
54    """
55        Ce generateur parcourt un objet AFFE-CARA_ELEM
56        et produit un fichier au format texte contenant
57        les instructions idl pour PAL 
58    """
59
60    def __init__(self,cr=None):
61       self.list_commandes=[];
62       self.jdc=None
63       self.node=None
64       self.clefs=None
65       self.liste_motetat = ("AFFE_CARA_ELEM", "ORIG_AXE", "AXE" , 
66                             "BARRE", "CABLE", "CARA", "COQUE", "EPAIS", 
67                             "EXCENTREMENT", "GROUP_MA", "ORIENTATION", 
68                             "POUTRE", "SECTION", "VALE", "VARI_SECT",
69                             "GRILLE", "ANGL_REP", "VECTEUR",
70                              "b_constant", "b_homothetique", 
71                             "b_rectangle", "b_affine", "b_cercle", "b_generale" )
72       self.dict_deb_com={"POUTRE":"VisuPoutre", "CABLE" : "VisuCable",
73                          "COQUE" : "VisuCoque", "GRILLE" : "VisuGrille",
74                          "ORIENTATION" : "Orientation", "BARRE" : "VisuBarre"}
75
76       self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale",
77                            "CERCLE":"Cercle"}
78
79       self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais","VECTEUR":"Vecteur"}
80
81       self.init_ligne() 
82
83    def init_jdc(self,jdc) :
84       self.jdc=jdc
85
86    def init_ligne (self) :
87       self.boolGpMa = 0
88       self.commande = ""
89       self.dict_attributs = {} 
90
91    def gener(self,node,config=None):
92       """
93       """
94       self.node=node
95       self.list_commandes=[];
96       self.generator(self.node.object)
97       #print self.list_commandes
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 elements 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, (types.TupleType, types.ListType)) and len(val) == 1:
196                val = val[0]
197            if isinstance (val, Extensions.parametre.PARAMETRE):
198               val=val.valeur
199               print val.__class__
200               context={}
201               if type(val) == type("aaa") :
202                  for p in self.jdc.params:
203                      context[p.nom]=eval(p.val,self.jdc.const_context, context)
204                      print context[p.nom]
205                  res=eval(val,self.jdc.const_context, context)
206                  val=res
207            self.dict_attributs[clef]=val
208
209    def ANGL_REP(self,obj) :
210       assert (len(obj.val) == 2)
211       alpha,beta=obj.val
212       self.dict_attributs["angleAlpha"]=alpha
213       self.dict_attributs["angleBeta"]=beta
214
215    def ORIG_AXE(self,obj) :
216       assert (len(obj.val) == 3)
217       alpha,beta,gamma=obj.val
218       self.dict_attributs["origAxeX"]=alpha
219       self.dict_attributs["origAxeY"]=beta
220       self.dict_attributs["origAxeZ"]=gamma
221
222    def AXE(self,obj) :
223       assert (len(obj.val) == 3)
224       alpha,beta,gamma=obj.val
225       self.dict_attributs["axeX"]=alpha
226       self.dict_attributs["axeY"]=beta
227       self.dict_attributs["axeZ"]=gamma