diff Framework/Scene2D/GrayscaleStyleConfigurator.cpp @ 835:0965b665c653

windowing and linear interpolation in GrayscaleStyleConfigurator
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 31 May 2019 16:30:32 +0200
parents aead999345e0
children e62e7361fd60
line wrap: on
line diff
--- a/Framework/Scene2D/GrayscaleStyleConfigurator.cpp	Fri May 31 15:21:50 2019 +0200
+++ b/Framework/Scene2D/GrayscaleStyleConfigurator.cpp	Fri May 31 16:30:32 2019 +0200
@@ -21,12 +21,51 @@
 
 #include "GrayscaleStyleConfigurator.h"
 
+#include "FloatTextureSceneLayer.h"
+
 #include <Core/OrthancException.h>
 
 namespace OrthancStone
 {
-  TextureBaseSceneLayer* GrayscaleStyleConfigurator::CreateTextureFromImage(const Orthanc::ImageAccessor& image) const
+  void GrayscaleStyleConfigurator::SetLinearInterpolation(bool enabled)
+  {
+    linearInterpolation_ = enabled;
+    revision_++;
+  }
+
+  TextureBaseSceneLayer* GrayscaleStyleConfigurator::CreateTextureFromImage(
+    const Orthanc::ImageAccessor& image) const
   {
     throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented);
   }
+
+  TextureBaseSceneLayer* GrayscaleStyleConfigurator::CreateTextureFromDicom(
+    const Orthanc::ImageAccessor& frame,
+    const DicomInstanceParameters& parameters) const
+  {
+    std::auto_ptr<TextureBaseSceneLayer> layer(parameters.CreateTexture(frame));
+
+    if (layer.get() == NULL ||
+        layer->GetTexture().GetFormat() != Orthanc::PixelFormat_Float32)
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_IncompatibleImageFormat);
+    }
+    else
+    {
+      return layer.release();
+    }
+  }
+
+
+  void GrayscaleStyleConfigurator::ApplyStyle(ISceneLayer& layer) const
+  {
+    FloatTextureSceneLayer& l = dynamic_cast<FloatTextureSceneLayer&>(layer);
+    
+    l.SetLinearInterpolation(linearInterpolation_);
+
+    if (hasWindowing_)
+    {
+      l.SetWindowing(windowing_);
+    }
+  }
 }