1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2012 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
24 from YamsPlugDialog import Ui_YamsPlugDialog
25 from monViewText import MonViewText
26 from PyQt4.QtGui import *
27 from PyQt4.QtCore import *
30 class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
34 QWidget.__init__(self)
36 self.connecterSignaux()
42 # Ces parametres ne sont pas remis à rien par le clean
43 self.paramsFile= os.path.abspath(os.path.join(os.environ['HOME'],'.yams.dat'))
44 self.LE_ParamsFile.setText(self.paramsFile)
45 self.LE_MeshFile.setText("")
46 self.LE_MeshSmesh.setText("")
48 def connecterSignaux(self) :
49 self.connect(self.PB_Cancel,SIGNAL("clicked()"),self.PBCancelPressed)
50 self.connect(self.PB_Default,SIGNAL("clicked()"),self.clean)
51 self.connect(self.PB_Help,SIGNAL("clicked()"),self.PBHelpPressed)
52 self.connect(self.PB_Load,SIGNAL("clicked()"),self.PBLoadPressed)
53 self.connect(self.PB_OK,SIGNAL("clicked()"),self.PBOKPressed)
54 self.connect(self.PB_Save,SIGNAL("clicked()"),self.PBSavePressed)
55 self.connect(self.PB_MeshFile,SIGNAL("clicked()"),self.PBMeshFilePressed)
56 self.connect(self.PB_MeshSmesh,SIGNAL("clicked()"),self.PBMeshSmeshPressed)
57 self.connect(self.PB_ParamsFileExplorer,SIGNAL("clicked()"),self.setParamsFileName)
58 self.connect(self.LE_MeshFile,SIGNAL("returnPressed()"),self.meshFileNameChanged)
59 self.connect(self.LE_ParamsFile,SIGNAL("returnPressed()"),self.paramsFileNameChanged)
62 def PBHelpPressed(self):
64 maDoc=os.environ['DISTENE_YAMS_DOC_PDF']
66 QMessageBox.warning( self, "Help unavailable", str(maDoc) + " not found")
67 old_ld=os.getenv("LD_LIBRARY_PATH")
68 command="unset LD_LIBRARY_PATH;"
69 command+="xdg-open "+maDoc+";"
70 command+="export LD_LIBRARY_PATH=%s"%old_ld
74 def PBOKPressed(self):
75 if not(self.PrepareLigneCommande()) : return
76 self.PBSavePressed(NomHypo=True)
77 maFenetre=MonViewText(self,self.commande)
78 if os.path.isfile(self.fichierOut) :self.enregistreResultat()
80 def enregistreResultat(self):
84 from salome.kernel import studyedit
86 maStudy=studyedit.getActiveStudy()
87 smesh.SetCurrentStudy(maStudy)
88 (outputMesh, status) = smesh.CreateMeshesFromGMF(self.fichierOut)
89 meshname = 'yams'+str(self.num)
90 smesh.SetName(outputMesh.GetMesh(), meshname)
94 self.editor = studyedit.getStudyEditor() #
95 moduleEntry=self.editor.findOrCreateComponent("SMESH","SMESH")
96 HypReMeshEntry = self.editor.findOrCreateItem( moduleEntry, name = 'HypoForRemesh',
97 comment = 'HypoForRemshing')
98 monStudyBuilder=maStudy.NewBuilder();
99 monStudyBuilder.NewCommand();
100 newStudyIter=monStudyBuilder.NewObject(HypReMeshEntry)
101 aNameAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeName")
102 hypoName = 'monHypo_Yams_'+str(self.num)
103 aNameAttrib.SetValue(hypoName)
104 aCommentAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeComment")
105 aCommentAttrib.SetValue(str(self.commande))
107 SOMesh=maStudy.FindObjectByName(meshname ,"SMESH")[0]
108 newLink=monStudyBuilder.NewObject(SOMesh)
109 monStudyBuilder.Addreference(newLink, newStudyIter);
110 if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(0)
114 def PBSavePressed(self,NomHypo=False):
115 if NomHypo : text = '# Params for Hypothese : monHypo_Yams_'+str(self.num - 1)+"\n"
116 else : text = '# Save intermediate params \n'
117 text += "# Params for mesh : " + self.LE_MeshSmesh.text() +'\n'
118 for RB in self.GBOptim.findChildren(QRadioButton,):
119 if RB.isChecked()==True:
120 text+="Optimisation ='"+RB.text()+"'\n"
122 for RB in self.GBUnit.findChildren(QRadioButton,):
123 if RB.isChecked()==True:
124 text+="Units ='"+RB.text()+"'\n"
125 text+='Chordal_Tolerance_Deviation='+str(self.SP_Tolerance.value())+'\n'
127 text+='Ridge_Detection=' + str(self.CB_Ridge.isChecked())+'\n'
128 text+='Split_Edge=' + str(self.CB_SplitEdge.isChecked())+'\n'
129 text+='Point_Smoothing=' + str(self.CB_Point.isChecked())+'\n'
130 text+='Geometrical_Approximation='+ str(self.SP_Geomapp.value()) +'\n'
131 text+='Ridge_Angle=' + str(self.SP_Ridge.value()) +'\n'
132 text+='Maximum_Size=' + str(self.SP_MaxSize.value()) +'\n'
133 text+='Minimum_Size=' + str(self.SP_MaxSize.value()) +'\n'
134 text+='Mesh_Gradation=' + str(self.SP_Gradation.value())+'\n'
136 text+='Verbosity=' + str(self.SP_Verbosity.value())+'\n'
137 text+='Memory=' + str(self.SP_Memory.value())+'\n'
141 f=open(self.paramsFile,'a')
143 QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
148 QMessageBox.warning( self, "File", "Unable to write "+self.paramsFile)
152 def PBLoadPressed(self):
154 f=open(self.paramsFile,'r')
156 QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
161 QMessageBox.warning( self, "File", "Unable to read "+self.paramsFile)
166 for RB in self.GBOptim.findChildren(QRadioButton,):
167 if d['Optimisation']== RB.text():
170 for RB in self.GBUnit.findChildren(QRadioButton,):
171 if d['Units']== RB.text():
174 self.SP_Tolerance.setValue(d['Chordal_Tolerance_Deviation'])
176 self.CB_Ridge.setChecked(d['Ridge_Detection'])
177 self.CB_Point.setChecked(d['Point_Smoothing'])
178 self.CB_SplitEdge.setChecked(d['Split_Edge'])
179 self.SP_Geomapp.setValue(d['Geometrical_Approximation'])
180 self.SP_Ridge.setValue(d['Ridge_Angle'])
181 self.SP_MaxSize.setValue(d['Maximum_Size'])
182 self.SP_MinSize.setValue(d['Minimum_Size'])
183 self.SP_Gradation.setValue(d['Mesh_Gradation'])
185 self.SP_Verbosity.setValue(d['Verbosity'])
186 self.SP_Memory.setValue(d['Memory'])
189 def PBCancelPressed(self):
192 def PBMeshFilePressed(self):
193 fd = QFileDialog(self, "select an existing Mesh file", self.LE_MeshFile.text(), "Mesh-Files (*.mesh);;All Files (*)")
195 infile = fd.selectedFiles()[0]
196 self.LE_MeshFile.setText(infile)
197 self.fichierIn=infile.toLatin1()
199 def setParamsFileName(self):
200 fd = QFileDialog(self, "select a file", self.LE_ParamsFile.text(), "dat Files (*.dat);;All Files (*)")
202 infile = fd.selectedFiles()[0]
203 self.LE_ParamsFile.setText(infile)
204 self.paramsFile=infile.toLatin1()
207 def meshFileNameChanged(self):
208 self.fichierIn=self.LE_MeshFile.text()
209 if os.path.exists(self.fichierIn): return
210 QMessageBox.warning( self, "Unknown File", "File doesn't exist")
212 def paramsFileNameChanged(self):
213 self.paramsFile=self.LE_ParamsFile.text()
215 def PBMeshSmeshPressed(self):
218 from salome.kernel import studyedit
219 from salome.smesh.smeshstudytools import SMeshStudyTools
220 from salome.gui import helper as guihelper
221 from omniORB import CORBA
223 mySObject, myEntry = guihelper.getSObjectSelected()
224 if CORBA.is_nil(mySObject) or mySObject==None:
225 QMessageBox.critical(self, "Mesh", "select an input mesh")
227 self.smeshStudyTool = SMeshStudyTools()
228 self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject)
229 if CORBA.is_nil(self.__selectedMesh):
230 QMessageBox.critical(self, "Mesh", "select an input mesh")
232 myName = mySObject.GetName()
234 self.LE_MeshSmesh.setText(myName)
236 def prepareFichier(self):
237 self.fichierIn="/tmp/PourYam_"+str(self.num)+".mesh"
239 self.__selectedMesh.ExportGMF(self.__selectedMesh,self.fichierIn, True)
241 def PrepareLigneCommande(self):
242 self.commande="yams "
243 verbosity=str(self.SP_Verbosity.value())
244 self.commande+="-v "+verbosity
245 for obj in self.mesRB.children():
248 self.style=obj.objectName().remove(0,3)
249 self.style.replace("_","-")
253 self.commande+=" -O "+self.style.toLatin1()
254 if self.fichierIn=="" and self.MeshIn=="" :
255 QMessageBox.critical(self, "Mesh", "select an input mesh")
257 if self.MeshIn!="" : self.prepareFichier()
258 if not (os.path.isfile(self.fichierIn)):
259 QMessageBox.critical(self, "File", "unable to read GMF Mesh in "+str(self.fichierIn))
262 deb=os.path.splitext(self.fichierIn)
263 self.fichierOut=deb[0]+'.d.meshb'
265 if self.RB_Absolute.isChecked()==True :
266 self.commande+=' -Dabsolute'
268 self.commande+=' -Drelative'
269 self.commande+=',tolerance=%f'%self.SP_Tolerance.value()
270 if self.CB_Ridge.isChecked()==False : self.commande+=',nr'
271 if self.CB_Point.isChecked()==False : self.commande+=',ns'
272 if self.SP_Geomapp.value()!=0.04 : self.commande+=',geomapp=%f'%self.SP_Geomapp.value()
273 if self.SP_Ridge.value()!=45.0 : self.commande+=',ridge=%f'%self.SP_Ridge.value()
274 if self.SP_MaxSize.value()!=100 : self.commande+=',maxsize=%f'%self.SP_MaxSize.value()
275 if self.SP_MinSize.value()!=5 : self.commande+=',minsize=%f'%self.SP_MinSize.value()
276 if self.SP_Gradation.value()!=1.3 : self.commande+=',gradation=%f'%self.SP_MaxSize.value()
277 if self.CB_SplitEdge.isChecked()==True : self.commande+=',splitedge=1'
279 if self.SP_Verbosity.value()!=3 : self.commande+=' -v %d'%self.SP_Verbosity.value()
280 if self.SP_Memory.value()!=0 : self.commande+=' -m %d'%self.SP_Memory.value()
282 self.commande+=" "+self.fichierIn
286 self.RB_0.setChecked(True)
287 self.RB_G.setChecked(False)
288 self.RB_U.setChecked(False)
289 self.RB_S.setChecked(False)
290 self.RB_2.setChecked(False)
291 self.RB_1.setChecked(False)
292 self.RB_Absolute.setChecked(False)
293 self.RB_Relative.setChecked(True)
294 self.SP_Tolerance.setProperty("value", 0.1)
295 self.SP_Geomapp.setProperty("value", 0.04)
296 self.SP_Ridge.setProperty("value", 45.0)
297 self.SP_Gradation.setProperty("value", 1.3)
298 self.CB_Ridge.setChecked(True)
299 self.CB_Point.setChecked(True)
300 self.CB_SplitEdge.setChecked(False)
301 self.SP_MaxSize.setProperty("value", -2.0)
302 self.SP_MinSize.setProperty("value", -2.0)
303 self.SP_Verbosity.setProperty("value", 3)
304 self.SP_Memory.setProperty("value", 0)
310 This function returns a singleton instance of the plugin dialog.
311 c est obligatoire pour faire un show sans parent...
315 __dialog = MonYamsPlugDialog()