Mercurial > hg > orthanc-stone
comparison Samples/Sdl/Loader.cpp @ 648:1088d4c4d78c
cont
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 13 May 2019 17:19:04 +0200 |
parents | 6af3099ed8da |
children | 970949ff868a |
comparison
equal
deleted
inserted
replaced
647:6af3099ed8da | 648:1088d4c4d78c |
---|---|
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/Volumes/ImageBuffer3D.h" | 28 #include "../../Framework/Volumes/ImageBuffer3D.h" |
29 #include "../../Framework/Toolbox/SlicesSorter.h" | |
29 | 30 |
30 // From Orthanc framework | 31 // From Orthanc framework |
31 #include <Core/Compression/GzipCompressor.h> | 32 #include <Core/Compression/GzipCompressor.h> |
32 #include <Core/Compression/ZlibCompressor.h> | 33 #include <Core/Compression/ZlibCompressor.h> |
33 #include <Core/DicomFormat/DicomArray.h> | 34 #include <Core/DicomFormat/DicomArray.h> |
1136 }; | 1137 }; |
1137 }; | 1138 }; |
1138 | 1139 |
1139 | 1140 |
1140 | 1141 |
1141 class DicomInstanceParameters : public boost::noncopyable | 1142 class DicomInstanceParameters : |
1143 public Orthanc::IDynamicObject /* to be used as a payload of SlicesSorter */ | |
1142 { | 1144 { |
1143 private: | 1145 private: |
1144 Orthanc::DicomImageInformation imageInformation_; | 1146 Orthanc::DicomImageInformation imageInformation_; |
1145 OrthancStone::SopClassUid sopClassUid_; | 1147 OrthancStone::SopClassUid sopClassUid_; |
1146 double thickness_; | 1148 double thickness_; |
1372 tmp = GetFrameGeometry(frame); | 1374 tmp = GetFrameGeometry(frame); |
1373 } | 1375 } |
1374 | 1376 |
1375 double distance; | 1377 double distance; |
1376 | 1378 |
1377 return (OrthancStone::CoordinateSystem3D::GetDistance(distance, tmp, plan) && | 1379 return (OrthancStone::CoordinateSystem3D::GetDistance(distance, tmp, plane) && |
1378 OrthancStone::LinearAlgebra::IsNear(distance, thickness_ / 2.0)); | 1380 distance <= thickness_ / 2.0); |
1379 } | 1381 } |
1380 | 1382 |
1381 bool IsColor() const | 1383 bool IsColor() const |
1382 { | 1384 { |
1383 return isColor_; | 1385 return isColor_; |
1489 for (size_t i = 0; i < instances.size(); i++) | 1491 for (size_t i = 0; i < instances.size(); i++) |
1490 { | 1492 { |
1491 Orthanc::DicomMap dicom; | 1493 Orthanc::DicomMap dicom; |
1492 dicom.FromDicomAsJson(value[instances[i]]); | 1494 dicom.FromDicomAsJson(value[instances[i]]); |
1493 | 1495 |
1494 DicomInstanceParameters instance(dicom); | 1496 std::auto_ptr<DicomInstanceParameters> instance(new DicomInstanceParameters(dicom)); |
1495 | 1497 |
1496 } | 1498 OrthancStone::CoordinateSystem3D geometry = instance->GetGeometry(); |
1499 that_.slices_.AddSlice(geometry, instance.release()); | |
1500 } | |
1501 | |
1502 if (!that_.slices_.Sort()) | |
1503 { | |
1504 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange, | |
1505 "Cannot sort the 3D slices of a DICOM series"); | |
1506 } | |
1507 | |
1508 printf("series sorted\n"); | |
1497 } | 1509 } |
1498 }; | 1510 }; |
1499 | 1511 |
1500 | 1512 |
1501 class LoadInstanceGeometryHandler : public MessageHandler | 1513 class LoadInstanceGeometryHandler : public MessageHandler |
1527 }; | 1539 }; |
1528 | 1540 |
1529 | 1541 |
1530 bool active_; | 1542 bool active_; |
1531 std::auto_ptr<OrthancStone::ImageBuffer3D> image_; | 1543 std::auto_ptr<OrthancStone::ImageBuffer3D> image_; |
1532 | 1544 OrthancStone::SlicesSorter slices_; |
1533 | 1545 |
1534 public: | 1546 public: |
1535 AxialVolumeOrthancLoader(OrthancStone::IObservable& oracle) : | 1547 AxialVolumeOrthancLoader(OrthancStone::IObservable& oracle) : |
1536 IObserver(oracle.GetBroker()), | 1548 IObserver(oracle.GetBroker()), |
1537 active_(false) | 1549 active_(false) |