self.LE_ParamsFile.setText(self.paramsFile)
self.LE_MeshFile.setText("")
self.LE_MeshSmesh.setText("")
-
+ self.resize(800, 500)
self.clean()
def connecterSignaux(self) :
self.connect(self.LE_MeshFile,SIGNAL("returnPressed()"),self.meshFileNameChanged)
self.connect(self.LE_ParamsFile,SIGNAL("returnPressed()"),self.paramsFileNameChanged)
-
+ #QtCore.QObject.connect(self.checkBox, QtCore.SIGNAL('stateChanged(int)'), self.change)
+ self.connect(self.CB_FillHoles,SIGNAL("stateChanged(int)"),self.SP_minHoleSize.setEnabled)
+ self.connect(self.CB_computedToleranceDisplacement,SIGNAL("stateChanged(int)"),self.SP_toleranceDisplacement.setDisabled)
+ self.connect(self.CB_computedResolutionLength,SIGNAL("stateChanged(int)"),self.SP_resolutionLength.setDisabled)
+ self.connect(self.CB_computedOverlapDistance,SIGNAL("stateChanged(int)"),self.SP_overlapDistance.setDisabled)
+
def PBHelpPressed(self):
try :
mydir=os.environ['SMESH_ROOT_DIR']
def PBOKPressed(self):
- if not(self.PrepareLigneCommande()) : return
+ if not(self.PrepareLigneCommande()): return
self.PBSavePressed(NomHypo=True)
maFenetre=MGCleanerMonViewText(self,self.commande)
- if os.path.isfile(self.fichierOut) :self.enregistreResultat()
+ if os.path.isfile(self.fichierOut): self.enregistreResultat()
def enregistreResultat(self):
import smesh
return True
def PBSavePressed(self,NomHypo=False):
- if NomHypo : text = '# Params for Hypothese : anHypo_MGCleaner_'+str(self.num - 1)+"\n"
- else : text = '# Save intermediate params \n'
+ if NomHypo:
+ text = '# Params for Hypothese : anHypo_MGCleaner_'+str(self.num - 1)+"\n"
+ else:
+ text = '# Save intermediate params \n'
text += "# Params for mesh : " + self.LE_MeshSmesh.text() +'\n'
+
+ """
for RB in self.GBOptim.findChildren(QRadioButton,):
if RB.isChecked()==True:
text+="Optimisation ='"+RB.text()+"'\n"
if RB.isChecked()==True:
text+="Units ='"+RB.text()+"'\n"
text+='Chordal_Tolerance_Deviation='+str(self.SP_Tolerance.value())+'\n'
-
text+='Ridge_Detection=' + str(self.CB_Ridge.isChecked())+'\n'
text+='Split_Edge=' + str(self.CB_SplitEdge.isChecked())+'\n'
text+='Point_Smoothing=' + str(self.CB_Point.isChecked())+'\n'
text+='Maximum_Size=' + str(self.SP_MaxSize.value()) +'\n'
text+='Minimum_Size=' + str(self.SP_MaxSize.value()) +'\n'
text+='Mesh_Gradation=' + str(self.SP_Gradation.value())+'\n'
-
text+='Verbosity=' + str(self.SP_Verbosity.value())+'\n'
- text+='Memory=' + str(self.SP_Memory.value())+'\n'
text+='\n\n'
-
- try :
+ """
+ try:
f=open(self.paramsFile,'a')
- except :
- QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
+ except:
+ QMessageBox.warning(self, "File", "Unable to open "+self.paramsFile)
return
- try :
+ try:
f.write(text)
- except :
- QMessageBox.warning( self, "File", "Unable to write "+self.paramsFile)
+ except:
+ QMessageBox.warning(self, "File", "Unable to write "+self.paramsFile)
return
f.close()
def PBLoadPressed(self):
- try :
+ try:
f=open(self.paramsFile,'r')
except :
- QMessageBox.warning( self, "File", "Unable to open "+self.paramsFile)
+ QMessageBox.warning(self, "File", "Unable to open "+self.paramsFile)
return
- try :
+ try:
text=f.read()
except :
- QMessageBox.warning( self, "File", "Unable to read "+self.paramsFile)
+ QMessageBox.warning(self, "File", "Unable to read "+self.paramsFile)
return
f.close()
d={}
RB.setChecked(True)
break
for RB in self.GBUnit.findChildren(QRadioButton,):
- if d['Units']== RB.text():
+ if d['Units']==RB.text():
RB.setChecked(True)
break
self.SP_Tolerance.setValue(d['Chordal_Tolerance_Deviation'])
self.LE_ParamsFile.setText(infile)
self.paramsFile=infile.toLatin1()
-
def meshFileNameChanged(self):
self.fichierIn=self.LE_MeshFile.text()
if os.path.exists(self.fichierIn): return
mg-cleaner.exe --in Porsche.mesh --out Porschefix.mesh --fix
mg-cleaner.exe --in Porsche.mesh --out PorscheNewfix.mesh --fix --resolution_length 0.03
"""
-
- self.commande="mg-cleaner.exe "
- verbosity=str(self.SP_Verbosity.value())
- self.commande+="-v "+verbosity
- for obj in self.mesRB.children():
- try :
- if obj.isChecked():
- self.style=obj.objectName().remove(0,3)
- self.style.replace("_","-")
- break
- except :
- pass
- self.commande+=" -O "+self.style.toLatin1()
+
+ #self.commande="mg-cleaner.exe --in " + self.fichierIn + " --out " + self.fichierOut + " --fix2pass"
+ #return True
if self.fichierIn=="" and self.MeshIn=="" :
- QMessageBox.critical(self, "Mesh", "select an input mesh")
- return False
+ QMessageBox.critical(self, "Mesh", "select an input mesh")
+ return False
if self.MeshIn!="" : self.prepareFichier()
if not (os.path.isfile(self.fichierIn)):
- QMessageBox.critical(self, "File", "unable to read GMF Mesh in "+str(self.fichierIn))
- return False
-
+ QMessageBox.critical(self, "File", "unable to read GMF Mesh in "+str(self.fichierIn))
+ return False
+
+ self.commande="mg-cleaner.exe"
+ verbosity=str(self.SP_Verbosity.value())
+ self.commande+=" --verbose " + verbosity
+ self.commande+=" --in " + self.fichierIn
deb=os.path.splitext(self.fichierIn)
- self.fichierOut=deb[0]+'.d.meshb'
-
- if self.RB_Absolute.isChecked()==True :
- self.commande+=' -Dabsolute'
- else :
- self.commande+=' -Drelative'
- self.commande+=',tolerance=%f'%self.SP_Tolerance.value()
- if self.CB_Ridge.isChecked()==False : self.commande+=',nr'
- if self.CB_Point.isChecked()==False : self.commande+=',ns'
- if self.SP_Geomapp.value()!=0.04 : self.commande+=',geomapp=%f'%self.SP_Geomapp.value()
- if self.SP_Ridge.value()!=45.0 : self.commande+=',ridge=%f'%self.SP_Ridge.value()
- if self.SP_MaxSize.value()!=100 : self.commande+=',maxsize=%f'%self.SP_MaxSize.value()
- if self.SP_MinSize.value()!=5 : self.commande+=',minsize=%f'%self.SP_MinSize.value()
- if self.SP_Gradation.value()!=1.3 : self.commande+=',gradation=%f'%self.SP_MaxSize.value()
- if self.CB_SplitEdge.isChecked()==True : self.commande+=',splitedge=1'
-
- if self.SP_Verbosity.value()!=3 : self.commande+=' -v %d'%self.SP_Verbosity.value()
- if self.SP_Memory.value()!=0 : self.commande+=' -m %d'%self.SP_Memory.value()
-
- self.commande+=" "+self.fichierIn
-
- #for the moment
- deb=os.path.splitext(self.fichierIn)
- self.fichierOut=deb[0]+'_fix.mesh'
- self.commande="mg-cleaner.exe --in " + self.fichierIn + " --out " + self.fichierOut + " --fix"
-
+ self.fichierOut=deb[0] + "_fix.mesh"
+ self.commande+=" --out "+self.fichierOut
+ if self.RB_Fix1.isChecked():
+ self.commande+=" --fix1pass"
+ else:
+ if self.RB_Fix2.isChecked():
+ self.commande+=" --fix2pass"
+ else:
+ self.commande+=" --check"
+ if self.CB_PreserveTopology.isChecked():
+ self.commande+=" --topology respect"
+ else:
+ self.commande+=" --topology ignore"
+ if self.CB_FillHoles.isChecked(): #no fill holes default
+ self.commande+=" --min_hole_size " + str(self.SP_minHoleSize.value())
+ if not self.CB_computedToleranceDisplacement.isChecked(): #computed default
+ self.commande+=" --tolerance_displacement " + str(self.SP_toleranceDisplacement.value())
+ if not self.CB_computedResolutionLength.isChecked(): #computed default
+ self.commande+=" --tolerance_displacement " + str(self.SP_resolutionLength.value())
+ self.commande+=" --folding_angle " + str(self.SP_foldingAngle.value())
+ if self.CB_RemeshPlanes.isChecked(): #no remesh default
+ self.commande+=" --remesh_planes"
+ if not self.CB_computedOverlapDistance.isChecked(): #computed default
+ self.commande+=" --overlap_distance " + str(self.SP_overlapDistance.value())
+ self.commande+=" --overlap_angle " + str(self.SP_overlapAngle.value())
return True
-
+
def clean(self):
self.RB_Check.setChecked(False)
self.RB_Fix1.setChecked(False)
self.RB_Fix2.setChecked(True)
- self.CB_Preserve.setChecked(False)
+ self.CB_PreserveTopology.setChecked(False)
self.CB_FillHoles.setChecked(False)
self.CB_RemeshPlanes.setChecked(False)
self.SP_toleranceDisplacement.setProperty("value", 0)
self.SP_resolutionLength.setProperty("value", 0)
self.SP_foldingAngle.setProperty("value", 15)
- self.SP_overlapdistance.setProperty("value", 0)
+ self.SP_overlapDistance.setProperty("value", 0)
self.SP_overlapAngle.setProperty("value", 15)
self.SP_Verbosity.setProperty("value", 3)
# __dialog.clean()
return __dialog
+
+#
+# ==============================================================================
+# Basic use cases and unit test functions
+# ==============================================================================
+#
+def TEST_MGCleanerMonPlugDialog():
+ print 'TEST_MGCleanerMonPlugDialog'
+ import sys
+ from PyQt4.QtGui import QApplication
+ from PyQt4.QtCore import QObject, SIGNAL, SLOT
+ app = QApplication(sys.argv)
+ QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+
+ dlg=MGCleanerMonPlugDialog()
+ dlg.show()
+ sys.exit(app.exec_())
+
+if __name__ == "__main__":
+ TEST_MGCleanerMonPlugDialog()
<x>0</x>
<y>0</y>
<width>800</width>
- <height>400</height>
+ <height>500</height>
</rect>
</property>
<property name="windowTitle">
</item>
<item>
- <widget class="QCheckBox" name="CB_Preserve">
+ <widget class="QCheckBox" name="CB_PreserveTopology">
<property name="toolTip">
<string>Disables fixing operations which induce topology modifications.
Default is enable topology modifications.
</property>
</widget>
#5
- <widget class="QDoubleSpinBox" name="SP_overlapdistance">
+ <widget class="QDoubleSpinBox" name="SP_overlapDistance">
<property name="geometry">
<rect>
<x>20</x>
<bool>false</bool>
</property>
</widget>
- <widget class="QLabel" name="LA_overlapdistance">
+ <widget class="QLabel" name="LA_overlapDistance">
<property name="geometry">
<rect>
<x>130</x>
<property name="title">
<string>MGCleaner Generic Options</string>
</property>
- <widget class="QWidget" name="layoutWidget">
+
+ <widget class="QSpinBox" name="SP_Verbosity">
<property name="geometry">
<rect>
- <x>40</x>
+ <x>20</x>
<y>30</y>
- <width>441</width>
- <height>27</height>
+ <width>100</width>
+ <height>25</height>
</rect>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Verbosity Level</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>28</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QSpinBox" name="SP_Verbosity">
<property name="maximum">
<number>10</number>
</property>
<property name="value">
- <number>7</number>
+ <number>3</number>
</property>
</widget>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="layoutWidget_2">
+
+ <widget class="QLabel" name="label">
<property name="geometry">
<rect>
- <x>40</x>
- <y>70</y>
- <width>441</width>
- <height>27</height>
+ <x>130</x>
+ <y>30</y>
+ <width>600</width>
+ <height>30</height>
</rect>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
- <item>
- <widget class="QLabel" name="label_6">
- <property name="minimumSize">
- <size>
- <width>225</width>
- <height>25</height>
- </size>
- </property>
+ <property name="toolTip">
+ <string>sets the verbosity level.
+From 0 (no detail) to 10 (very detailed).
+Default is 3.</string>
+ </property>
<property name="text">
- <string>zzz21</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>28</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QSpinBox" name="SP_Memory">
- <property name="toolTip">
- <string>zzz22</string>
- </property>
- <property name="maximum">
- <number>100000</number>
- </property>
- <property name="value">
- <number>0</number>
+ <string>Verbosity Level</string>
</property>
</widget>
- </item>
- </layout>
- </widget>
+
+
</widget>
<widget class="QGroupBox" name="groupBox_6">
<property name="geometry">