X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMULTIPRGUI%2FMULTIPR_GUI_Dlg.cxx;h=526e70d0ac1cbaea8b09ce2d898f1e7e5edd3fb8;hb=4b82b953ce24278dc9123f6441a58adc7a6283aa;hp=1b08c61a4e79c14188f9f15018a6ea83edcc66a3;hpb=50689122a40844cd82e7d7b9b38d96bb8b4bdbd0;p=modules%2Fmultipr.git diff --git a/src/MULTIPRGUI/MULTIPR_GUI_Dlg.cxx b/src/MULTIPRGUI/MULTIPR_GUI_Dlg.cxx index 1b08c61..526e70d 100644 --- a/src/MULTIPRGUI/MULTIPR_GUI_Dlg.cxx +++ b/src/MULTIPRGUI/MULTIPR_GUI_Dlg.cxx @@ -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(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(); }