mirror of
https://github.com/dgirardeau/q3DMASC.git
synced 2026-08-29 08:34:48 +08:00
WIP2
This commit is contained in:
@@ -141,7 +141,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="testLabel">
|
||||
<property name="text">
|
||||
<string>TEST (optional)</string>
|
||||
</property>
|
||||
|
||||
+6
-4
@@ -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<float>::quiet_NaN();
|
||||
}
|
||||
trainDlg.setFeatureImportance(i, originalFeatures[i].importance);
|
||||
trainDlg.setFeatureImportance(originalFeatures[i].feature->toString(), originalFeatures[i].importance);
|
||||
}
|
||||
|
||||
trainDlg.sortByFeatureImportance();
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
+18
-17
@@ -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<int>(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<int>(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<int>(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<int>(index), FeatureImportanceColumn);
|
||||
item->setText(std::isnan(importance) ? QString() : QString::number(importance, 'f', 6));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!std::isnan(importance))
|
||||
{
|
||||
tableWidget->item(static_cast<int>(index), FeatureImportanceColumn)->setText(QString::number(importance));
|
||||
}
|
||||
else
|
||||
{
|
||||
tableWidget->item(static_cast<int>(index), FeatureImportanceColumn)->setText(QString());
|
||||
}
|
||||
assert(false);
|
||||
}
|
||||
|
||||
void Train3DMASCDialog::onClose()
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user