Mercurial > hg > orthanc-stone
comparison Framework/dev.h @ 381:19bd222283ae
uncoupling LayerReadyMessage from the creation of the renderer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 06 Nov 2018 15:36:06 +0100 |
parents | ba5ad93f935a |
children | 20f149669c1f |
comparison
equal
deleted
inserted
replaced
380:ba5ad93f935a | 381:19bd222283ae |
---|---|
497 class VolumeImageSource : | 497 class VolumeImageSource : |
498 public LayerSourceBase, | 498 public LayerSourceBase, |
499 private ISlicedVolume::IObserver | 499 private ISlicedVolume::IObserver |
500 { | 500 { |
501 private: | 501 private: |
502 class RendererFactory : public LayerReadyMessage::IRendererFactory | |
503 { | |
504 private: | |
505 const Orthanc::ImageAccessor& frame_; | |
506 const Slice& slice_; | |
507 bool isFullQuality_; | |
508 | |
509 public: | |
510 RendererFactory(const Orthanc::ImageAccessor& frame, | |
511 const Slice& slice, | |
512 bool isFullQuality) : | |
513 frame_(frame), | |
514 slice_(slice), | |
515 isFullQuality_(isFullQuality) | |
516 { | |
517 } | |
518 | |
519 virtual ILayerRenderer* CreateRenderer() const | |
520 { | |
521 return FrameRenderer::CreateRenderer(frame_, slice_, isFullQuality_); | |
522 } | |
523 }; | |
524 | |
525 | |
502 OrthancVolumeImage& volume_; | 526 OrthancVolumeImage& volume_; |
503 std::auto_ptr<VolumeImageGeometry> axialGeometry_; | 527 std::auto_ptr<VolumeImageGeometry> axialGeometry_; |
504 std::auto_ptr<VolumeImageGeometry> coronalGeometry_; | 528 std::auto_ptr<VolumeImageGeometry> coronalGeometry_; |
505 std::auto_ptr<VolumeImageGeometry> sagittalGeometry_; | 529 std::auto_ptr<VolumeImageGeometry> sagittalGeometry_; |
506 | 530 |
655 // TODO Transfer ownership if non-axial, to avoid memcpy | 679 // TODO Transfer ownership if non-axial, to avoid memcpy |
656 frame.reset(Orthanc::Image::Clone(reader.GetAccessor())); | 680 frame.reset(Orthanc::Image::Clone(reader.GetAccessor())); |
657 } | 681 } |
658 | 682 |
659 std::auto_ptr<Slice> slice(geometry.GetSlice(closest)); | 683 std::auto_ptr<Slice> slice(geometry.GetSlice(closest)); |
660 LayerSourceBase::NotifyLayerReady( | 684 |
661 FrameRenderer::CreateRenderer(*frame, *slice, isFullQuality), | 685 RendererFactory factory(*frame, *slice, isFullQuality); |
686 LayerSourceBase::NotifyLayerReady(factory, | |
662 //new SliceOutlineRenderer(slice), | 687 //new SliceOutlineRenderer(slice), |
663 slice->GetGeometry()); | 688 slice->GetGeometry()); |
664 return; | 689 return; |
665 } | 690 } |
666 } | 691 } |
838 | 863 |
839 | 864 |
840 class SliceLocationSource : public LayerSourceBase | 865 class SliceLocationSource : public LayerSourceBase |
841 { | 866 { |
842 private: | 867 private: |
868 class RendererFactory : public LayerReadyMessage::IRendererFactory | |
869 { | |
870 private: | |
871 double x1_; | |
872 double y1_; | |
873 double x2_; | |
874 double y2_; | |
875 const CoordinateSystem3D& slice_; | |
876 | |
877 public: | |
878 RendererFactory(double x1, | |
879 double y1, | |
880 double x2, | |
881 double y2, | |
882 const CoordinateSystem3D& slice) : | |
883 x1_(x1), | |
884 y1_(y1), | |
885 x2_(x2), | |
886 y2_(y2), | |
887 slice_(slice) | |
888 { | |
889 } | |
890 | |
891 virtual ILayerRenderer* CreateRenderer() const | |
892 { | |
893 return new LineLayerRenderer(x1_, y1_, x2_, y2_, slice_); | |
894 } | |
895 }; | |
896 | |
843 LayerWidget& otherPlane_; | 897 LayerWidget& otherPlane_; |
844 | 898 |
845 public: | 899 public: |
846 SliceLocationSource(MessageBroker& broker, LayerWidget& otherPlane) : | 900 SliceLocationSource(MessageBroker& broker, LayerWidget& otherPlane) : |
847 LayerSourceBase(broker), | 901 LayerSourceBase(broker), |
883 if (GeometryToolbox::ClipLineToRectangle(x1, y1, x2, y2, | 937 if (GeometryToolbox::ClipLineToRectangle(x1, y1, x2, y2, |
884 x1, y1, x2, y2, | 938 x1, y1, x2, y2, |
885 extent.GetX1(), extent.GetY1(), | 939 extent.GetX1(), extent.GetY1(), |
886 extent.GetX2(), extent.GetY2())) | 940 extent.GetX2(), extent.GetY2())) |
887 { | 941 { |
888 NotifyLayerReady(new LineLayerRenderer(x1, y1, x2, y2, slice), reference.GetGeometry()); | 942 RendererFactory factory(x1, y1, x2, y2, slice); |
943 NotifyLayerReady(factory, reference.GetGeometry()); | |
889 } | 944 } |
890 else | 945 else |
891 { | 946 { |
892 // Error: Parallel slices | 947 // Error: Parallel slices |
893 NotifyLayerError(reference.GetGeometry()); | 948 NotifyLayerError(reference.GetGeometry()); |