Salome HOME
*** empty log message ***
[modules/multipr.git] / src / MULTIPRGUI / MULTIPR_GUI_Dlg.cxx
index 1b08c61a4e79c14188f9f15018a6ea83edcc66a3..526e70d0ac1cbaea8b09ce2d898f1e7e5edd3fb8 100644 (file)
@@ -501,6 +501,8 @@ void MULTIPR_GUI_DecimateDlg::OnRadiusAuto()
 {
        // evaluates default radius for the first selected part
        const QStringList& partsList = mModule->getSelectedParts();
+       const char* strFieldIt   = comboBoxSelectFieldIteration->currentText().latin1();
+       int fieldIteration = atoi(strFieldIt);
        char* strPartInfo0 = mModule->getMULTIPRObj()->getPartInfo(partsList[0].latin1());
        
        char   lMeshName[256];
@@ -521,11 +523,17 @@ void MULTIPR_GUI_DecimateDlg::OnRadiusAuto()
        float defaultRadius = 0.5f;
        try
        {
-               multipr::Mesh* mesh = new multipr::Mesh();
-               mesh->readSequentialMED(lMEDFileName, lMeshName);
-               const int averageNumberOfNeighbours = 8;
-               defaultRadius = mesh->evalDefaultRadius(averageNumberOfNeighbours);
-               delete mesh;
+               char strParams[256];
+               sprintf(strParams, "2");
+               
+               char* res = mModule->getMULTIPRObj()->evalDecimationParams(
+                       lPartName,
+                       comboBoxSelectFieldName->currentText().latin1(),
+                       fieldIteration,
+                       comboBoxSelectFilter->currentText().latin1(),
+                       strParams);
+               
+               sscanf(res, "%f", &defaultRadius);
        }
        catch (...)
        {
@@ -540,6 +548,8 @@ void MULTIPR_GUI_DecimateDlg::OnThresholdAuto()
 {
        // evaluates default radius for the first selected part
        const QStringList& partsList = mModule->getSelectedParts();
+       const char* strFieldIt  = comboBoxSelectFieldIteration->currentText().latin1();
+       int fieldIteration = atoi(strFieldIt);
        char* strPartInfo0 = mModule->getMULTIPRObj()->getPartInfo(partsList[0].latin1());
        
        char   lMeshName[256];
@@ -557,49 +567,34 @@ void MULTIPR_GUI_DecimateDlg::OnThresholdAuto()
                lMEDFileName);
        
        QApplication::setOverrideCursor(Qt::waitCursor);
-       float defaultRadius = 0.5f;
+
        try
        {
-               multipr::Mesh* mesh = new multipr::Mesh();
-               mesh->readSequentialMED(lMEDFileName, lMeshName);
-               
-               multipr::DecimationFilter* filter =
-                       multipr::DecimationFilter::create(comboBoxSelectFilter->currentText().latin1());
-               
-               double gradMin = 0.1, gradAvg = 0.15, gradMax = 0.2;
-               
-               multipr::DecimationFilterGradAvg* filterGrad = dynamic_cast<multipr::DecimationFilterGradAvg*>(filter);
-               if (filterGrad)
+               float radius;
+               ret = sscanf(lineEditRadius->text().latin1(), "%f", &radius);
+               if ((ret != 1) || (radius <= 0.0f))
                {
-                       const char* strFieldIt   = comboBoxSelectFieldIteration->currentText().latin1();
-                       int fieldIteration = atoi(strFieldIt);
-                       
-                       double radius;
-                       ret = sscanf(lineEditRadius->text().latin1(), "%lf", &radius);
-                       if ((ret != 1) || (radius <= 0.0f))
-                       {
-                               SUIT_MessageBox::error1( 
-                                       mModule->getAppli()->desktop(),
-                                       "Decimation parameters error", 
-                                       "Invalid radius (should be > 0.0)", 
-                                       tr("OK") );
-                                       
-                               return;
-                       }
-                       
-                       filterGrad->getGradientInfo(
-                               mesh,
-                               comboBoxSelectFieldName->currentText().latin1(),
-                               fieldIteration,
-                               radius,
-                               spinBoxBoxing->value(),
-                               &gradMin,
-                               &gradAvg,
-                               &gradMax);
+                       SUIT_MessageBox::error1( 
+                               mModule->getAppli()->desktop(),
+                               "Decimation parameters error", 
+                               "Invalid radius (should be > 0.0)", 
+                               tr("OK") );
+                               
+                       return;
                }
                
-               delete filter;
-               delete mesh;
+               char strParams[256];            
+               sprintf(strParams, "1 %f %d", radius, spinBoxBoxing->value());
+               
+               char* res = mModule->getMULTIPRObj()->evalDecimationParams(
+                       lPartName,
+                       comboBoxSelectFieldName->currentText().latin1(),
+                       fieldIteration,
+                       comboBoxSelectFilter->currentText().latin1(),
+                       strParams);
+               
+               float gradMin, gradAvg, gradMax;
+               sscanf(res, "%f %f %f", &gradMin, &gradAvg, &gradMax);
                
                lineEditTMed->setText( QString::number(gradMin) );
                lineEditTLow->setText( QString::number(gradMax) );
@@ -607,6 +602,7 @@ void MULTIPR_GUI_DecimateDlg::OnThresholdAuto()
        catch (...)
        {
        }
+       
        QApplication::restoreOverrideCursor();
 }