From 3f7eac61c6dd89d068ef6f7849630f7513f266f2 Mon Sep 17 00:00:00 2001 From: Daniel Girardeau-Montaut Date: Sun, 20 Jan 2019 23:02:57 +0100 Subject: [PATCH] Glitch(es) fix --- NeighborhoodFeature.cpp | 4 ++-- PointFeature.cpp | 4 ++-- ScalarFieldCollector.cpp | 2 +- ScalarFieldCollector.h | 2 +- q3DMASC.cpp | 6 +++--- q3DMASCCommands.h | 17 +++++++++++------ q3DMASCTools.cpp | 2 +- 7 files changed, 21 insertions(+), 16 deletions(-) diff --git a/NeighborhoodFeature.cpp b/NeighborhoodFeature.cpp index 9494865..cecf38c 100644 --- a/NeighborhoodFeature.cpp +++ b/NeighborhoodFeature.cpp @@ -82,7 +82,7 @@ bool NeighborhoodFeature::prepare( const CorePoints& corePoints, //and the scalar field assert(!sf1); - sf1 = PrepareSF(corePoints.cloud, qPrintable(resultSFName)); + sf1 = PrepareSF(corePoints.cloud, qPrintable(resultSFName), generatedScalarFields); if (!sf1) { error = QString("Failed to prepare scalar %1 @ scale %2").arg(resultSFName).arg(scale); @@ -96,7 +96,7 @@ bool NeighborhoodFeature::prepare( const CorePoints& corePoints, keepSF2 = (corePoints.cloud->getScalarFieldIndexByName(qPrintable(resultSFName2)) >= 0); //we remember that the scalar field was already existing! assert(!sf2); - sf2 = PrepareSF(corePoints.cloud, qPrintable(resultSFName2)); + sf2 = PrepareSF(corePoints.cloud, qPrintable(resultSFName2), generatedScalarFields); if (!sf2) { error = QString("Failed to prepare scalar field for %1 @ scale %2").arg(cloud2Label).arg(scale); diff --git a/PointFeature.cpp b/PointFeature.cpp index 89ac09d..55b41aa 100644 --- a/PointFeature.cpp +++ b/PointFeature.cpp @@ -522,7 +522,7 @@ bool PointFeature::prepare( const CorePoints& corePoints, //and the scalar field assert(!statSF1); - statSF1 = PrepareSF(corePoints.cloud, qPrintable(resultSFName)); + statSF1 = PrepareSF(corePoints.cloud, qPrintable(resultSFName), generatedScalarFields); if (!statSF1) { error = QString("Failed to prepare scalar field for field '%1' @ scale %2").arg(field1->getName()).arg(scale); @@ -536,7 +536,7 @@ bool PointFeature::prepare( const CorePoints& corePoints, keepStatSF2 = (corePoints.cloud->getScalarFieldIndexByName(qPrintable(resultSFName2)) >= 0); //we remember that the scalar field was already existing! assert(!statSF2); - statSF2 = PrepareSF(corePoints.cloud, qPrintable(resultSFName2)); + statSF2 = PrepareSF(corePoints.cloud, qPrintable(resultSFName2), generatedScalarFields); if (!statSF2) { error = QString("Failed to prepare scalar field for field '%1' @ scale %2").arg(field2->getName()).arg(scale); diff --git a/ScalarFieldCollector.cpp b/ScalarFieldCollector.cpp index fb17271..a6a0d61 100644 --- a/ScalarFieldCollector.cpp +++ b/ScalarFieldCollector.cpp @@ -31,7 +31,7 @@ void SFCollector::push(ccPointCloud* cloud, CCLib::ScalarField* sf) (*this)[cloud].insert(sf); } -void SFCollector::clear() +void SFCollector::releaseAllSFs() { for (QMap< ccPointCloud*, std::set >::iterator it = begin(); it != end(); ++it) { diff --git a/ScalarFieldCollector.h b/ScalarFieldCollector.h index 4c30745..1e89ae2 100644 --- a/ScalarFieldCollector.h +++ b/ScalarFieldCollector.h @@ -39,5 +39,5 @@ class SFCollector : QMap< ccPointCloud*, std::set > void push(ccPointCloud* cloud, CCLib::ScalarField* sf); - void clear(); + void releaseAllSFs(); }; diff --git a/q3DMASC.cpp b/q3DMASC.cpp index 2dd306b..a15d417 100644 --- a/q3DMASC.cpp +++ b/q3DMASC.cpp @@ -169,7 +169,7 @@ void q3DMASCPlugin::doClassifyAction() if (!masc::Tools::PrepareFeatures(corePoints, features, error, &progressDlg, &generatedScalarFields)) { m_app->dispToConsole(error, ccMainAppInterface::ERR_CONSOLE_MESSAGE); - generatedScalarFields.clear(); + generatedScalarFields.releaseAllSFs(); return; } progressDlg.close(); @@ -182,13 +182,13 @@ void q3DMASCPlugin::doClassifyAction() if (!classifier.classify(features, corePoints.cloud, errorMessage, m_app->getMainWindow())) { m_app->dispToConsole(errorMessage, ccMainAppInterface::ERR_CONSOLE_MESSAGE); - generatedScalarFields.clear(); + generatedScalarFields.releaseAllSFs(); return; } if (!s_keepAttributes) { - generatedScalarFields.clear(); + generatedScalarFields.releaseAllSFs(); } } } diff --git a/q3DMASCCommands.h b/q3DMASCCommands.h index 3a62da6..460aa5f 100644 --- a/q3DMASCCommands.h +++ b/q3DMASCCommands.h @@ -61,9 +61,13 @@ struct Command3DMASCClassif : public ccCommandLineInterface::Command } QString classifierFilename = cmd.arguments().front(); + cmd.print("Classifier filename: " + classifierFilename); + QCoreApplication::processEvents(); cmd.arguments().pop_front(); QString cloudRolesStr = cmd.arguments().front(); + cmd.print("Cloud roles: " + cloudRolesStr); + QCoreApplication::processEvents(); cmd.arguments().pop_front(); //process the cloud roles description @@ -74,7 +78,8 @@ struct Command3DMASCClassif : public ccCommandLineInterface::Command for (const QString& token : tokens) { QStringList subTokens = token.split("="); - if (subTokens.size() != 2) + int subTokenCount = subTokens.size(); + if (subTokenCount != 2) { return cmd.error("Malformed cloud roles description (expecting: \"PC1=1 PC2=3 CTX=2\" for instance)"); } @@ -89,7 +94,7 @@ struct Command3DMASCClassif : public ccCommandLineInterface::Command { return cmd.error(QString("Cloud index %1 exceeds the number of loaded clouds (=%2)").arg(cloudIndex).arg(cmd.clouds().size())); } - cloudPerRole.insert(role, cmd.clouds()[cloudIndex].pc); + cloudPerRole.insert(role, cmd.clouds()[cloudIndex-1].pc); if (mainCloudRole.isEmpty()) { @@ -142,28 +147,28 @@ struct Command3DMASCClassif : public ccCommandLineInterface::Command SFCollector generatedScalarFields; if (!masc::Tools::PrepareFeatures(corePoints, features, errorMessage, pDlg.data(), &generatedScalarFields)) { - generatedScalarFields.clear(); + generatedScalarFields.releaseAllSFs(); return cmd.error(errorMessage); } if (pDlg) { + pDlg->setAutoClose(true); //restore the default behavior of the progress dialog pDlg->close(); QCoreApplication::processEvents(); - pDlg->setAutoClose(true); //restore the default behavior of the progress dialog } //apply classifier { if (!classifier.classify(features, corePoints.cloud, errorMessage, cmd.widgetParent())) { - generatedScalarFields.clear(); + generatedScalarFields.releaseAllSFs(); return cmd.error(errorMessage); } if (!keepAttributes) { - generatedScalarFields.clear(); + generatedScalarFields.releaseAllSFs(); } } diff --git a/q3DMASCTools.cpp b/q3DMASCTools.cpp index 0382c6e..96e4466 100644 --- a/q3DMASCTools.cpp +++ b/q3DMASCTools.cpp @@ -898,7 +898,7 @@ bool Tools::PrepareFeatures(const CorePoints& corePoints, Feature::Set& features } //prepare the feature - if (!feature->prepare(corePoints, errorStr, progressCb)) + if (!feature->prepare(corePoints, errorStr, progressCb, generatedScalarFields)) { //something failed (error should be up to date) return false;