From 9a746d644aabe7d7c4deb6bbb966c60badef2da4 Mon Sep 17 00:00:00 2001 From: Julien Malik <julien.malik@c-s.fr> Date: Thu, 15 Sep 2011 18:50:11 +0200 Subject: [PATCH] ENH: improve ImageList and StringList support --- .../otbWrapperApplication.cxx | 52 +++++++++++++++++++ .../ApplicationEngine/otbWrapperApplication.h | 33 ++++++++++++ .../otbWrapperInputImageListParameter.h | 15 +++--- Code/ApplicationEngine/otbWrapperTypes.h | 3 ++ 4 files changed, 95 insertions(+), 8 deletions(-) diff --git a/Code/ApplicationEngine/otbWrapperApplication.cxx b/Code/ApplicationEngine/otbWrapperApplication.cxx index faf051ddbf..a911541ecd 100644 --- a/Code/ApplicationEngine/otbWrapperApplication.cxx +++ b/Code/ApplicationEngine/otbWrapperApplication.cxx @@ -29,6 +29,8 @@ #include "otbWrapperOutputVectorDataParameter.h" #include "otbWrapperRadiusParameter.h" #include "otbWrapperStringParameter.h" +#include "otbWrapperStringListParameter.h" +#include "otbWrapperInputImageListParameter.h" #include "otbWrapperParameterGroup.h" @@ -376,6 +378,22 @@ void Application::SetParameterString(std::string parameter, std::string value) } } +void Application::SetParameterStringList(std::string parameter, std::vector<std::string> value) +{ + Parameter* param = GetParameterByKey(parameter); + + if (dynamic_cast<InputImageListParameter*>(param)) + { + InputImageListParameter* paramDown = dynamic_cast<InputImageListParameter*>(param); + paramDown->SetListFromFileName(value); + } + else if (dynamic_cast<StringListParameter*>(param)) + { + StringListParameter* paramDown = dynamic_cast<StringListParameter*>(param); + paramDown->SetValue(value); + } +} + void Application::SetParameterOutputImage(std::string parameter, FloatVectorImageType* value) { Parameter* param = GetParameterByKey(parameter); @@ -527,6 +545,25 @@ std::string Application::GetParameterString(std::string parameter) return ret; } +std::vector<std::string> Application::GetParameterStringList(std::string parameter) +{ + std::vector<std::string> ret; + Parameter* param = GetParameterByKey(parameter); + + if (dynamic_cast<InputImageListParameter*>(param)) + { + InputImageListParameter* paramDown = dynamic_cast<InputImageListParameter*>(param); + ret = paramDown->GetFileNameList(); + } + else if (dynamic_cast<StringListParameter*>(param)) + { + StringListParameter* paramDown = dynamic_cast<StringListParameter*>(param); + ret = paramDown->GetValue(); + } + return ret; +} + + FloatVectorImageType* Application::GetParameterImage(std::string parameter) { FloatVectorImageType::Pointer ret; @@ -542,6 +579,21 @@ FloatVectorImageType* Application::GetParameterImage(std::string parameter) return ret; } +FloatVectorImageListType* Application::GetParameterImageList(std::string parameter) +{ + FloatVectorImageListType::Pointer ret; + Parameter* param = GetParameterByKey(parameter); + + if (dynamic_cast<InputImageListParameter*>(param)) + { + InputImageListParameter* paramDown = dynamic_cast<InputImageListParameter*>(param); + ret = paramDown->GetImageList(); + } + + //TODO: exception if not found ? + return ret; +} + ComplexFloatVectorImageType* Application::GetParameterComplexImage(std::string parameter) { ComplexFloatVectorImageType::Pointer ret; diff --git a/Code/ApplicationEngine/otbWrapperApplication.h b/Code/ApplicationEngine/otbWrapperApplication.h index 8f3e24ed62..1bd55c08e8 100644 --- a/Code/ApplicationEngine/otbWrapperApplication.h +++ b/Code/ApplicationEngine/otbWrapperApplication.h @@ -187,6 +187,24 @@ public: */ void SetParameterString(std::string parameter, std::string value); + /* Set a string value + * + * Can be called for types : + * \li ParameterType_String + * \li ParameterType_Filename + * \li ParameterType_Directory + * \li ParameterType_Choice + * \li ParameterType_Float + * \li ParameterType_Int + * \li ParameterType_Radius + * \li ParameterType_InputImageParameter + * \li ParameterType_InputComplexImageParameter + * \li ParameterType_InputVectorDataParameter + * \li ParameterType_OutputImageParameter + * \li ParameterType_OutputVectorDataParameter + */ + void SetParameterStringList(std::string parameter, std::vector<std::string> value); + /* Set an output image value * * Can be called for types : @@ -239,6 +257,14 @@ public: */ std::string GetParameterString(std::string parameter); + /* Get a string list parameter value + * + * Can be called for types : + * \li ParameterType_StringList + * \li ParameterType_InputImageList + */ + std::vector<std::string> GetParameterStringList(std::string parameter); + /* Get an image value * * Can be called for types : @@ -246,6 +272,13 @@ public: */ FloatVectorImageType* GetParameterImage(std::string parameter); + /* Get an image list value + * + * Can be called for types : + * \li ParameterType_InputImageList + */ + FloatVectorImageListType* GetParameterImageList(std::string parameter); + /* Get a complex image value * * Can be called for types : diff --git a/Code/ApplicationEngine/otbWrapperInputImageListParameter.h b/Code/ApplicationEngine/otbWrapperInputImageListParameter.h index 7bd6cd2b33..07b4324cac 100644 --- a/Code/ApplicationEngine/otbWrapperInputImageListParameter.h +++ b/Code/ApplicationEngine/otbWrapperInputImageListParameter.h @@ -40,7 +40,6 @@ public: typedef itk::SmartPointer<Self> Pointer; typedef itk::SmartPointer<const Self> ConstPointer; - typedef otb::ObjectList<FloatVectorImageType> VectorImageListType; typedef otb::ImageFileReader<FloatVectorImageType> ImageFileReaderType; typedef otb::ObjectList<ImageFileReaderType> ImageFileReaderListType; @@ -116,23 +115,23 @@ public: } /** Get one list of the stored image. */ - VectorImageListType* GetImageList() const + FloatVectorImageListType* GetImageList() const { return m_ImageList; } /** Get one specific stored image. */ - VectorImageListType* GetNthImage(unsigned int i) const + FloatVectorImageType* GetNthImage(unsigned int i) const { if(m_ImageList->Size()<i) { itkExceptionMacro(<< "No image "<<i<<". Only "<<m_ImageList->Size()<<" images available."); } - return m_ImageList; + return m_ImageList->GetNthElement(i); } /** Set the list of image. */ - void SetImageList(VectorImageListType* imList) + void SetImageList(FloatVectorImageListType* imList) { m_ImageList = imList; m_ReaderList = ImageFileReaderListType::Pointer(); @@ -163,7 +162,7 @@ public: void ClearValue() { - m_ImageList = VectorImageListType::Pointer(); + m_ImageList = FloatVectorImageListType::Pointer(); m_ReaderList = ImageFileReaderListType::Pointer(); } @@ -173,7 +172,7 @@ protected: { this->SetName("Input Image List"); this->SetKey("inList"); - m_ImageList = VectorImageListType::New(); + m_ImageList = FloatVectorImageListType::New(); m_ReaderList = ImageFileReaderListType::New(); } @@ -182,7 +181,7 @@ protected: {} - VectorImageListType::Pointer m_ImageList; + FloatVectorImageListType::Pointer m_ImageList; ImageFileReaderListType::Pointer m_ReaderList; private: diff --git a/Code/ApplicationEngine/otbWrapperTypes.h b/Code/ApplicationEngine/otbWrapperTypes.h index c0d7b52afd..2b400f20d6 100644 --- a/Code/ApplicationEngine/otbWrapperTypes.h +++ b/Code/ApplicationEngine/otbWrapperTypes.h @@ -85,6 +85,9 @@ typedef otb::VectorData<VectorDataCoordinatePrecisionType, VectorDataValuePrecisionType> VectorDataType; +typedef otb::ObjectList<FloatVectorImageType> FloatVectorImageListType; + + } // end namespace Wrapper } //end namespace otb -- GitLab