From 35489dacb547b5359d682d475cf5c634befbb0ca Mon Sep 17 00:00:00 2001 From: Daniel Girardeau-Montaut Date: Mon, 25 Mar 2019 22:45:39 +0100 Subject: [PATCH] Automatically sort the features --- Train3DMASCDialog.ui | 3 +++ q3DMASC.cpp | 2 ++ q3DMASCTools.cpp | 4 ++-- qTrain3DMASCDialog.cpp | 11 +++++++++-- qTrain3DMASCDialog.h | 1 + 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Train3DMASCDialog.ui b/Train3DMASCDialog.ui index 1283fe4..cbc8fa7 100644 --- a/Train3DMASCDialog.ui +++ b/Train3DMASCDialog.ui @@ -207,6 +207,9 @@ QAbstractItemView::NoSelection + + true + 170 diff --git a/q3DMASC.cpp b/q3DMASC.cpp index f8048e5..e7d369d 100644 --- a/q3DMASC.cpp +++ b/q3DMASC.cpp @@ -546,6 +546,8 @@ void q3DMASCPlugin::doTrainAction() } trainDlg.setFeatureImportance(i, originalFeatures[i].importance); } + + trainDlg.sortByFeatureImportance(); } } diff --git a/q3DMASCTools.cpp b/q3DMASCTools.cpp index cc027dd..874c9e1 100644 --- a/q3DMASCTools.cpp +++ b/q3DMASCTools.cpp @@ -155,7 +155,7 @@ bool Tools::LoadClassifierCloudLabels(QString filename, QSet& labels, Q return true; } -static bool CreateFeaturesFromCommand(const QString& command, int lineNumber, const Tools::NamedClouds& clouds, std::vector& rawFeatures, std::vector& scales) +static bool CreateFeaturesFromCommand(const QString& command, QString corePointsRole, int lineNumber, const Tools::NamedClouds& clouds, std::vector& rawFeatures, std::vector& scales) { QStringList tokens = command.split('_'); if (tokens.empty()) @@ -771,7 +771,7 @@ static bool LoadFileCommon( const QString& filename, { QString command = line.mid(8); - if (!CreateFeaturesFromCommand(command, lineNumber, clouds, rawFeatures, scales)) + if (!CreateFeaturesFromCommand(command, corePoints ? corePoints->role : QString(), lineNumber, clouds, rawFeatures, scales)) { //error message already issued //return false; diff --git a/qTrain3DMASCDialog.cpp b/qTrain3DMASCDialog.cpp index e88da40..797794c 100644 --- a/qTrain3DMASCDialog.cpp +++ b/qTrain3DMASCDialog.cpp @@ -24,6 +24,8 @@ //System #include +static const int FeatureImportanceColumn = 1; + Train3DMASCDialog::Train3DMASCDialog(QWidget* parent/*=nullptr*/) : QDialog(parent) , Ui::Train3DMASCDialog() @@ -79,6 +81,11 @@ bool Train3DMASCDialog::isFeatureSelected(size_t index) const return (tableWidget->item(static_cast(index), 0)->checkState() == Qt::Checked); } +void Train3DMASCDialog::sortByFeatureImportance() +{ + tableWidget->sortByColumn(FeatureImportanceColumn, Qt::AscendingOrder); +} + void Train3DMASCDialog::setFeatureImportance(size_t index, float importance) { if (static_cast(index) >= tableWidget->rowCount()) @@ -89,11 +96,11 @@ void Train3DMASCDialog::setFeatureImportance(size_t index, float importance) if (!std::isnan(importance)) { - tableWidget->item(static_cast(index), 1)->setText(QString::number(importance)); + tableWidget->item(static_cast(index), FeatureImportanceColumn)->setText(QString::number(importance)); } else { - tableWidget->item(static_cast(index), 1)->setText(QString()); + tableWidget->item(static_cast(index), FeatureImportanceColumn)->setText(QString()); } } diff --git a/qTrain3DMASCDialog.h b/qTrain3DMASCDialog.h index ca7e105..75554a1 100644 --- a/qTrain3DMASCDialog.h +++ b/qTrain3DMASCDialog.h @@ -45,6 +45,7 @@ public: bool isFeatureSelected(size_t index) const; void setFeatureImportance(size_t index, float importance); + void sortByFeatureImportance(); inline bool shouldSaveClassifier() const { return saveRequested; }