2019-01-19 00:49:29 +01:00
//##########################################################################
//# #
//# CLOUDCOMPARE PLUGIN: q3DMASC #
//# #
//# This program is free software; you can redistribute it and/or modify #
//# it under the terms of the GNU General Public License as published by #
//# the Free Software Foundation; version 2 or later of the License. #
//# #
//# This program is distributed in the hope that it will be useful, #
//# but WITHOUT ANY WARRANTY; without even the implied warranty of #
//# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
//# GNU General Public License for more details. #
//# #
//# COPYRIGHT: Dimitri Lague / CNRS / UEB #
//# #
//##########################################################################
# include "ScalarFieldCollector.h"
//qCC_db
# include <ccPointCloud.h>
//CCLib
# include <ScalarField.h>
//system
# include <assert.h>
2020-06-04 00:32:27 +02:00
void SFCollector : : push ( ccPointCloud * cloud , CCCoreLib : : ScalarField * sf , Behavior behavior )
2019-01-19 00:49:29 +01:00
{
2019-05-03 23:52:33 +02:00
assert ( ! scalarFields . contains ( sf ) ) ;
2023-05-31 22:00:10 +02:00
// if (scalarFields.contains(sf))
// ccLog::Warning(QString("[SFCollector] scalar field '%1' HAS ALREADY BEEN COLLECTED").arg(sf->getName()) + ", behaviour " + QString::number(behavior));
// else
// ccLog::Warning(QString("[SFCollector] collect scalar field '%1'").arg(sf->getName()) + ", behaviour " + QString::number(behavior));
2019-05-03 23:52:33 +02:00
SFDesc desc ;
desc . behavior = behavior ;
desc . cloud = cloud ;
scalarFields [ sf ] = desc ;
2019-01-19 00:49:29 +01:00
}
2019-05-03 23:52:33 +02:00
void SFCollector : : releaseSFs ( bool keepByDefault )
2019-01-19 00:49:29 +01:00
{
2019-05-03 23:52:33 +02:00
for ( Map : : iterator it = scalarFields . begin ( ) ; it ! = scalarFields . end ( ) ; + + it )
2019-01-19 00:49:29 +01:00
{
2019-05-03 23:52:33 +02:00
const SFDesc & desc = it . value ( ) ;
2023-05-30 15:41:04 +02:00
CCCoreLib : : ScalarField * sf = it . key ( ) ;
2019-05-03 23:52:33 +02:00
if ( desc . behavior = = ALWAYS_KEEP | | ( keepByDefault & & desc . behavior = = CAN_REMOVE ) )
2019-01-19 00:49:29 +01:00
{
2023-05-31 22:00:10 +02:00
// ccLog::Warning(QString("[SFCollector] Keep scalar field '%1'").arg(sf->getName()));
2019-05-03 23:52:33 +02:00
//keep this SF
continue ;
}
int sfIdx = desc . cloud - > getScalarFieldIndexByName ( sf - > getName ( ) ) ;
if ( sfIdx > = 0 )
{
2023-05-31 22:00:10 +02:00
// ccLog::Warning(QString("[SFCollector] Remove scalar field '%1'").arg(sf->getName()));
2019-05-03 23:52:33 +02:00
desc . cloud - > deleteScalarField ( sfIdx ) ;
}
else
{
2023-05-30 15:41:04 +02:00
ccLog : : Warning ( QString ( " [SFCollector] Scalar field '%1' can't be found anymore, impossible to remove it " ) . arg ( sf - > getName ( ) ) ) ;
2019-01-19 00:49:29 +01:00
}
}
2019-05-03 23:52:33 +02:00
scalarFields . clear ( ) ;
2019-01-19 00:49:29 +01:00
}
2023-05-30 21:49:18 +02:00
bool SFCollector : : setBehavior ( CCCoreLib : : ScalarField * sf , Behavior behavior )
{
if ( scalarFields . contains ( sf ) )
{
2023-05-31 22:00:10 +02:00
// Behavior previousBehavior = scalarFields[sf].behavior;
2023-05-30 21:49:18 +02:00
scalarFields [ sf ] . behavior = behavior ;
2023-05-31 22:00:10 +02:00
// ccLog::Warning("behavior of " + QString(sf->getName()) + " changed from " + QString::number(previousBehavior) + " to " + QString::number(behavior));
2023-05-30 21:49:18 +02:00
}
return true ;
}