diff --git a/Core/Code/Rendering/mitkLogoOverlay.cpp b/Core/Code/Rendering/mitkLogoOverlay.cpp new file mode 100644 index 0000000000..dd7332a7bf --- /dev/null +++ b/Core/Code/Rendering/mitkLogoOverlay.cpp @@ -0,0 +1,163 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "mitkLogoOverlay.h" +#include +#include "vtkUnicodeString.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +mitk::LogoOverlay::LogoOverlay() +{ + m_readerFactory = vtkSmartPointer::New(); + mitk::Point2D position; + position[0] = position[1] = 0; +} + + +mitk::LogoOverlay::~LogoOverlay() +{ +} + +vtkImageData *mitk::LogoOverlay::CreateMbiLogo() +{ + vtkImageImport* VtkImageImport = vtkImageImport::New(); + VtkImageImport->SetDataScalarTypeToUnsignedChar(); + VtkImageImport->SetNumberOfScalarComponents(mbiLogo_NumberOfScalars); + VtkImageImport->SetWholeExtent(0,mbiLogo_Width-1,0,mbiLogo_Height-1,0,1-1); + VtkImageImport->SetDataExtentToWholeExtent(); + + char * ImageData; + // flip mbi logo around y axis and change color order + ImageData = new char[mbiLogo_Height*mbiLogo_Width*mbiLogo_NumberOfScalars]; + + unsigned int column, row; + char * dest = ImageData; + char * source = (char*) &mbiLogo_Data[0];; + char r, g, b, a; + for (column = 0; column < mbiLogo_Height; column++) + for (row = 0; row < mbiLogo_Width; row++) + { //change r with b + b = *source++; + g = *source++; + r = *source++; + a = *source++; + + *dest++ = r; + *dest++ = g; + *dest++ = b; + *dest++ = a; + } + + VtkImageImport->SetImportVoidPointer(ImageData); + VtkImageImport->Modified(); + VtkImageImport->Update(); + return VtkImageImport->GetOutput(); +} + +mitk::Overlay::Bounds mitk::LogoOverlay::GetBoundsOnDisplay(mitk::BaseRenderer *renderer) const +{ + LocalStorage* ls = this->m_LSH.GetLocalStorage(renderer); + mitk::Overlay::Bounds bounds; + bounds.Position = ls->m_LogoRep->GetPosition(); +// double* size = new double[2]; + bounds.Size[0] = ls->m_LogoRep->GetPosition2()[0]; + bounds.Size[1] = ls->m_LogoRep->GetPosition2()[1]; + return bounds; +} + +void mitk::LogoOverlay::SetBoundsOnDisplay(mitk::BaseRenderer *renderer, const mitk::Overlay::Bounds& bounds) +{ + LocalStorage* ls = this->m_LSH.GetLocalStorage(renderer); + ls->m_LogoRep->SetPosition(bounds.Position[0],bounds.Position[1]); + ls->m_LogoRep->SetPosition2(bounds.Size[0],bounds.Size[1]); +} + +mitk::LogoOverlay::LocalStorage::~LocalStorage() +{ +} + +mitk::LogoOverlay::LocalStorage::LocalStorage() +{ + m_LogoRep = vtkSmartPointer::New(); +} + +void mitk::LogoOverlay::UpdateVtkOverlay(mitk::BaseRenderer *renderer) +{ + LocalStorage* ls = this->m_LSH.GetLocalStorage(renderer); + if(ls->IsGenerateDataRequired(renderer,this)) + { + vtkImageReader2* imageReader = m_readerFactory->CreateImageReader2(GetLogoImagePath().c_str()); + if(imageReader) + { + imageReader->SetFileName(GetLogoImagePath().c_str()); + imageReader->Update(); + ls->m_LogoImage = imageReader->GetOutput(); + imageReader->Delete(); + } + else + { + ls->m_LogoImage = CreateMbiLogo(); + } + + ls->m_LogoRep->SetImage(ls->m_LogoImage); + ls->m_LogoRep->SetDragable(false); + ls->m_LogoRep->SetMoving(false); + ls->m_LogoRep->SetPickable(false); + ls->m_LogoRep->SetShowBorder(false); + ls->m_LogoRep->SetRenderer(renderer->GetVtkRenderer()); + float opacity = 1.0; + this->GetOpacity(opacity,renderer); + ls->m_LogoRep->GetImageProperty()->SetOpacity(opacity); + + ls->m_LogoRep->BuildRepresentation(); + ls->UpdateGenerateDataTime(); + } + +} + +void mitk::LogoOverlay::SetLogoImagePath(std::string path) +{ + SetStringProperty("Overlay.LogoImagePath", path.c_str()); + Modified(); +} + +std::string mitk::LogoOverlay::GetLogoImagePath() const +{ + std::string path; + GetPropertyList()->GetStringProperty("Overlay.LogoImagePath", path); + return path; +} + +vtkProp* mitk::LogoOverlay::GetVtkProp(BaseRenderer *renderer) const +{ + LocalStorage* ls = this->m_LSH.GetLocalStorage(renderer); + return ls->m_LogoRep; +} + diff --git a/Core/Code/Rendering/mitkLogoOverlay.h b/Core/Code/Rendering/mitkLogoOverlay.h new file mode 100644 index 0000000000..7362d5f383 --- /dev/null +++ b/Core/Code/Rendering/mitkLogoOverlay.h @@ -0,0 +1,91 @@ +/*=================================================================== + + The Medical Imaging Interaction Toolkit (MITK) + + Copyright (c) German Cancer Research Center, + Division of Medical and Biological Informatics. + All rights reserved. + + This software is distributed WITHOUT ANY WARRANTY; without + even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. + + See LICENSE.txt or http://www.mitk.org for details. + + ===================================================================*/ + +#ifndef LOGOOVERLAY_H +#define LOGOOVERLAY_H + +#include +#include +#include +#include "MitkCoreExports.h" + +class vtkLogoRepresentation; +class vtkImageData; +class vtkImageReader2Factory; + +namespace mitk { + +/** \brief Displays text on the renderwindow */ +class MITK_CORE_EXPORT LogoOverlay : public mitk::VtkOverlay { +public: + + class LocalStorage : public mitk::Overlay::BaseLocalStorage + { + public: + /** \brief Actor of a 2D render window. */ + vtkSmartPointer m_LogoImage; + vtkSmartPointer m_LogoRep; + + /** \brief Timestamp of last update of stored data. */ + itk::TimeStamp m_LastUpdateTime; + + /** \brief Default constructor of the local storage. */ + LocalStorage(); + /** \brief Default deconstructor of the local storage. */ + ~LocalStorage(); + }; + + mitkClassMacro(LogoOverlay, mitk::VtkOverlay); + itkFactorylessNewMacro(Self) + itkCloneMacro(Self) + + virtual Overlay::Bounds GetBoundsOnDisplay(BaseRenderer *renderer) const; + virtual void SetBoundsOnDisplay(BaseRenderer *renderer, const Bounds& bounds); + vtkSmartPointer m_readerFactory; + + void SetLogoImagePath(std::string text); + std::string GetLogoImagePath() const; + +protected: + + /** \brief The LocalStorageHandler holds all LocalStorages for the render windows. */ + mutable mitk::LocalStorageHandler m_LSH; + + virtual vtkProp *GetVtkProp(BaseRenderer *renderer) const; + void UpdateVtkOverlay(mitk::BaseRenderer *renderer); + + /** \brief explicit constructor which disallows implicit conversions */ + explicit LogoOverlay(); + + /** \brief virtual destructor in order to derive from this class */ + virtual ~LogoOverlay(); + + vtkImageData* CreateMbiLogo(); + +private: + + /** \brief copy constructor */ + LogoOverlay( const LogoOverlay &); + + /** \brief assignment operator */ + LogoOverlay &operator=(const LogoOverlay &); + +}; + +} // namespace mitk +#endif // LOGOOVERLAY_H + +