# HG changeset patch # User Alain Mazy # Date 1587399992 -7200 # Node ID 4431ffdcc2a415e02e0ba31a5a1ef42e26584e65 # Parent 1e4878ed1d77b3b19ad8103f808796de98b05951# Parent 35469f75faa209c596f412a7a291cc1100a68f18 merge diff -r 35469f75faa2 -r 4431ffdcc2a4 Framework/Radiography/RadiographyMaskLayer.cpp --- a/Framework/Radiography/RadiographyMaskLayer.cpp Tue Mar 31 15:47:29 2020 +0200 +++ b/Framework/Radiography/RadiographyMaskLayer.cpp Mon Apr 20 18:26:32 2020 +0200 @@ -85,8 +85,7 @@ { // get the extent of the in-mask area Extent2D sceneExtent; - for (std::vector::const_iterator - corner = corners_.begin(); corner != corners_.end(); ++corner) + for (std::vector::const_iterator corner = corners_.begin(); corner != corners_.end(); ++corner) { double x = static_cast(corner->GetX()); double y = static_cast(corner->GetY()); diff -r 35469f75faa2 -r 4431ffdcc2a4 Framework/Radiography/RadiographyScene.cpp --- a/Framework/Radiography/RadiographyScene.cpp Tue Mar 31 15:47:29 2020 +0200 +++ b/Framework/Radiography/RadiographyScene.cpp Mon Apr 20 18:26:32 2020 +0200 @@ -26,6 +26,9 @@ #include "RadiographyTextLayer.h" #include "RadiographyMaskLayer.h" #include "../Deprecated/Toolbox/DicomFrameConverter.h" +#include "../Scene2D/CairoCompositor.h" +#include "../Scene2D/FloatTextureSceneLayer.h" +#include "../Scene2D/TextSceneLayer.h" #include #include @@ -911,4 +914,56 @@ } } + void RadiographyScene::ExportToScene2D(Scene2D& output) const + { + int depth = 0; + for (Layers::const_iterator it = layers_.begin(); + it != layers_.end(); ++it) + { + assert(it->second != NULL); + + std::unique_ptr layer; + if (dynamic_cast(it->second)) + { + RadiographyDicomLayer* oldLayer = dynamic_cast(it->second); + + std::unique_ptr newLayer(new FloatTextureSceneLayer(*(oldLayer->GetSourceImage()))); + + newLayer->SetOrigin(oldLayer->GetGeometry().GetPanX(), + oldLayer->GetGeometry().GetPanY() + ); + newLayer->SetAngle(oldLayer->GetGeometry().GetAngle()); + + layer.reset(newLayer.release()); + + // TODO: windowing dynamic_cast + } + else if (dynamic_cast(it->second)) + { + RadiographyTextLayer* oldLayer = dynamic_cast(it->second); + + std::unique_ptr newLayer(new TextSceneLayer()); + + newLayer->SetText(oldLayer->GetText()); + newLayer->SetColor(oldLayer->GetForegroundGreyLevel(), + oldLayer->GetForegroundGreyLevel(), + oldLayer->GetForegroundGreyLevel() + ); + newLayer->SetPosition(oldLayer->GetGeometry().GetPanX(), + oldLayer->GetGeometry().GetPanY() + ); + newLayer->SetFontIndex(1); + newLayer->SetAnchor(BitmapAnchor_TopLeft); + //newLayer->SetAngle(oldLayer->GetGeometry().GetAngle()); + + layer.reset(newLayer.release()); + } + + output.SetLayer(depth++, layer.release()); + + } + + } + } + diff -r 35469f75faa2 -r 4431ffdcc2a4 Framework/Radiography/RadiographyScene.h --- a/Framework/Radiography/RadiographyScene.h Tue Mar 31 15:47:29 2020 +0200 +++ b/Framework/Radiography/RadiographyScene.h Mon Apr 20 18:26:32 2020 +0200 @@ -28,6 +28,8 @@ #include "Core/Images/Image.h" #include "Core/Images/ImageProcessing.h" +#include "../Scene2D/Scene2D.h" + namespace OrthancStone { class RadiographyDicomLayer; @@ -298,6 +300,8 @@ void GetRange(float& minValue, float& maxValue) const; + void ExportToScene2D(Scene2D& output) const; + // Export using PAM is faster than using PNG, but requires Orthanc // core >= 1.4.3 void ExportDicom(Deprecated::OrthancApiClient& orthanc, diff -r 35469f75faa2 -r 4431ffdcc2a4 Framework/Scene2D/Scene2D.cpp --- a/Framework/Scene2D/Scene2D.cpp Tue Mar 31 15:47:29 2020 +0200 +++ b/Framework/Scene2D/Scene2D.cpp Mon Apr 20 18:26:32 2020 +0200 @@ -222,22 +222,29 @@ canvasToScene_ = inverse; } + void Scene2D::GetBoundingBox(Extent2D &target) const + { + target.Reset(); + + for (Content::const_iterator it = content_.begin(); + it != content_.end(); ++it) + { + assert(it->second != NULL); + + Extent2D tmp; + if (it->second->GetLayer().GetBoundingBox(tmp)) + { + target.Union(tmp); + } + } + } + void Scene2D::FitContent(unsigned int canvasWidth, unsigned int canvasHeight) { Extent2D extent; - for (Content::const_iterator it = content_.begin(); - it != content_.end(); ++it) - { - assert(it->second != NULL); - - Extent2D tmp; - if (it->second->GetLayer().GetBoundingBox(tmp)) - { - extent.Union(tmp); - } - } + GetBoundingBox(extent); if (!extent.IsEmpty()) { diff -r 35469f75faa2 -r 4431ffdcc2a4 Framework/Scene2D/Scene2D.h --- a/Framework/Scene2D/Scene2D.h Tue Mar 31 15:47:29 2020 +0200 +++ b/Framework/Scene2D/Scene2D.h Mon Apr 20 18:26:32 2020 +0200 @@ -113,5 +113,7 @@ void FitContent(unsigned int canvasWidth, unsigned int canvasHeight); + + void GetBoundingBox(Extent2D& target) const; }; }