diff --git a/Modules/Core/src/Rendering/mitkAbstractAnnotationRenderer.cpp b/Modules/Core/src/Rendering/mitkAbstractAnnotationRenderer.cpp index ca021c23d3..c6977d05ac 100644 --- a/Modules/Core/src/Rendering/mitkAbstractAnnotationRenderer.cpp +++ b/Modules/Core/src/Rendering/mitkAbstractAnnotationRenderer.cpp @@ -1,111 +1,111 @@ /*=================================================================== 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 "mitkAbstractAnnotationRenderer.h" #include "mitkBaseRenderer.h" #include "mitkRenderingManager.h" #include "usGetModuleContext.h" #include namespace mitk { const std::string AbstractAnnotationRenderer::US_INTERFACE_NAME = "org.mitk.services.AbstractAnnotationRenderer"; const std::string AbstractAnnotationRenderer::US_PROPKEY_ID = US_INTERFACE_NAME + ".id"; const std::string AbstractAnnotationRenderer::US_PROPKEY_RENDERER_ID = US_INTERFACE_NAME + ".rendererId"; AbstractAnnotationRenderer::AbstractAnnotationRenderer(const std::string &rendererID, const std::string &arID) : Superclass(us::GetModuleContext(), us::LDAPFilter("(&(" + Overlay::US_PROPKEY_RENDERER_ID + "=" + rendererID + ")(" + Overlay::US_PROPKEY_AR_ID + "=" + arID + "))")), m_RendererID(rendererID), m_ID(arID) { this->Open(); } AbstractAnnotationRenderer::~AbstractAnnotationRenderer() {} const std::string AbstractAnnotationRenderer::GetRendererID() const { return m_RendererID; } void AbstractAnnotationRenderer::CurrentBaseRendererChanged() { BaseRenderer *renderer = GetCurrentBaseRenderer(); if (renderer) { for (Overlay *o : this->GetServices()) { o->AddToBaseRenderer(renderer); } } } void AbstractAnnotationRenderer::RemoveAllOverlays() { BaseRenderer *renderer = GetCurrentBaseRenderer(); if (renderer) { for (Overlay *o : this->GetServices()) { o->RemoveFromBaseRenderer(renderer); } } } void AbstractAnnotationRenderer::Update() { BaseRenderer *renderer = GetCurrentBaseRenderer(); if (renderer) { for (Overlay *o : this->GetServices()) { o->Update(renderer); } } } const std::string AbstractAnnotationRenderer::GetID() const { return m_ID; } AbstractAnnotationRenderer::TrackedType AbstractAnnotationRenderer::AddingService( const AbstractAnnotationRenderer::ServiceReferenceType &reference) { Overlay *overlay = Superclass::AddingService(reference); BaseRenderer *renderer = GetCurrentBaseRenderer(); if (overlay && renderer) { overlay->AddToBaseRenderer(renderer); } - OnAnnotationRenderersChanged(); + // OnAnnotationRenderersChanged(); return overlay; } void AbstractAnnotationRenderer::ModifiedService(const AbstractAnnotationRenderer::ServiceReferenceType &, AbstractAnnotationRenderer::TrackedType tracked) { BaseRenderer *renderer = GetCurrentBaseRenderer(); if (tracked && renderer) { tracked->Update(renderer); } OnAnnotationRenderersChanged(); } void AbstractAnnotationRenderer::RemovedService(const AbstractAnnotationRenderer::ServiceReferenceType &, AbstractAnnotationRenderer::TrackedType /*tracked*/) { OnAnnotationRenderersChanged(); } BaseRenderer *AbstractAnnotationRenderer::GetCurrentBaseRenderer() { return BaseRenderer::GetByName(this->GetRendererID()); } } diff --git a/Modules/Overlays/include/mitkOverlayLayouter2D.h b/Modules/Overlays/include/mitkOverlayLayouter2D.h index f887dc5c46..cc37fdf752 100644 --- a/Modules/Overlays/include/mitkOverlayLayouter2D.h +++ b/Modules/Overlays/include/mitkOverlayLayouter2D.h @@ -1,103 +1,103 @@ /*=================================================================== 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 OVERLAYLAYOUTER2D_H #define OVERLAYLAYOUTER2D_H #include "MitkOverlaysExports.h" #include "mitkAbstractAnnotationRenderer.h" namespace mitk { class BaseRenderer; /** \brief The OverlayLayouter2D updates and manages Overlays and the respective Layouters. */ /** An Instance of the OverlayLayouter2D can be registered to several BaseRenderer instances in order to * call the update method of each Overlay during the rendering phase of the renderer. * See \ref OverlaysPage for more info. */ class MITKOVERLAYS_EXPORT OverlayLayouter2D : public AbstractAnnotationRenderer { public: static const std::string PROP_LAYOUT; static const std::string PROP_LAYOUT_PRIORITY; static const std::string PROP_LAYOUT_ALIGNMENT; static const std::string PROP_LAYOUT_MARGIN; enum Alignment { TopLeft, Top, TopRight, BottomLeft, Bottom, BottomRight, Left, Right }; - typedef std::vector OverlayVector; - typedef std::map OverlayLayouterContainerMap; + typedef std::multimap OverlayRankedMap; + typedef std::map OverlayLayouterContainerMap; /** \brief virtual destructor in order to derive from this class */ virtual ~OverlayLayouter2D(); const std::string GetID() const; static OverlayLayouter2D *GetAnnotationRenderer(const std::string &rendererID); void OnRenderWindowModified(); static void AddOverlay(Overlay *overlay, const std::string &rendererID, Alignment alignment = TopLeft, double marginX = 5, double marginY = 5, int priority = -1); static void AddOverlay(Overlay *overlay, BaseRenderer *renderer, Alignment alignment = TopLeft, double marginX = 5, double marginY = 5, int priority = -1); void PrepareLayout(); private: OverlayLayouter2D(const std::string &rendererId); static void AddAlignmentProperty(Overlay *overlay, Alignment activeAlignment, Point2D margin, int priority); void PrepareTopLeftLayout(int *displaySize); void PrepareTopLayout(int *displaySize); void PrepareTopRightLayout(int *displaySize); void PrepareBottomLeftLayout(int *displaySize); void PrepareBottomLayout(int *displaySize); void PrepareBottomRightLayout(int *displaySize); void PrepareLeftLayout(int *displaySize); void PrepareRightLayout(int *displaySize); - static double GetHeight(OverlayVector &overlays, BaseRenderer *renderer); + static double GetHeight(OverlayRankedMap &overlays, BaseRenderer *renderer); virtual void OnAnnotationRenderersChanged(); static const std::string ANNOTATIONRENDERER_ID; OverlayLayouterContainerMap m_OverlayContainerMap; static void SetMargin2D(Overlay *overlay, const Point2D &OffsetVector); static Point2D GetMargin2D(Overlay *overlay); }; } // namespace mitk #endif // OVERLAYLAYOUTER2D_H diff --git a/Modules/Overlays/src/mitkOverlayLayouter2D.cpp b/Modules/Overlays/src/mitkOverlayLayouter2D.cpp index 66ff2a0c3f..10e17e4de2 100644 --- a/Modules/Overlays/src/mitkOverlayLayouter2D.cpp +++ b/Modules/Overlays/src/mitkOverlayLayouter2D.cpp @@ -1,330 +1,343 @@ /*=================================================================== 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 "mitkOverlayLayouter2D.h" #include "mitkBaseRenderer.h" #include "mitkAnnotationService.h" #include "mitkEnumerationProperty.h" #include "mitkOverlay2DLayouter.h" #include namespace mitk { const std::string OverlayLayouter2D::ANNOTATIONRENDERER_ID = "OverlayLayouter2D"; const std::string OverlayLayouter2D::PROP_LAYOUT = "Layout"; const std::string OverlayLayouter2D::PROP_LAYOUT_PRIORITY = PROP_LAYOUT + ".priority"; const std::string OverlayLayouter2D::PROP_LAYOUT_ALIGNMENT = PROP_LAYOUT + ".alignment"; const std::string OverlayLayouter2D::PROP_LAYOUT_MARGIN = PROP_LAYOUT + ".margin"; void OverlayLayouter2D::SetMargin2D(Overlay *overlay, const Point2D &OffsetVector) { mitk::Point2dProperty::Pointer OffsetVectorProperty = mitk::Point2dProperty::New(OffsetVector); overlay->SetProperty(PROP_LAYOUT_MARGIN, OffsetVectorProperty.GetPointer()); } Point2D OverlayLayouter2D::GetMargin2D(Overlay *overlay) { mitk::Point2D OffsetVector; OffsetVector.Fill(0); overlay->GetPropertyValue(PROP_LAYOUT_MARGIN, OffsetVector); return OffsetVector; } OverlayLayouter2D::OverlayLayouter2D(const std::string &rendererId) : AbstractAnnotationRenderer(rendererId, OverlayLayouter2D::ANNOTATIONRENDERER_ID) { } void OverlayLayouter2D::AddAlignmentProperty(Overlay *overlay, Alignment activeAlignment, Point2D margin, int priority) { EnumerationProperty::Pointer alignmentProperty(mitk::EnumerationProperty::New()); alignmentProperty->AddEnum("TopLeft", TopLeft); alignmentProperty->AddEnum("Top", Top); alignmentProperty->AddEnum("TopRight", TopRight); alignmentProperty->AddEnum("BottomLeft ", BottomLeft); alignmentProperty->AddEnum("Bottom", Bottom); alignmentProperty->AddEnum("BottomRight", BottomRight); alignmentProperty->AddEnum("Left", Left); alignmentProperty->AddEnum("Right", Right); alignmentProperty->SetValue(activeAlignment); overlay->AddProperty(PROP_LAYOUT_ALIGNMENT, alignmentProperty.GetPointer()); overlay->SetIntProperty(PROP_LAYOUT_PRIORITY, priority); SetMargin2D(overlay, margin); } void OverlayLayouter2D::OnAnnotationRenderersChanged() { if (!this->GetCurrentBaseRenderer()) return; m_OverlayContainerMap.clear(); for (Overlay *overlay : this->GetServices()) { if (!overlay) continue; BaseProperty *prop = overlay->GetProperty(PROP_LAYOUT_ALIGNMENT); EnumerationProperty *enumProb = dynamic_cast(prop); Alignment currentAlignment = TopLeft; Point2D margin; margin.Fill(5); int priority = -1; overlay->GetIntProperty(PROP_LAYOUT_PRIORITY, priority); if (!enumProb) { AddAlignmentProperty(overlay, currentAlignment, margin, priority); } else { currentAlignment = static_cast(enumProb->GetValueAsId()); } - OverlayVector &overlayVec = m_OverlayContainerMap[currentAlignment]; - if (!overlayVec.empty() && priority >= 0) + OverlayRankedMap &overlayVec = m_OverlayContainerMap[currentAlignment]; + if (!overlayVec.empty() && priority < 0) { - for (auto it = overlayVec.begin(); it != overlayVec.end(); ++it) - { - int listPrio = -1; - (*it)->GetIntProperty(PROP_LAYOUT_PRIORITY, listPrio); - if (listPrio >= priority) - { - overlayVec.insert(it + 1, overlay); - } - } + int max = overlayVec.rbegin()->first; + if (max < 100) + priority = 100; + else + priority = max + 1; } - overlayVec.push_back(overlay); + overlayVec.insert(std::pair(priority, overlay)); } this->PrepareLayout(); } OverlayLayouter2D::~OverlayLayouter2D() {} const std::string OverlayLayouter2D::GetID() const { return ANNOTATIONRENDERER_ID; } OverlayLayouter2D *OverlayLayouter2D::GetAnnotationRenderer(const std::string &rendererID) { OverlayLayouter2D *result = nullptr; AbstractAnnotationRenderer *registeredService = AnnotationService::GetAnnotationRenderer(ANNOTATIONRENDERER_ID, rendererID); if (registeredService) result = dynamic_cast(registeredService); if (!result) { result = new OverlayLayouter2D(rendererID); AnnotationService::RegisterAnnotationRenderer(result); } return result; } void OverlayLayouter2D::OnRenderWindowModified() { PrepareLayout(); } void OverlayLayouter2D::AddOverlay( Overlay *overlay, const std::string &rendererID, Alignment alignment, double marginX, double marginY, int priority) { GetAnnotationRenderer(rendererID); us::ServiceProperties props; props[Overlay::US_PROPKEY_AR_ID] = ANNOTATIONRENDERER_ID; props[Overlay::US_PROPKEY_RENDERER_ID] = rendererID; overlay->RegisterAsMicroservice(props); Point2D margin; margin[0] = marginX; margin[1] = marginY; AddAlignmentProperty(overlay, alignment, margin, priority); } void OverlayLayouter2D::AddOverlay( Overlay *overlay, BaseRenderer *renderer, Alignment alignment, double marginX, double marginY, int priority) { AddOverlay(overlay, renderer->GetName(), alignment, marginX, marginY, priority); } void OverlayLayouter2D::PrepareLayout() { if (!this->GetCurrentBaseRenderer()) return; int *size = this->GetCurrentBaseRenderer()->GetVtkRenderer()->GetSize(); PrepareTopLeftLayout(size); PrepareTopLayout(size); PrepareTopRightLayout(size); PrepareBottomLeftLayout(size); PrepareBottomLayout(size); PrepareBottomRightLayout(size); PrepareLeftLayout(size); PrepareRightLayout(size); } void OverlayLayouter2D::PrepareTopLeftLayout(int *displaySize) { double posX, posY; Point2D margin; posX = 0; posY = displaySize[1]; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[TopLeft]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[TopLeft]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); posY -= bounds.Size[1] + margin[1]; bounds.Position[0] = posX + margin[0]; bounds.Position[1] = posY; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); } } void OverlayLayouter2D::PrepareTopLayout(int *displaySize) { double posX, posY; Point2D margin; posX = 0; posY = displaySize[1]; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[Top]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[Top]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); posX = displaySize[0] / 2 - bounds.Size[0] / 2; posY -= bounds.Size[1] + margin[1]; bounds.Position[0] = posX; bounds.Position[1] = posY; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); } } void OverlayLayouter2D::PrepareTopRightLayout(int *displaySize) { double posX, posY; Point2D margin; posX = 0; posY = displaySize[1]; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[TopRight]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[TopRight]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); posX = displaySize[0] - (bounds.Size[0] + margin[0]); posY -= bounds.Size[1] + margin[1]; bounds.Position[0] = posX; bounds.Position[1] = posY; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); } } void OverlayLayouter2D::PrepareRightLayout(int *displaySize) { double posY; Point2D margin; double height = GetHeight(m_OverlayContainerMap[Right], GetCurrentBaseRenderer()); posY = (height / 2.0 + displaySize[1]) / 2.0; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[Right]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[Right]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); posY -= bounds.Size[1] + margin[1]; bounds.Position[0] = displaySize[0] - (bounds.Size[0] + margin[0]); bounds.Position[1] = posY + margin[1]; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); } } void OverlayLayouter2D::PrepareLeftLayout(int *displaySize) { double posY; Point2D margin; double height = GetHeight(m_OverlayContainerMap[Left], GetCurrentBaseRenderer()); posY = (height / 2.0 + displaySize[1]) / 2.0; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[Left]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[Left]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); posY -= bounds.Size[1] + margin[1]; bounds.Position[0] = margin[0]; bounds.Position[1] = posY; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); } } void OverlayLayouter2D::PrepareBottomLeftLayout(int * /*displaySize*/) { double posX, posY; Point2D margin; posX = 0; posY = 0; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[BottomLeft]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[BottomLeft]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); bounds.Position[0] = posX + margin[0]; bounds.Position[1] = posY + margin[1]; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); posY += bounds.Size[1] + margin[1]; } } void OverlayLayouter2D::PrepareBottomLayout(int *displaySize) { double posX, posY; Point2D margin; posX = 0; posY = 0; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[Bottom]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[Bottom]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); posX = displaySize[0] / 2 - bounds.Size[0] / 2; bounds.Position[0] = posX; bounds.Position[1] = posY + margin[1]; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); posY += bounds.Size[1] + margin[1]; } } void OverlayLayouter2D::PrepareBottomRightLayout(int *displaySize) { double posX, posY; Point2D margin; posX = 0; posY = 0; mitk::Overlay::Bounds bounds; - for (mitk::Overlay *overlay : m_OverlayContainerMap[BottomRight]) + OverlayRankedMap &overlayMap = m_OverlayContainerMap[BottomRight]; + for (auto it = overlayMap.cbegin(); it != overlayMap.cend(); ++it) { + Overlay *overlay = it->second; margin = GetMargin2D(overlay); bounds = overlay->GetBoundsOnDisplay(this->GetCurrentBaseRenderer()); posX = displaySize[0] - (bounds.Size[0] + margin[0]); bounds.Position[0] = posX; bounds.Position[1] = posY + margin[1]; overlay->SetBoundsOnDisplay(this->GetCurrentBaseRenderer(), bounds); posY += bounds.Size[1] + margin[1]; } } - double OverlayLayouter2D::GetHeight(OverlayVector &overlays, BaseRenderer *renderer) + double OverlayLayouter2D::GetHeight(OverlayRankedMap &overlays, BaseRenderer *renderer) { double height = 0; - for (auto overlay : overlays) + for (auto it = overlays.cbegin(); it != overlays.cend(); ++it) { + Overlay *overlay = it->second; Overlay::Bounds bounds = overlay->GetBoundsOnDisplay(renderer); height += bounds.Size[0]; height += GetMargin2D(overlay)[0]; } return height; } } diff --git a/Modules/Overlays/test/mitkTextOverlay2DLayouterRenderingTest.cpp b/Modules/Overlays/test/mitkTextOverlay2DLayouterRenderingTest.cpp index 51e4b4b270..8ac802494e 100644 --- a/Modules/Overlays/test/mitkTextOverlay2DLayouterRenderingTest.cpp +++ b/Modules/Overlays/test/mitkTextOverlay2DLayouterRenderingTest.cpp @@ -1,109 +1,121 @@ /*=================================================================== 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. ===================================================================*/ // MITK #include "mitkRenderingTestHelper.h" #include "mitkTestingMacros.h" // VTK #include "mitkOverlayLayouter2D.h" #include "mitkTextOverlay2D.h" #include -mitk::TextOverlay2D::Pointer createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Alignment align, - mitk::BaseRenderer *renderer, - int fontsize, - float red, - float green, - float blue, - int prio, - std::string text) +void createTextOverlayWithLayouter(std::vector &overlays, + mitk::OverlayLayouter2D::Alignment align, + mitk::BaseRenderer *renderer, + int fontsize, + float red, + float green, + float blue, + int prio, + std::string text) { // Create a textOverlay2D mitk::TextOverlay2D::Pointer textOverlay = mitk::TextOverlay2D::New(); textOverlay->SetText(text); textOverlay->SetFontSize(fontsize); textOverlay->SetColor(red, green, blue); textOverlay->SetOpacity(1); - mitk::OverlayLayouter2D::AddOverlay(textOverlay, renderer, align, 30, 30, prio); - - return textOverlay; + mitk::OverlayLayouter2D::AddOverlay(textOverlay, renderer, align, 5, 5, prio); + overlays.push_back(textOverlay); } int mitkTextOverlay2DLayouterRenderingTest(int argc, char *argv[]) { // load all arguments into a datastorage, take last argument as reference rendering // setup a renderwindow of fixed size X*Y // render the datastorage // compare rendering to reference image MITK_TEST_BEGIN("mitkTextOverlay2DLayouterRenderingTest") mitk::RenderingTestHelper renderingHelper(640, 480, argc, argv); // renderingHelper.SetAutomaticallyCloseRenderWindow(false); mitk::BaseRenderer *renderer = mitk::BaseRenderer::GetInstance(renderingHelper.GetVtkRenderWindow()); + std::vector overlays; + + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::TopLeft, renderer, 20, 1.0, 1.0, 1.0, 1, "TopLeft1"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::TopLeft, renderer, 15, 1.0, 1.0, 1.0, 3, "TopLeft3"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::TopLeft, renderer, 25, 1.0, 0.0, 1.0, 2, "TopLeft2"); + + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Top, renderer, 15, 1.0, 1.0, 1.0, 3, "Top3"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Top, renderer, 20, 1.0, 1.0, 1.0, 1, "Top1"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Top, renderer, 25, 1.0, 0.0, 1.0, 2, "Top2"); + + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::TopRight, renderer, 20, 1.0, 1.0, 1.0, 1, "TopRight1"); + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::TopRight, renderer, 15, 1.0, 1.0, 1.0, 3, "TopRight3"); + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::TopRight, renderer, 25, 1.0, 0.0, 1.0, 2, "TopRight2"); + + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Left, renderer, 20, 1.0, 1.0, 1.0, 1, "Left1"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Left, renderer, 15, 1.0, 1.0, 1.0, 3, "Left3"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Left, renderer, 25, 1.0, 0.0, 1.0, 2, "Left2"); + + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Right, renderer, 25, 1.0, 0.0, 1.0, 2, "Right2"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Right, renderer, 20, 1.0, 1.0, 1.0, 1, "Right1"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Right, renderer, 15, 1.0, 1.0, 1.0, 3, "Right3"); + + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::BottomLeft, renderer, 25, 1.0, 0.0, 1.0, 2, "BottomLeft2"); + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::BottomLeft, renderer, 20, 1.0, 1.0, 1.0, 1, "BottomLeft1"); + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::BottomLeft, renderer, 15, 1.0, 1.0, 1.0, 3, "BottomLeft3"); + + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Bottom, renderer, 15, 1.0, 1.0, 1.0, 3, "Bottom3"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Bottom, renderer, 20, 1.0, 1.0, 1.0, 1, "Bottom1"); + createTextOverlayWithLayouter(overlays, mitk::OverlayLayouter2D::Bottom, renderer, 25, 1.0, 0.0, 1.0, 2, "Bottom2"); + + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::BottomRight, renderer, 25, 1.0, 0.0, 1.0, 2, "BottomRight2"); + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::BottomRight, renderer, 20, 1.0, 1.0, 1.0, 1, "BottomRight1"); + createTextOverlayWithLayouter( + overlays, mitk::OverlayLayouter2D::BottomRight, renderer, 15, 1.0, 1.0, 1.0, 3, "BottomRight3"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::TopLeft, renderer, 20, 1.0, 1.0, 1.0, 1, "TopLeft1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::TopLeft, renderer, 15, 1.0, 1.0, 1.0, 3, "TopLeft3"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::TopLeft, renderer, 25, 1.0, 0.0, 1.0, 2, "TopLeft2"); - - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Top, renderer, 15, 1.0, 1.0, 1.0, 3, "Top3"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Top, renderer, 20, 1.0, 1.0, 1.0, 1, "Top1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Top, renderer, 25, 1.0, 0.0, 1.0, 2, "Top2"); - - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::TopRight, renderer, 20, 1.0, 1.0, 1.0, 1, "TopRight1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::TopRight, renderer, 15, 1.0, 1.0, 1.0, 3, "TopRight3"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::TopRight, renderer, 25, 1.0, 0.0, 1.0, 2, "TopRight2"); - - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Left, renderer, 20, 1.0, 1.0, 1.0, 1, "Left1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Left, renderer, 15, 1.0, 1.0, 1.0, 3, "Left3"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Left, renderer, 25, 1.0, 0.0, 1.0, 2, "Left2"); - - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Right, renderer, 25, 1.0, 0.0, 1.0, 2, "Right2"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Right, renderer, 20, 1.0, 1.0, 1.0, 1, "Right1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Right, renderer, 15, 1.0, 1.0, 1.0, 3, "Right3"); - - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::BottomLeft, renderer, 25, 1.0, 0.0, 1.0, 2, "BottomLeft2"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::BottomLeft, renderer, 20, 1.0, 1.0, 1.0, 1, "BottomLeft1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::BottomLeft, renderer, 15, 1.0, 1.0, 1.0, 3, "BottomLeft3"); - - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Bottom, renderer, 15, 1.0, 1.0, 1.0, 3, "Bottom3"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Bottom, renderer, 20, 1.0, 1.0, 1.0, 1, "Bottom1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::Bottom, renderer, 25, 1.0, 0.0, 1.0, 2, "Bottom2"); - - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::BottomRight, renderer, 25, 1.0, 0.0, 1.0, 2, "BottomRight2"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::BottomRight, renderer, 20, 1.0, 1.0, 1.0, 1, "BottomRight1"); - createTextOverlayWithLayouter(mitk::OverlayLayouter2D::BottomRight, renderer, 15, 1.0, 1.0, 1.0, 3, "BottomRight3"); - + renderingHelper.Render(); + renderingHelper.GetVtkRenderWindow()->Modified(); renderingHelper.Render(); renderingHelper.SetAutomaticallyCloseRenderWindow(false); // use this to generate a reference screenshot or save the file: bool generateReferenceScreenshot = false; if (generateReferenceScreenshot) { renderingHelper.SaveReferenceScreenShot( "/home/christoph/Pictures/RenderingTestData/mitkTextOverlay2DLayouterRenderingTest_ball.png"); } //### Usage of CompareRenderWindowAgainstReference: See docu of mitkRrenderingTestHelper MITK_TEST_CONDITION(renderingHelper.CompareRenderWindowAgainstReference(argc, argv) == true, "CompareRenderWindowAgainstReference test result positive?"); MITK_TEST_END(); }