From c743f43d9253f0ed46ecd8eae03a8bf2d5b4bf35 Mon Sep 17 00:00:00 2001 From: Daniel Girardeau-Montaut Date: Wed, 27 Mar 2019 15:03:58 +0100 Subject: [PATCH] WIP2 --- Classify3DMASCDialog.ui | 2 +- q3DMASC.cpp | 10 ++++++---- q3DMASCClassifier.cpp | 2 +- qTrain3DMASCDialog.cpp | 35 ++++++++++++++++++----------------- qTrain3DMASCDialog.h | 4 ++-- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/Classify3DMASCDialog.ui b/Classify3DMASCDialog.ui index 554b0c7..7ba0881 100644 --- a/Classify3DMASCDialog.ui +++ b/Classify3DMASCDialog.ui @@ -141,7 +141,7 @@ - + TEST (optional) diff --git a/q3DMASC.cpp b/q3DMASC.cpp index 97e8832..87dff44 100644 --- a/q3DMASC.cpp +++ b/q3DMASC.cpp @@ -141,6 +141,8 @@ void q3DMASCPlugin::doClassifyAction() classifDlg.classifierFileLineEdit->setText(inputFilename); static bool s_keepAttributes = false; classifDlg.keepAttributesCheckBox->setChecked(s_keepAttributes); + classifDlg.testCloudComboBox->hide(); + classifDlg.testLabel->hide(); if (!classifDlg.exec()) { //process cancelled by the user @@ -159,7 +161,7 @@ void q3DMASCPlugin::doClassifyAction() { return; } - if (classifier.isValid()) + if (!classifier.isValid()) { m_app->dispToConsole("No classifier or invalid classifier", ccMainAppInterface::ERR_CONSOLE_MESSAGE); return; @@ -448,7 +450,7 @@ void q3DMASCPlugin::doTrainAction() masc::Feature::Set toPrepare; for (size_t i = 0; i < originalFeatures.size(); ++i) { - originalFeatures[i].selected = trainDlg.isFeatureSelected(i); + originalFeatures[i].selected = trainDlg.isFeatureSelected(originalFeatures[i].feature->toString()); //if the feature is selected if (originalFeatures[i].selected) @@ -570,7 +572,7 @@ void q3DMASCPlugin::doTrainAction() masc::Feature::Set toPrepareTest; for (size_t i = 0; i < originalFeaturesTest.size(); ++i) { - originalFeaturesTest[i].selected = trainDlg.isFeatureSelected(i); + originalFeaturesTest[i].selected = trainDlg.isFeatureSelected(originalFeatures[i].feature->toString()); //if the feature is selected if (originalFeaturesTest[i].selected) @@ -651,7 +653,7 @@ void q3DMASCPlugin::doTrainAction() { originalFeatures[i].importance = std::numeric_limits::quiet_NaN(); } - trainDlg.setFeatureImportance(i, originalFeatures[i].importance); + trainDlg.setFeatureImportance(originalFeatures[i].feature->toString(), originalFeatures[i].importance); } trainDlg.sortByFeatureImportance(); diff --git a/q3DMASCClassifier.cpp b/q3DMASCClassifier.cpp index 7f632f1..a3c7cd2 100644 --- a/q3DMASCClassifier.cpp +++ b/q3DMASCClassifier.cpp @@ -56,7 +56,7 @@ static IScalarFieldWrapper::Shared GetSource(const Feature::Source& fs, const cc { case Feature::Source::ScalarField: { - assert(fs.name.isEmpty()); + assert(!fs.name.isEmpty()); int sfIdx = cloud->getScalarFieldIndexByName(qPrintable(fs.name)); if (sfIdx >= 0) { diff --git a/qTrain3DMASCDialog.cpp b/qTrain3DMASCDialog.cpp index 797794c..cd5017a 100644 --- a/qTrain3DMASCDialog.cpp +++ b/qTrain3DMASCDialog.cpp @@ -70,15 +70,19 @@ void Train3DMASCDialog::setFirstRunDone() savePushButton->setEnabled(true); } -bool Train3DMASCDialog::isFeatureSelected(size_t index) const +bool Train3DMASCDialog::isFeatureSelected(QString featureName) const { - if (static_cast(index) >= tableWidget->rowCount()) + for (int index = 0; index < tableWidget->rowCount(); ++index) { - assert(false); - return false; + QTableWidgetItem* item = tableWidget->item(index, 0); + if (item->text() == featureName) + { + return (item->checkState() == Qt::Checked); + } } - return (tableWidget->item(static_cast(index), 0)->checkState() == Qt::Checked); + assert(false); + return false; } void Train3DMASCDialog::sortByFeatureImportance() @@ -86,22 +90,19 @@ void Train3DMASCDialog::sortByFeatureImportance() tableWidget->sortByColumn(FeatureImportanceColumn, Qt::AscendingOrder); } -void Train3DMASCDialog::setFeatureImportance(size_t index, float importance) +void Train3DMASCDialog::setFeatureImportance(QString featureName, float importance) { - if (static_cast(index) >= tableWidget->rowCount()) + for (int index = 0; index < tableWidget->rowCount(); ++index) { - assert(false); - return; + if (tableWidget->item(index, 0)->text() == featureName) + { + QTableWidgetItem* item = tableWidget->item(static_cast(index), FeatureImportanceColumn); + item->setText(std::isnan(importance) ? QString() : QString::number(importance, 'f', 6)); + return; + } } - if (!std::isnan(importance)) - { - tableWidget->item(static_cast(index), FeatureImportanceColumn)->setText(QString::number(importance)); - } - else - { - tableWidget->item(static_cast(index), FeatureImportanceColumn)->setText(QString()); - } + assert(false); } void Train3DMASCDialog::onClose() diff --git a/qTrain3DMASCDialog.h b/qTrain3DMASCDialog.h index 75554a1..7d2fb24 100644 --- a/qTrain3DMASCDialog.h +++ b/qTrain3DMASCDialog.h @@ -43,8 +43,8 @@ public: void setFirstRunDone(); inline void setClassifierSaved() { classifierSaved = true; saveRequested = false; } - bool isFeatureSelected(size_t index) const; - void setFeatureImportance(size_t index, float importance); + bool isFeatureSelected(QString featureName) const; + void setFeatureImportance(QString featureName, float importance); void sortByFeatureImportance(); inline bool shouldSaveClassifier() const { return saveRequested; }