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
20 """Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS.
22 from __future__ import absolute_import
23 from __future__ import print_function
25 from builtins import str
29 texte_debut="#include <Zcracks_base.z7p> \n int main() \n{ \n init_var();\n"
30 texte_debut+=' format="med";\n'
33 from Extensions.i18n import tr
34 from .generator_python import PythonGenerator
35 #ListeConcatene=('ridge_names','topo_names','geom_names','elset_names','faset_names','liset_names','nset_names','center','normal','dir')
36 ListeConcatene=('ridge_names','topo_names','geom_names','elset_names','faset_names','liset_names','nset_names')
37 ListeConcatene2=('center','normal','dir')
38 ListeConcatene3=('ra','rb')
43 Retourne les informations necessaires pour le chargeur de plugins
44 Ces informations sont retournees dans un dictionnaire
49 # La factory pour creer une instance du plugin
50 'factory' : ZCrackGenerator,
54 class ZCrackGenerator(PythonGenerator):
56 Ce generateur parcourt un objet de type JDC et produit
57 un texte au format eficas et
58 un texte au format dictionnaire
61 # Les extensions de fichier permis?
64 #----------------------------------------------------------------------------------------
65 def gener(self,obj,format='brut',config=None):
69 # Cette instruction genere le contenu du fichier de commandes (persistance)
70 self.text=PythonGenerator.gener(self,obj,format)
74 #----------------------------------------------------------------------------------------
76 #----------------------------------------------------------------------------------------
79 self.textePourRun = texte_debut
82 #----------------------------------------------------------------------------------------
84 #----------------------------------------------------------------------------------------
86 def writeDefault(self,fn) :
87 fileZcrack = fn[:fn.rfind(".")] + '.z7p'
88 f = open( str(fileZcrack), 'wb')
89 print((self.textePourRun))
92 self.textePourRunAvecDouble=self.textePourRun.replace("'",'"')
93 f.write( self.textePourRunAvecDouble)
97 self.textePourRun+=" write_mesh_crack();\n"
98 self.textePourRun+=" do_mesh_crack(0);\n"
99 self.textePourRun+=" write_refine_mesh();\n"
100 self.textePourRun+=" do_refine_mesh(0);\n"
101 self.textePourRun+=" write_cut_mesh();\n"
102 self.textePourRun+=" do_cut_mesh(0);\n"
103 # self.textePourRun+=" nice_cut("+str(self.maximum_aspect_ratio)+");\n"
104 self.textePourRun+=' export_mesh("'+self.cracked_name+'","med");\n'
105 self.textePourRun+="}"
107 #----------------------------------------------------------------------------------------
108 # analyse de chaque noeud de l'arbre
109 #----------------------------------------------------------------------------------------
111 def generMCSIMP(self,obj) :
112 """recuperation de l objet MCSIMP"""
114 s=PythonGenerator.generMCSIMP(self,obj)
115 if obj.nom=="sane_name" :
116 self.textePourRun+=' import_mesh("'+obj.val+'", "med");\n'
117 if obj.nom in ListeConcatene :
118 # obj.val=obj.val+" "
122 # pickle.dump( stringListe, open( "/home/H60874/test.pickle", "wb" ) )
123 # self.textePourRun+=" "+obj.nom+ "='"+ stringListe[0:-1]+ "';\n"
124 # self.textePourRun+=" "+obj.nom+ "='"+ stringListe+ "';\n"
126 if obj.nom in ListeConcatene3 :
128 self.textePourRun+=" "+"if_ellipse=1;\n"
129 self.textePourRun+=" "+obj.nom+ "="+str(obj.val)+";\n"
130 if_ellipse_ellipse=True
133 if obj.nom in ListeConcatene2 :
135 # self.textePourRun+="GGGGGGG%"+obj.nom+"\n"
138 stringListe+=str(val)+","
139 self.textePourRun+=" "+obj.nom+ "=set_vector3("+ stringListe[0:-1]+ ");\n"
141 # self.textePourRun+=" "+obj.nom+ str(obj.val+ ";\n"
142 # stringListe+=str(val)+" "
143 # self.textePourRun+=" "+obj.nom+ "=set_vector3("+stringListe[0]+","+stringListe[1]+","+stringListe[2]+");\n"
144 # self.textePourRun+=" "+obj.nom+ "=set_vector3("+obj.val+","+");\n"
146 # if obj.nom=="center" :
147 # self.textePourRun+=" set_vector3("+obj.val+'");\n"
148 # if obj.nom=="center" :
149 # self.textePourRun+=" set_vector3("+obj.val+'");\n"
150 # if obj.nom=="normal" :
151 # self.textePourRun+=" set_vector3("+obj.val+'");\n"
152 # if obj.nom=="dir" :
153 # self.textePourRun+=" set_vector3("+obj.val+'");\n"
154 if obj.nom=="elset_radius" :
155 self.textePourRun+=" if_must_define_elset=1;\n"
158 if obj.nom=="cracked_name" : self.cracked_name=obj.val
159 if obj.nom=="maximum_aspect_ratio" : self.maximum_aspect_ratio=obj.val
160 if obj.nom=="repertoire" :
161 print ("PNPNPN a traiter")
163 self.textePourRun+=" "+obj.nom+ "=" + s[0:-1]+ ";\n"
167 # si repertoire on change tous les noms de fichier
168 # exple repertoire='/home' __> fichier='/home/crack.med