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
25 from YamsPlugDialog import Ui_YamsPlugDialog
26 from monViewText import MonViewText
27 from PyQt4.QtGui import *
28 from PyQt4.QtCore import *
31 class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
35 QWidget.__init__(self)
37 self.connecterSignaux()
43 # Ces parametres ne sont pas remis à rien par le clean
44 self.paramsFile= os.path.abspath(os.path.join(os.environ['HOME'],'.yams.dat'))
45 self.LE_ParamsFile.setText(self.paramsFile)
46 self.LE_MeshFile.setText("")
47 self.LE_MeshSmesh.setText("")
49 def connecterSignaux(self) :
50 self.connect(self.PB_Cancel,SIGNAL("clicked()"),self.PBCancelPressed)
51 self.connect(self.PB_Default,SIGNAL("clicked()"),self.clean)
52 self.connect(self.PB_Help,SIGNAL("clicked()"),self.PBHelpPressed)
53 self.connect(self.PB_Load,SIGNAL("clicked()"),self.PBLoadPressed)
54 self.connect(self.PB_OK,SIGNAL("clicked()"),self.PBOKPressed)
55 self.connect(self.PB_Save,SIGNAL("clicked()"),self.PBSavePressed)
56 self.connect(self.PB_MeshFile,SIGNAL("clicked()"),self.PBMeshFilePressed)
57 self.connect(self.PB_MeshSmesh,SIGNAL("clicked()"),self.PBMeshSmeshPressed)
58 self.connect(self.PB_ParamsFileExplorer,SIGNAL("clicked()"),self.setParamsFileName)
59 self.connect(self.LE_MeshFile,SIGNAL("returnPressed()"),self.meshFileNameChanged)
60 self.connect(self.LE_ParamsFile,SIGNAL("returnPressed()"),self.paramsFileNameChanged)
63 def PBHelpPressed(self):
65 maDoc=os.environ['DISTENE_YAMS_DOC_PDF']
67 QMessageBox.warning( self, "Help unavailable", str(maDoc) + " not found")
68 command="xdg-open "+maDoc+";"
69 subprocess.call(command, shell=True)
72 def PBOKPressed(self):
73 if not(self.PrepareLigneCommande()) : return
74 self.PBSavePressed(NomHypo=True)
75 maFenetre=MonViewText(self,self.commande)
76 if os.path.isfile(self.fichierOut) :self.enregistreResultat()
78 def enregistreResultat(self):
82 from salome.kernel import studyedit
84 maStudy=studyedit.getActiveStudy()
85 smesh.SetCurrentStudy(maStudy)
86 (outputMesh, status) = smesh.CreateMeshesFromGMF(self.fichierOut)
87 meshname = 'yams'+str(self.num)
88 smesh.SetName(outputMesh.GetMesh(), meshname)
92 self.editor = studyedit.getStudyEditor() #
93 moduleEntry=self.editor.findOrCreateComponent("SMESH","SMESH")
94 HypReMeshEntry = self.editor.findOrCreateItem( moduleEntry, name = 'HypoForRemesh',
95 comment = 'HypoForRemshing')
96 monStudyBuilder=maStudy.NewBuilder();
97 monStudyBuilder.NewCommand();
98 newStudyIter=monStudyBuilder.NewObject(HypReMeshEntry)
99 aNameAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeName")
100 hypoName = 'monHypo_Yams_'+str(self.num)
101 aNameAttrib.SetValue(hypoName)
102 aCommentAttrib=monStudyBuilder.FindOrCreateAttribute(newStudyIter,"AttributeComment")
103 aCommentAttrib.SetValue(str(self.commande))
105 SOMesh=maStudy.FindObjectByName(meshname ,"SMESH")[0]
106 newLink=monStudyBuilder.NewObject(SOMesh)
107 monStudyBuilder.Addreference(newLink, newStudyIter);
108 if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(0)
112 def PBSavePressed(self,NomHypo=False):
113 if NomHypo : text = '# Params for Hypothese : monHypo_Yams_'+str(self.num - 1)+"\n"
114 else : text = '# Save intermediate params \n'
115 text += "# Params for mesh : " + self.LE_MeshSmesh.text() +'\n'
116 for RB in self.GBOptim.findChildren(QRadioButton,):
117 if RB.isChecked()==True:
118 text+="Optimisation ='"+RB.text()+"'\n"
120 for RB in self.GBUnit.findChildren(QRadioButton,):
121 if RB.isChecked()==True:
122 text+="Units ='"+RB.text()+"'\n"
123 text+='Chordal_Tolerance_Deviation='+str(self.SP_Tolerance.value())+'\n'
125 text+='Ridge_Detection=' + str(self.CB_Ridge.isChecked())+'\n'
126 text+='Split_Edge=' + str(self.CB_SplitEdge.isChecked())+'\n'
127 text+='Point_Smoothing=' + str(self.CB_Point.isChecked())+'\n'
128 text+='Geometrical_Approximation='+ str(self.SP_Geomapp.value()) +'\n'
129 text+='Ridge_Angle=' + str(self.SP_Ridge.value()) +'\n'
130 text+='Maximum_Size=' + str(self.SP_MaxSize.value()) +'\n'
131 text+='Minimum_Size=' + str(self.SP_MaxSize.value()) +'\n'
132 text+='Mesh_Gradation=' + str(self.SP_Gradation.value())+'\n'
134 text+='Verbosity=' + str(self.SP_Verbosity.value())+'\n'
135 text+='Memory=' + str(self.SP_Memory.value())+'\n'
139 f=open(self.paramsFile,'a')
141 QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
146 QMessageBox.warning( self, "File", "Unable to write "+self.paramsFile)
150 def PBLoadPressed(self):
152 f=open(self.paramsFile,'r')
154 QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
159 QMessageBox.warning( self, "File", "Unable to read "+self.paramsFile)
164 for RB in self.GBOptim.findChildren(QRadioButton,):
165 if d['Optimisation']== RB.text():
168 for RB in self.GBUnit.findChildren(QRadioButton,):
169 if d['Units']== RB.text():
172 self.SP_Tolerance.setValue(d['Chordal_Tolerance_Deviation'])
174 self.CB_Ridge.setChecked(d['Ridge_Detection'])
175 self.CB_Point.setChecked(d['Point_Smoothing'])
176 self.CB_SplitEdge.setChecked(d['Split_Edge'])
177 self.SP_Geomapp.setValue(d['Geometrical_Approximation'])
178 self.SP_Ridge.setValue(d['Ridge_Angle'])
179 self.SP_MaxSize.setValue(d['Maximum_Size'])
180 self.SP_MinSize.setValue(d['Minimum_Size'])
181 self.SP_Gradation.setValue(d['Mesh_Gradation'])
183 self.SP_Verbosity.setValue(d['Verbosity'])
184 self.SP_Memory.setValue(d['Memory'])
187 def PBCancelPressed(self):
190 def PBMeshFilePressed(self):
191 fd = QFileDialog(self, "select an existing Mesh file", self.LE_MeshFile.text(), "Mesh-Files (*.mesh);;All Files (*)")
193 infile = fd.selectedFiles()[0]
194 self.LE_MeshFile.setText(infile)
195 self.fichierIn=infile.toLatin1()
197 def setParamsFileName(self):
198 fd = QFileDialog(self, "select a file", self.LE_ParamsFile.text(), "dat Files (*.dat);;All Files (*)")
200 infile = fd.selectedFiles()[0]
201 self.LE_ParamsFile.setText(infile)
202 self.paramsFile=infile.toLatin1()
205 def meshFileNameChanged(self):
206 self.fichierIn=self.LE_MeshFile.text()
207 if os.path.exists(self.fichierIn): return
208 QMessageBox.warning( self, "Unknown File", "File doesn't exist")
210 def paramsFileNameChanged(self):
211 self.paramsFile=self.LE_ParamsFile.text()
213 def PBMeshSmeshPressed(self):
216 from salome.kernel import studyedit
217 from salome.smesh.smeshstudytools import SMeshStudyTools
218 from salome.gui import helper as guihelper
219 from omniORB import CORBA
221 mySObject, myEntry = guihelper.getSObjectSelected()
222 if CORBA.is_nil(mySObject) or mySObject==None:
223 QMessageBox.critical(self, "Mesh", "select an input mesh")
225 self.smeshStudyTool = SMeshStudyTools()
226 self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject)
227 if CORBA.is_nil(self.__selectedMesh):
228 QMessageBox.critical(self, "Mesh", "select an input mesh")
230 myName = mySObject.GetName()
232 self.LE_MeshSmesh.setText(myName)
234 def prepareFichier(self):
235 self.fichierIn="/tmp/PourYam_"+str(self.num)+".mesh"
237 self.__selectedMesh.ExportGMF(self.__selectedMesh,self.fichierIn, True)
239 def PrepareLigneCommande(self):
240 self.commande="yams "
241 verbosity=str(self.SP_Verbosity.value())
242 self.commande+="-v "+verbosity
243 for obj in self.mesRB.children():
246 self.style=obj.objectName().remove(0,3)
247 self.style.replace("_","-")
251 self.commande+=" -O "+self.style.toLatin1()
252 if self.fichierIn=="" and self.MeshIn=="" :
253 QMessageBox.critical(self, "Mesh", "select an input mesh")
255 if self.MeshIn!="" : self.prepareFichier()
256 if not (os.path.isfile(self.fichierIn)):
257 QMessageBox.critical(self, "File", "unable to read GMF Mesh in "+str(self.fichierIn))
260 deb=os.path.splitext(self.fichierIn)
261 self.fichierOut=deb[0]+'.d.meshb'
263 if self.RB_Absolute.isChecked()==True :
264 self.commande+=' -Dabsolute'
266 self.commande+=' -Drelative'
267 self.commande+=',tolerance=%f'%self.SP_Tolerance.value()
268 if self.CB_Ridge.isChecked()==False : self.commande+=',nr'
269 if self.CB_Point.isChecked()==False : self.commande+=',ns'
270 if self.SP_Geomapp.value()!=0.04 : self.commande+=',geomapp=%f'%self.SP_Geomapp.value()
271 if self.SP_Ridge.value()!=45.0 : self.commande+=',ridge=%f'%self.SP_Ridge.value()
272 if self.SP_MaxSize.value()!=100 : self.commande+=',maxsize=%f'%self.SP_MaxSize.value()
273 if self.SP_MinSize.value()!=5 : self.commande+=',minsize=%f'%self.SP_MinSize.value()
274 if self.SP_Gradation.value()!=1.3 : self.commande+=',gradation=%f'%self.SP_MaxSize.value()
275 if self.CB_SplitEdge.isChecked()==True : self.commande+=',splitedge=1'
277 if self.SP_Verbosity.value()!=3 : self.commande+=' -v %d'%self.SP_Verbosity.value()
278 if self.SP_Memory.value()!=0 : self.commande+=' -m %d'%self.SP_Memory.value()
280 self.commande+=" "+self.fichierIn
284 self.RB_0.setChecked(True)
285 self.RB_G.setChecked(False)
286 self.RB_U.setChecked(False)
287 self.RB_S.setChecked(False)
288 self.RB_2.setChecked(False)
289 self.RB_1.setChecked(False)
290 self.RB_Absolute.setChecked(False)
291 self.RB_Relative.setChecked(True)
292 self.SP_Tolerance.setProperty("value", 0.1)
293 self.SP_Geomapp.setProperty("value", 0.04)
294 self.SP_Ridge.setProperty("value", 45.0)
295 self.SP_Gradation.setProperty("value", 1.3)
296 self.CB_Ridge.setChecked(True)
297 self.CB_Point.setChecked(True)
298 self.CB_SplitEdge.setChecked(False)
299 self.SP_MaxSize.setProperty("value", -2.0)
300 self.SP_MinSize.setProperty("value", -2.0)
301 self.SP_Verbosity.setProperty("value", 3)
302 self.SP_Memory.setProperty("value", 0)
308 This function returns a singleton instance of the plugin dialog.
309 c est obligatoire pour faire un show sans parent...
313 __dialog = MonYamsPlugDialog()