Salome HOME
BOUNDARY... dans Telemac2D
[tools/eficas.git] / generator / generator_ZCracks.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 """Ce module contient le plugin generateur de fichier au format  Code_Carmel3D pour EFICAS.
21 """
22 from __future__ import absolute_import
23 from __future__ import print_function
24 try :
25    from builtins import str
26 except : pass
27
28 import pickle
29 texte_debut="#include <Zcracks_base.z7p> \n int main() \n{ \n   init_var();\n"
30 texte_debut+='   format="med";\n'
31 import traceback
32 import types,re,os
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')
39 if_ellipse=False
40
41 def entryPoint():
42    """
43       Retourne les informations necessaires pour le chargeur de plugins
44       Ces informations sont retournees dans un dictionnaire
45    """
46    return {
47         # Le nom du plugin
48           'name' : 'ZCRACKS',
49         # La factory pour creer une instance du plugin
50           'factory' : ZCrackGenerator,
51           }
52
53
54 class ZCrackGenerator(PythonGenerator):
55    """
56       Ce generateur parcourt un objet de type JDC et produit
57       un texte au format eficas et 
58       un texte au format dictionnaire
59
60    """
61    # Les extensions de fichier permis?
62    extensions=('.comm',)
63
64 #----------------------------------------------------------------------------------------
65    def gener(self,obj,format='brut',config=None):
66
67       self.initDico()
68
69       # Cette instruction genere le contenu du fichier de commandes (persistance)
70       self.text=PythonGenerator.gener(self,obj,format)
71       return self.text
72
73
74 #----------------------------------------------------------------------------------------
75 # initialisations
76 #----------------------------------------------------------------------------------------
77    
78    def initDico(self) :
79       self.textePourRun = texte_debut
80
81
82 #----------------------------------------------------------------------------------------
83 # ecriture
84 #----------------------------------------------------------------------------------------
85
86    def writeDefault(self,fn) :
87         fileZcrack = fn[:fn.rfind(".")] + '.z7p'
88         f = open( str(fileZcrack), 'wb')
89         print((self.textePourRun))
90       
91         self.ajoutRun()
92         self.textePourRunAvecDouble=self.textePourRun.replace("'",'"')
93         f.write( self.textePourRunAvecDouble)
94         f.close()
95
96    def ajoutRun(self) :
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+="}"
106
107 #----------------------------------------------------------------------------------------
108 #  analyse de chaque noeud de l'arbre 
109 #----------------------------------------------------------------------------------------
110
111    def generMCSIMP(self,obj) :
112         """recuperation de l objet MCSIMP"""
113         #print dir(obj)
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+" "
119            stringListe=""
120            for val in obj.val:
121                stringListe+=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"
125            return s
126         if obj.nom in ListeConcatene3 :
127            if (obj.nom=="ra") :
128               self.textePourRun+="   "+"if_ellipse=1;\n" 
129            self.textePourRun+="   "+obj.nom+ "="+str(obj.val)+";\n"
130            if_ellipse_ellipse=True
131            return s
132
133         if obj.nom in ListeConcatene2 : 
134            stringListe=""
135 #           self.textePourRun+="GGGGGGG%"+obj.nom+"\n"
136 #           if (len(val)>1) :
137            for val in obj.val:
138                stringListe+=str(val)+","
139            self.textePourRun+="   "+obj.nom+ "=set_vector3("+ stringListe[0:-1]+ ");\n"
140 #           else :
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"
145            return s
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"
156
157
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")
162            return s
163         self.textePourRun+="   "+obj.nom+ "=" + s[0:-1]+ ";\n"
164         return s
165
166   
167 # si repertoire on change tous les noms de fichier
168 # exple repertoire='/home' __> fichier='/home/crack.med