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 command="xdg-open "+maDoc+";"
68 subprocess.call(command, shell=True)
71 def PBOKPressed(self):
72 if not(self.PrepareLigneCommande()) : return
73 self.PBSavePressed(NomHypo=True)
74 maFenetre=MonViewText(self,self.commande)
75 if os.path.isfile(self.fichierOut) :self.enregistreResultat()
77 def enregistreResultat(self):
81 from salome.kernel import studyedit
83 maStudy=studyedit.getActiveStudy()
84 smesh.SetCurrentStudy(maStudy)
85 (outputMesh, status) = smesh.CreateMeshesFromGMF(self.fichierOut)
86 meshname = 'yams'+str(self.num)
87 smesh.SetName(outputMesh.GetMesh(), meshname)
91 self.editor = studyedit.getStudyEditor() #
92 moduleEntry=self.editor.findOrCreateComponent("SMESH","SMESH")
93 HypReMeshEntry = self.editor.findOrCreateItem( moduleEntry, name = 'HypoForRemesh',
94 comment = 'HypoForRemshing')
95 monStudyBuilder=maStudy.NewBuilder();
96 monStudyBuilder.NewCommand();
97 newStudyIter=monStudyBuilder.NewObject(HypReMeshEntry)
98 aNameAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeName")
99 hypoName = 'monHypo_Yams_'+str(self.num)
100 aNameAttrib.SetValue(hypoName)
101 aCommentAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeComment")
102 aCommentAttrib.SetValue(str(self.commande))
104 SOMesh=maStudy.FindObjectByName(meshname ,"SMESH")[0]
105 newLink=monStudyBuilder.NewObject(SOMesh)
106 monStudyBuilder.Addreference(newLink, newStudyIter);
107 if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(0)
111 def PBSavePressed(self,NomHypo=False):
112 if NomHypo : text = '# Params for Hypothese : monHypo_Yams_'+str(self.num - 1)+"\n"
113 else : text = '# Save intermediate params \n'
114 text += "# Params for mesh : " + self.LE_MeshSmesh.text() +'\n'
115 for RB in self.GBOptim.findChildren(QRadioButton,):
116 if RB.isChecked()==True:
117 text+="Optimisation ='"+RB.text()+"'\n"
119 for RB in self.GBUnit.findChildren(QRadioButton,):
120 if RB.isChecked()==True:
121 text+="Units ='"+RB.text()+"'\n"
122 text+='Chordal_Tolerance_Deviation='+str(self.SP_Tolerance.value())+'\n'
124 text+='Ridge_Detection=' + str(self.CB_Ridge.isChecked())+'\n'
125 text+='Split_Edge=' + str(self.CB_SplitEdge.isChecked())+'\n'
126 text+='Point_Smoothing=' + str(self.CB_Point.isChecked())+'\n'
127 text+='Geometrical_Approximation='+ str(self.SP_Geomapp.value()) +'\n'
128 text+='Ridge_Angle=' + str(self.SP_Ridge.value()) +'\n'
129 text+='Maximum_Size=' + str(self.SP_MaxSize.value()) +'\n'
130 text+='Minimum_Size=' + str(self.SP_MaxSize.value()) +'\n'
131 text+='Mesh_Gradation=' + str(self.SP_Gradation.value())+'\n'
133 text+='Verbosity=' + str(self.SP_Verbosity.value())+'\n'
134 text+='Memory=' + str(self.SP_Memory.value())+'\n'
138 f=open(self.paramsFile,'a')
140 QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
145 QMessageBox.warning( self, "File", "Unable to write "+self.paramsFile)
149 def PBLoadPressed(self):
151 f=open(self.paramsFile,'r')
153 QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
158 QMessageBox.warning( self, "File", "Unable to read "+self.paramsFile)
163 for RB in self.GBOptim.findChildren(QRadioButton,):
164 if d['Optimisation']== RB.text():
167 for RB in self.GBUnit.findChildren(QRadioButton,):
168 if d['Units']== RB.text():
171 self.SP_Tolerance.setValue(d['Chordal_Tolerance_Deviation'])
173 self.CB_Ridge.setChecked(d['Ridge_Detection'])
174 self.CB_Point.setChecked(d['Point_Smoothing'])
175 self.CB_SplitEdge.setChecked(d['Split_Edge'])
176 self.SP_Geomapp.setValue(d['Geometrical_Approximation'])
177 self.SP_Ridge.setValue(d['Ridge_Angle'])
178 self.SP_MaxSize.setValue(d['Maximum_Size'])
179 self.SP_MinSize.setValue(d['Minimum_Size'])
180 self.SP_Gradation.setValue(d['Mesh_Gradation'])
182 self.SP_Verbosity.setValue(d['Verbosity'])
183 self.SP_Memory.setValue(d['Memory'])
186 def PBCancelPressed(self):
189 def PBMeshFilePressed(self):
190 fd = QFileDialog(self, "select an existing Mesh file", self.LE_MeshFile.text(), "Mesh-Files (*.mesh);;All Files (*)")
192 infile = fd.selectedFiles()[0]
193 self.LE_MeshFile.setText(infile)
194 self.fichierIn=infile.toLatin1()
196 def setParamsFileName(self):
197 fd = QFileDialog(self, "select a file", self.LE_ParamsFile.text(), "dat Files (*.dat);;All Files (*)")
199 infile = fd.selectedFiles()[0]
200 self.LE_ParamsFile.setText(infile)
201 self.paramsFile=infile.toLatin1()
204 def meshFileNameChanged(self):
205 self.fichierIn=self.LE_MeshFile.text()
206 if os.path.exists(self.fichierIn): return
207 QMessageBox.warning( self, "Unknown File", "File doesn't exist")
209 def paramsFileNameChanged(self):
210 self.paramsFile=self.LE_ParamsFile.text()
212 def PBMeshSmeshPressed(self):
215 from salome.kernel import studyedit
216 from salome.smesh.smeshstudytools import SMeshStudyTools
217 from salome.gui import helper as guihelper
218 from omniORB import CORBA
220 mySObject, myEntry = guihelper.getSObjectSelected()
221 if CORBA.is_nil(mySObject) or mySObject==None:
222 QMessageBox.critical(self, "Mesh", "select an input mesh")
224 self.smeshStudyTool = SMeshStudyTools()
225 self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject)
226 if CORBA.is_nil(self.__selectedMesh):
227 QMessageBox.critical(self, "Mesh", "select an input mesh")
229 myName = mySObject.GetName()
231 self.LE_MeshSmesh.setText(myName)
233 def prepareFichier(self):
234 self.fichierIn="/tmp/PourYam_"+str(self.num)+".mesh"
236 self.__selectedMesh.ExportGMF(self.__selectedMesh,self.fichierIn, True)
238 def PrepareLigneCommande(self):
239 self.commande="yams "
240 verbosity=str(self.SP_Verbosity.value())
241 self.commande+="-v "+verbosity
242 for obj in self.mesRB.children():
245 self.style=obj.objectName().remove(0,3)
246 self.style.replace("_","-")
250 self.commande+=" -O "+self.style.toLatin1()
251 if self.fichierIn=="" and self.MeshIn=="" :
252 QMessageBox.critical(self, "Mesh", "select an input mesh")
254 if self.MeshIn!="" : self.prepareFichier()
255 if not (os.path.isfile(self.fichierIn)):
256 QMessageBox.critical(self, "File", "unable to read GMF Mesh in "+str(self.fichierIn))
259 deb=os.path.splitext(self.fichierIn)
260 self.fichierOut=deb[0]+'.d.meshb'
262 if self.RB_Absolute.isChecked()==True :
263 self.commande+=' -Dabsolute'
265 self.commande+=' -Drelative'
266 self.commande+=',tolerance=%f'%self.SP_Tolerance.value()
267 if self.CB_Ridge.isChecked()==False : self.commande+=',nr'
268 if self.CB_Point.isChecked()==False : self.commande+=',ns'
269 if self.SP_Geomapp.value()!=0.04 : self.commande+=',geomapp=%f'%self.SP_Geomapp.value()
270 if self.SP_Ridge.value()!=45.0 : self.commande+=',ridge=%f'%self.SP_Ridge.value()
271 if self.SP_MaxSize.value()!=100 : self.commande+=',maxsize=%f'%self.SP_MaxSize.value()
272 if self.SP_MinSize.value()!=5 : self.commande+=',minsize=%f'%self.SP_MinSize.value()
273 if self.SP_Gradation.value()!=1.3 : self.commande+=',gradation=%f'%self.SP_MaxSize.value()
274 if self.CB_SplitEdge.isChecked()==True : self.commande+=',splitedge=1'
276 if self.SP_Verbosity.value()!=3 : self.commande+=' -v %d'%self.SP_Verbosity.value()
277 if self.SP_Memory.value()!=0 : self.commande+=' -m %d'%self.SP_Memory.value()
279 self.commande+=" "+self.fichierIn
283 self.RB_0.setChecked(True)
284 self.RB_G.setChecked(False)
285 self.RB_U.setChecked(False)
286 self.RB_S.setChecked(False)
287 self.RB_2.setChecked(False)
288 self.RB_1.setChecked(False)
289 self.RB_Absolute.setChecked(False)
290 self.RB_Relative.setChecked(True)
291 self.SP_Tolerance.setProperty("value", 0.1)
292 self.SP_Geomapp.setProperty("value", 0.04)
293 self.SP_Ridge.setProperty("value", 45.0)
294 self.SP_Gradation.setProperty("value", 1.3)
295 self.CB_Ridge.setChecked(True)
296 self.CB_Point.setChecked(True)
297 self.CB_SplitEdge.setChecked(False)
298 self.SP_MaxSize.setProperty("value", -2.0)
299 self.SP_MinSize.setProperty("value", -2.0)
300 self.SP_Verbosity.setProperty("value", 3)
301 self.SP_Memory.setProperty("value", 0)
307 This function returns a singleton instance of the plugin dialog.
308 c est obligatoire pour faire un show sans parent...
312 __dialog = MonYamsPlugDialog()