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)