Mercurial > hg > orthanc-stone
comparison Samples/Sdl/Loader.cpp @ 683:dbc1d8bfc68a
reorganizing ImageBuffer3D
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 16 May 2019 16:01:36 +0200 |
parents | 9723fceccb9f |
children | 7719eb852dd5 |
comparison
equal
deleted
inserted
replaced
681:9723fceccb9f | 683:dbc1d8bfc68a |
---|---|
23 #include "../../Framework/Messages/IMessage.h" | 23 #include "../../Framework/Messages/IMessage.h" |
24 #include "../../Framework/Messages/IObservable.h" | 24 #include "../../Framework/Messages/IObservable.h" |
25 #include "../../Framework/Messages/MessageBroker.h" | 25 #include "../../Framework/Messages/MessageBroker.h" |
26 #include "../../Framework/StoneInitialization.h" | 26 #include "../../Framework/StoneInitialization.h" |
27 #include "../../Framework/Toolbox/GeometryToolbox.h" | 27 #include "../../Framework/Toolbox/GeometryToolbox.h" |
28 #include "../../Framework/Toolbox/SlicesSorter.h" | |
28 #include "../../Framework/Volumes/ImageBuffer3D.h" | 29 #include "../../Framework/Volumes/ImageBuffer3D.h" |
29 #include "../../Framework/Toolbox/SlicesSorter.h" | 30 #include "../../Framework/Scene2D/ScenePoint2D.h" |
30 | 31 |
31 // From Orthanc framework | 32 // From Orthanc framework |
32 #include <Core/Compression/GzipCompressor.h> | 33 #include <Core/Compression/GzipCompressor.h> |
33 #include <Core/Compression/ZlibCompressor.h> | 34 #include <Core/Compression/ZlibCompressor.h> |
34 #include <Core/DicomFormat/DicomArray.h> | 35 #include <Core/DicomFormat/DicomArray.h> |
42 #include <Core/Images/PngReader.h> | 43 #include <Core/Images/PngReader.h> |
43 #include <Core/Images/PngWriter.h> | 44 #include <Core/Images/PngWriter.h> |
44 #include <Core/Logging.h> | 45 #include <Core/Logging.h> |
45 #include <Core/MultiThreading/SharedMessageQueue.h> | 46 #include <Core/MultiThreading/SharedMessageQueue.h> |
46 #include <Core/OrthancException.h> | 47 #include <Core/OrthancException.h> |
48 #include <Core/SystemToolbox.h> | |
47 #include <Core/Toolbox.h> | 49 #include <Core/Toolbox.h> |
48 #include <Core/SystemToolbox.h> | |
49 | 50 |
50 #include <json/reader.h> | 51 #include <json/reader.h> |
51 #include <json/value.h> | 52 #include <json/value.h> |
52 #include <json/writer.h> | 53 #include <json/writer.h> |
53 | 54 |
97 | 98 |
98 virtual void Schedule(const OrthancStone::IObserver& receiver, | 99 virtual void Schedule(const OrthancStone::IObserver& receiver, |
99 IOracleCommand* command) = 0; // Takes ownership | 100 IOracleCommand* command) = 0; // Takes ownership |
100 }; | 101 }; |
101 | 102 |
103 | |
104 | |
105 class IVolumeSlicer : public boost::noncopyable | |
106 { | |
107 public: | |
108 virtual ~IVolumeSlicer() | |
109 { | |
110 } | |
111 | |
112 virtual void SetViewportPlane(const OrthancStone::CoordinateSystem3D& plane) = 0; | |
113 }; | |
102 | 114 |
103 | 115 |
104 | 116 |
105 class OracleCommandWithPayload : public IOracleCommand | 117 class OracleCommandWithPayload : public IOracleCommand |
106 { | 118 { |
1442 | 1454 |
1443 OrthancStone::CoordinateSystem3D geometry = instance->GetGeometry(); | 1455 OrthancStone::CoordinateSystem3D geometry = instance->GetGeometry(); |
1444 slices.AddSlice(geometry, instance.release()); | 1456 slices.AddSlice(geometry, instance.release()); |
1445 } | 1457 } |
1446 | 1458 |
1447 that_.image_.SetGeometry(slices); | 1459 that_.volume_.SetGeometry(slices); |
1448 | 1460 |
1449 for (size_t i = 0; i < that_.image_.GetSlicesCount(); i++) | 1461 for (size_t i = 0; i < that_.volume_.GetSlicesCount(); i++) |
1450 { | 1462 { |
1451 const DicomInstanceParameters& slice = that_.image_.GetSliceParameters(i); | 1463 const DicomInstanceParameters& slice = that_.volume_.GetSliceParameters(i); |
1452 | 1464 |
1453 const std::string& instance = slice.GetOrthancInstanceIdentifier(); | 1465 const std::string& instance = slice.GetOrthancInstanceIdentifier(); |
1454 if (instance.empty()) | 1466 if (instance.empty()) |
1455 { | 1467 { |
1456 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | 1468 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
1488 command->SetHttpHeader("Accept", std::string(Orthanc::EnumerationToString(Orthanc::MimeType_Pam))); | 1500 command->SetHttpHeader("Accept", std::string(Orthanc::EnumerationToString(Orthanc::MimeType_Pam))); |
1489 command->SetUri(uri); | 1501 command->SetUri(uri); |
1490 #endif | 1502 #endif |
1491 | 1503 |
1492 command->SetExpectedPixelFormat(slice.GetExpectedPixelFormat()); | 1504 command->SetExpectedPixelFormat(slice.GetExpectedPixelFormat()); |
1493 command->SetPayload(new LoadSliceImage(that_.image_, i)); | 1505 command->SetPayload(new LoadSliceImage(that_.volume_, i)); |
1494 | 1506 |
1495 that_.oracle_.Schedule(that_, command.release()); | 1507 that_.oracle_.Schedule(that_, command.release()); |
1496 } | 1508 } |
1497 } | 1509 } |
1498 }; | 1510 }; |
1519 }; | 1531 }; |
1520 | 1532 |
1521 | 1533 |
1522 IOracle& oracle_; | 1534 IOracle& oracle_; |
1523 bool active_; | 1535 bool active_; |
1524 DicomVolumeImage image_; | 1536 DicomVolumeImage volume_; |
1525 | 1537 |
1526 public: | 1538 public: |
1527 VolumeSeriesOrthancLoader(IOracle& oracle, | 1539 VolumeSeriesOrthancLoader(IOracle& oracle, |
1528 OrthancStone::IObservable& oracleObservable) : | 1540 OrthancStone::IObservable& oracleObservable) : |
1529 IObserver(oracleObservable.GetBroker()), | 1541 IObserver(oracleObservable.GetBroker()), |