Mercurial > hg > orthanc-stone
changeset 1375:4431ffdcc2a4
merge
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Mon, 20 Apr 2020 18:26:32 +0200 |
parents | 1e4878ed1d77 (diff) 35469f75faa2 (current diff) |
children | b7aebc10aca0 6ea4062c1a0d f4a06ad1580b |
files | Framework/Radiography/RadiographyMaskLayer.cpp |
diffstat | 5 files changed, 80 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- 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<Orthanc::ImageProcessing::ImagePoint>::const_iterator - corner = corners_.begin(); corner != corners_.end(); ++corner) + for (std::vector<Orthanc::ImageProcessing::ImagePoint>::const_iterator corner = corners_.begin(); corner != corners_.end(); ++corner) { double x = static_cast<double>(corner->GetX()); double y = static_cast<double>(corner->GetY());
--- 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 <Core/Images/Image.h> #include <Core/Images/ImageProcessing.h> @@ -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<ISceneLayer> layer; + if (dynamic_cast<RadiographyDicomLayer*>(it->second)) + { + RadiographyDicomLayer* oldLayer = dynamic_cast<RadiographyDicomLayer*>(it->second); + + std::unique_ptr<FloatTextureSceneLayer> 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<RadiographyTextLayer*>(it->second)) + { + RadiographyTextLayer* oldLayer = dynamic_cast<RadiographyTextLayer*>(it->second); + + std::unique_ptr<TextSceneLayer> 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()); + + } + + } + } +
--- 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,
--- 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()) {