52 #ifndef __PCL_FilterManager_h
53 #define __PCL_FilterManager_h
58 #include <pcl/Diagnostics.h>
72 struct PCL_CLASS SampledSpectrumData
82 return !name.IsEmpty() && !data.IsEmpty();
85 bool operator ==(
const SampledSpectrumData& other )
const
87 return name.CompareIC( other.name ) == 0;
90 bool operator <(
const SampledSpectrumData& other )
const
92 return name.CompareIC( other.name ) < 0;
102 class PCL_CLASS SampledSpectrumDataList
106 using list_type = Array<SampledSpectrumData>;
107 using iterator = list_type::iterator;
108 using const_iterator = list_type::const_iterator;
110 SampledSpectrumDataList() =
default;
111 SampledSpectrumDataList(
const SampledSpectrumDataList& ) =
default;
115 return int( m_list.Length() );
120 return m_list.IsEmpty();
123 int Find(
const String& name )
const
127 const_iterator i =
BinarySearch( Begin(), End(), SampledSpectrumData{ name, String(), String(), String() } );
129 return int( i - Begin() );
133 for (
int i = 0, n = Length(); i < n; ++i )
134 if ( m_list[i].name == name )
140 int Find(
const SampledSpectrumData& data )
const
142 return Find( data.name );
145 bool Has(
const String& name )
const
147 return Find( name ) >= 0;
150 int Has(
const SampledSpectrumData& data )
const
152 return Find( data ) >= 0;
157 return m_list.Begin();
160 const_iterator Begin()
const
162 return m_list.Begin();
170 const_iterator begin()
const
180 const_iterator End()
const
190 const_iterator end()
const
195 const SampledSpectrumData& operator[](
int i )
const
200 SampledSpectrumData& operator[](
int i )
205 const SampledSpectrumData& First()
const
207 PCL_PRECONDITION( !IsEmpty() )
208 return *m_list.Begin();
211 const SampledSpectrumData& Last()
const
213 PCL_PRECONDITION( !IsEmpty() )
214 return *m_list.ReverseBegin();
217 void Set( const SampledSpectrumData& s )
219 if ( m_list.IsEmpty() )
226 int i = Find( s.name );
229 m_sorted = m_sorted && s > Last();
237 SampledSpectrumDataList&
operator <<(
const SampledSpectrumData& s )
243 bool IsSorted()
const
263 String UniqueItemName(
const String& name )
265 String uniqueName = name;
266 for (
unsigned i = 0;; )
268 if ( !Find( uniqueName ) )
270 uniqueName = name + String().Format(
" (%u)", ++i );
278 bool m_sorted =
false;
287 class PCL_CLASS FilterManager
294 FilterManager() =
default;
299 FilterManager(
const String& filtersDatabaseFilePath,
300 const String& whiteReferencesDatabaseFilePath = String() )
302 Initialize( filtersDatabaseFilePath, whiteReferencesDatabaseFilePath );
308 FilterManager(
const FilterManager& ) =
default;
313 FilterManager( FilterManager&& ) =
default;
318 FilterManager& operator =(
const FilterManager& ) =
default;
323 FilterManager& operator =( FilterManager&& ) =
default;
328 virtual ~FilterManager()
332 bool Initialize(
const String& filtersDatabaseFilePath = String(),
333 const String& whiteReferencesDatabaseFilePath = String() );
335 bool ImportFilters(
const String& filePath,
bool merge =
true );
336 void ImportFilters(
const SampledSpectrumDataList& filters,
bool merge =
true );
338 bool ImportWhiteReferences(
const String& filePath,
bool merge =
true );
339 void ImportWhiteReferences(
const SampledSpectrumDataList& whiteReferences,
bool merge =
true );
341 void ReloadFilters();
342 void ReloadWhiteReferences();
349 bool IsModified()
const
351 return m_modified != 0;
354 const SampledSpectrumDataList& Filters()
const
359 const SampledSpectrumData& DefaultLuminanceFilter()
const
361 return m_defaultLuminanceFilter;
364 const SampledSpectrumData& DefaultRedFilter()
const
366 return m_defaultRedFilter;
369 const SampledSpectrumData& DefaultGreenFilter()
const
371 return m_defaultGreenFilter;
374 const SampledSpectrumData& DefaultBlueFilter()
const
376 return m_defaultBlueFilter;
379 const SampledSpectrumData& DefaultDeviceQE()
const
381 return m_defaultDeviceQE;
384 const SampledSpectrumDataList& WhiteReferences()
const
386 return m_whiteReferences;
389 const SampledSpectrumData& DefaultWhiteReference()
const
391 return m_defaultWhiteReference;
394 String FiltersDatabaseFilePath()
const
396 return m_filtersDatabaseFilePath.IsEmpty() ? DefaultFiltersDatabaseFilePath() : m_filtersDatabaseFilePath;
399 String WhiteReferencesDatabaseFilePath()
const
401 return m_whiteReferencesDatabaseFilePath.IsEmpty() ? DefaultWhiteReferencesDatabaseFilePath() : m_whiteReferencesDatabaseFilePath;
404 static String ConfigurationFiltersDatabaseFilePath();
405 static String ConfigurationWhiteReferencesDatabaseFilePath();
407 static String DefaultFiltersDatabaseFilePath();
408 static String DefaultWhiteReferencesDatabaseFilePath();
410 static String FactoryDefaultFiltersDatabaseFilePath();
411 static String FactoryDefaultWhiteReferencesDatabaseFilePath();
413 bool UsingDefaultFiltersDatabase()
const
415 return m_filtersDatabaseFilePath.IsEmpty() || m_filtersDatabaseFilePath == DefaultFiltersDatabaseFilePath();
418 bool UsingDefaultWhiteReferencesDatabase()
const
420 return m_whiteReferencesDatabaseFilePath.IsEmpty() || m_whiteReferencesDatabaseFilePath == DefaultWhiteReferencesDatabaseFilePath();
423 bool UsingConfigurationFiltersDatabaseFilePath()
const
425 return m_filtersDatabaseFilePath == ConfigurationFiltersDatabaseFilePath();
428 bool UsingConfigurationWhiteReferencesDatabaseFilePath()
const
430 return m_whiteReferencesDatabaseFilePath == ConfigurationWhiteReferencesDatabaseFilePath();
433 int FindFilterByName(
const String& name )
const
435 return m_filters.Find( name );
438 int FindWhiteReferenceByName(
const String& name )
const
440 return m_whiteReferences.Find( name );
443 void SaveToConfigurationFiltersDatabaseFile();
444 void SaveToConfigurationWhiteReferencesDatabaseFile();
446 static SampledSpectrumDataList LoadFilters(
const String& filePath );
447 static SampledSpectrumDataList LoadWhiteReferences(
const String& filePath );
449 static void ExportFiltersDatabase(
const String& filePath,
const SampledSpectrumDataList& filters );
450 static void ExportWhiteReferencesDatabase(
const String& filePath,
const SampledSpectrumDataList& whiteReferences );
452 static SampledSpectrumData DecodeFilterCSV(
const IsoStringList& lines );
453 static SampledSpectrumData DecodeWhiteReferenceCSV(
const IsoStringList& lines );
455 static IsoStringList EncodeFilterCSV(
const SampledSpectrumData& filter );
456 static IsoStringList EncodeWhiteReferenceCSV(
const SampledSpectrumData& whiteReference );
460 String m_filtersDatabaseFilePath;
461 SampledSpectrumDataList m_filters;
462 SampledSpectrumData m_defaultLuminanceFilter;
463 SampledSpectrumData m_defaultRedFilter;
464 SampledSpectrumData m_defaultGreenFilter;
465 SampledSpectrumData m_defaultBlueFilter;
466 SampledSpectrumData m_defaultDeviceQE;
467 String m_whiteReferencesDatabaseFilePath;
468 SampledSpectrumDataList m_whiteReferences;
469 SampledSpectrumData m_defaultWhiteReference;
470 bool m_initialized =
false;
471 bool m_valid =
false;
Dynamic list of 8-bit strings.
Array< T, A > & operator<<(Array< T, A > &x, const V &v)
bool operator==(const Array< T, A > &x1, const Array< T, A > &x2) noexcept
bool operator<(const Array< T, A > &x1, const Array< T, A > &x2) noexcept
FI BinarySearch(FI i, FI j, const T &v) noexcept