Mercurial > hg > orthanc-stone
diff Framework/dev.h @ 119:ba83e38cf3ff wasm
rendering of rt-dose
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 02 Oct 2017 22:01:41 +0200 |
parents | 42c05a3baee3 |
children | 063f7f3d9f14 |
line wrap: on
line diff
--- a/Framework/dev.h Mon Oct 02 14:31:26 2017 +0200 +++ b/Framework/dev.h Mon Oct 02 22:01:41 2017 +0200 @@ -47,7 +47,7 @@ OrthancSlicesLoader loader_; std::auto_ptr<ImageBuffer3D> image_; std::auto_ptr<DownloadStack> downloadStack_; - + bool computeRange_; void ScheduleSliceDownload() { @@ -151,7 +151,7 @@ LOG(INFO) << "Creating a volume image of size " << width << "x" << height << "x" << loader.GetSliceCount() << " in " << Orthanc::EnumerationToString(format); - image_.reset(new ImageBuffer3D(format, width, height, loader.GetSliceCount())); + image_.reset(new ImageBuffer3D(format, width, height, loader.GetSliceCount(), computeRange_)); image_->SetAxialGeometry(loader.GetSlice(0).GetGeometry()); image_->SetVoxelDimensions(loader.GetSlice(0).GetPixelSpacingX(), loader.GetSlice(0).GetPixelSpacingY(), spacingZ); @@ -201,8 +201,10 @@ } public: - OrthancVolumeImage(IWebService& orthanc) : - loader_(*this, orthanc) + OrthancVolumeImage(IWebService& orthanc, + bool computeRange) : + loader_(*this, orthanc), + computeRange_(computeRange) { } @@ -244,6 +246,19 @@ return *image_; } } + + bool FitWindowingToRange(RenderStyle& style, + const DicomFrameConverter& converter) const + { + if (image_.get() == NULL) + { + return false; + } + else + { + return image_->FitWindowingToRange(style, converter); + } + } }; @@ -322,8 +337,8 @@ axialThickness * axial.GetGeometry().GetNormal()); reference_ = CoordinateSystem3D(origin, - axial.GetGeometry().GetAxisX(), - -axial.GetGeometry().GetNormal()); + axial.GetGeometry().GetAxisX(), + -axial.GetGeometry().GetNormal()); } void SetupSagittal(const OrthancVolumeImage& volume) @@ -344,8 +359,8 @@ axialThickness * axial.GetGeometry().GetNormal()); reference_ = CoordinateSystem3D(origin, - axial.GetGeometry().GetAxisY(), - axial.GetGeometry().GetNormal()); + axial.GetGeometry().GetAxisY(), + axial.GetGeometry().GetNormal()); } public: @@ -376,6 +391,8 @@ default: throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); } + + //sliceThickness_ = 3.0f; // TODO XXXXX } size_t GetSliceCount() const @@ -416,7 +433,7 @@ } } - Slice GetSlice(size_t slice) const + Slice* GetSlice(size_t slice) const { if (slice < 0 || slice >= depth_) @@ -426,12 +443,12 @@ else { CoordinateSystem3D origin(reference_.GetOrigin() + - static_cast<double>(slice) * sliceThickness_ * reference_.GetNormal(), - reference_.GetAxisX(), - reference_.GetAxisY()); + static_cast<double>(slice) * sliceThickness_ * reference_.GetNormal(), + reference_.GetAxisX(), + reference_.GetAxisY()); - return Slice(origin, pixelSpacingX_, pixelSpacingY_, sliceThickness_, - width_, height_, converter_); + return new Slice(origin, pixelSpacingX_, pixelSpacingY_, sliceThickness_, + width_, height_, converter_); } } }; @@ -564,7 +581,8 @@ { // As the slices of the volumic image are arranged in a box, // we only consider one single reference slice (the one with index 0). - GetProjectionGeometry(projection).GetSlice(0).GetExtent(points); + std::auto_ptr<Slice> slice(GetProjectionGeometry(projection).GetSlice(0)); + slice->GetExtent(points); return true; } @@ -595,11 +613,11 @@ frame.reset(Orthanc::Image::Clone(reader.GetAccessor())); } - Slice slice = geometry.GetSlice(closest); + std::auto_ptr<Slice> slice(geometry.GetSlice(closest)); LayerSourceBase::NotifyLayerReady( - FrameRenderer::CreateRenderer(frame.release(), slice, isFullQuality), + FrameRenderer::CreateRenderer(frame.release(), *slice, isFullQuality), //new SliceOutlineRenderer(slice), - slice, false); + *slice, false); return; } } @@ -613,14 +631,15 @@ class VolumeImageInteractor : public IWorldSceneInteractor, - private ISlicedVolume::IObserver + protected ISlicedVolume::IObserver { private: LayerWidget& widget_; VolumeProjection projection_; std::auto_ptr<VolumeImageGeometry> slices_; size_t slice_; - + + protected: virtual void NotifyGeometryReady(const ISlicedVolume& volume) { if (slices_.get() == NULL) @@ -761,7 +780,9 @@ if (slices_.get() != NULL) { slice_ = slice; - widget_.SetSlice(slices_->GetSlice(slice_).GetGeometry()); + + std::auto_ptr<Slice> tmp(slices_->GetSlice(slice_)); + widget_.SetSlice(tmp->GetGeometry()); } } };