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());