1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 Ce module contient le plugin generateur de fichier au format
27 import types,string,re
30 from Noyau import N_CR
31 from Noyau.N_utils import repr_float
34 from Extensions.parametre import ITEM_PARAMETRE
35 from Formatage import Formatage
36 from generator_python import PythonGenerator
37 #from Editeur.widgets import showerror
41 Retourne les informations necessaires pour le chargeur de plugins
43 Ces informations sont retournees dans un dictionnaire
47 'name' : 'vers3DSalome',
48 # La factory pour creer une instance du plugin
49 'factory' : vers3DSalomeGenerator,
53 class vers3DSalomeGenerator(PythonGenerator):
55 Ce generateur parcourt un objet AFFE-CARA_ELEM
56 et produit un fichier au format texte contenant
57 les instructions idl pour PAL
60 def __init__(self,cr=None):
61 self.list_commandes=[];
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"}
76 self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale",
79 self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais","VECTEUR":"Vecteur"}
83 def init_jdc(self,jdc) :
86 def init_ligne (self) :
89 self.dict_attributs = {}
91 def gener(self,node,config=None,appli=None):
95 self.list_commandes=[];
96 self.generator(self.node.object)
97 return self.list_commandes
99 def generator(self,obj):
100 if (obj.nom in self.liste_motetat) and (self.calcule_ouinon(obj)):
101 PythonGenerator.generator(self,obj)
103 f1=PythonGenerator.generator(self,obj)
108 def calcule_ouinon(self,obj):
110 for l in obj.get_genealogie() :
111 if not l in self.liste_motetat :
117 def generETAPE(self,obj):
120 if obj.isvalid() == 0 :
121 #showerror("Element non valide","Salome ne sait pas traiter les elements non valides")
123 for v in obj.mc_liste:
124 liste=self.generator(v)
126 def generMACRO_ETAPE(self,obj):
129 if obj.isvalid() == 0 :
130 #showerror("Element non valide","Salome ne sait pas traiter les elements non valides")
132 for v in obj.mc_liste:
133 liste=self.generator(v)
136 def generMCSIMP(self,obj) :
139 if obj.nom in dir(self) :
140 suite = self.__class__.__dict__[obj.nom](self,obj)
142 clef=self.dict_traduit[obj.nom]
143 # Traitement des parametres
145 self.dict_attributs[clef]=obj.val.eval()
147 self.dict_attributs[clef]=obj.val
150 def generMCFACT(self,obj):
152 Convertit un objet MCFACT en une liste de chaines de caracteres a la
156 self.commande=self.dict_deb_com[obj.nom]
157 for v in obj.mc_liste:
159 if self.boolGpMa == 1:
160 self.list_commandes.append((self.commande,self.dict_attributs))
162 #showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
163 print ("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
166 def generMCList(self,obj):
169 for mcfact in obj.data:
170 self.generator(mcfact)
172 def generMCBLOC(self,obj):
175 for v in obj.mc_liste:
178 def GROUP_MA(self,obj):
180 self.dict_attributs["Group_Maille"]=obj.val
182 def SECTION(self,obj):
183 assert (self.commande != "" )
184 if self.commande == "VisuCable" :
185 self.dict_attributs["R"]= math.sqrt(obj.val/math.pi).eval()
186 elif (self.commande !="VisuGrille") :
187 self.commande=self.commande+self.dict_suite_com[obj.valeur]
191 if type(self.clefs) == types.StringType :
192 self.clefs=(obj.val,)
196 if len(self.clefs) > 1 :
197 assert (len(atraiter) == len(self.clefs))
200 for k in range(len(atraiter)) :
203 if isinstance(val, (types.TupleType, types.ListType)) and len(val) == 1:
205 if isinstance (val, Extensions.parametre.PARAMETRE):
209 if type(val) == type("aaa") :
210 for p in self.jdc.params:
211 context[p.nom]=eval(p.val,self.jdc.const_context, context)
212 print (context[p.nom])
213 res=eval(val,self.jdc.const_context, context)
215 self.dict_attributs[clef]=val
217 def ANGL_REP(self,obj) :
218 assert (len(obj.val) == 2)
220 self.dict_attributs["angleAlpha"]=alpha
221 self.dict_attributs["angleBeta"]=beta
223 def ORIG_AXE(self,obj) :
224 assert (len(obj.val) == 3)
225 alpha,beta,gamma=obj.val
226 self.dict_attributs["origAxeX"]=alpha
227 self.dict_attributs["origAxeY"]=beta
228 self.dict_attributs["origAxeZ"]=gamma
231 assert (len(obj.val) == 3)
232 alpha,beta,gamma=obj.val
233 self.dict_attributs["axeX"]=alpha
234 self.dict_attributs["axeY"]=beta
235 self.dict_attributs["axeZ"]=gamma