comparison Samples/Sdl/Loader.cpp @ 789:c83a45f864b2

Merge
author Benjamin Golinvaux <bgo@osimis.io>
date Tue, 28 May 2019 08:15:38 +0200
parents e76c4eef1054 9f3b2027a4a9
children 4fe4b221a31f
comparison
equal deleted inserted replaced
788:e76c4eef1054 789:c83a45f864b2
35 #include "../../Framework/Scene2D/PolylineSceneLayer.h" 35 #include "../../Framework/Scene2D/PolylineSceneLayer.h"
36 #include "../../Framework/Scene2D/LookupTableTextureSceneLayer.h" 36 #include "../../Framework/Scene2D/LookupTableTextureSceneLayer.h"
37 #include "../../Framework/StoneInitialization.h" 37 #include "../../Framework/StoneInitialization.h"
38 #include "../../Framework/Toolbox/GeometryToolbox.h" 38 #include "../../Framework/Toolbox/GeometryToolbox.h"
39 #include "../../Framework/Toolbox/SlicesSorter.h" 39 #include "../../Framework/Toolbox/SlicesSorter.h"
40 #include "../../Framework/Toolbox/DicomStructureSet.h"
40 #include "../../Framework/Volumes/ImageBuffer3D.h" 41 #include "../../Framework/Volumes/ImageBuffer3D.h"
41 #include "../../Framework/Volumes/VolumeImageGeometry.h" 42 #include "../../Framework/Volumes/VolumeImageGeometry.h"
42 #include "../../Framework/Volumes/VolumeReslicer.h" 43 #include "../../Framework/Volumes/VolumeReslicer.h"
43 44
44 // From Orthanc framework 45 // From Orthanc framework
1461 } 1462 }
1462 }; 1463 };
1463 1464
1464 1465
1465 1466
1467 class DicomStructureSetLoader :
1468 public IObserver,
1469 public IVolumeSlicer
1470 {
1471 private:
1472 enum State
1473 {
1474 State_Setup,
1475 State_Loading,
1476 State_Ready
1477 };
1478
1479
1480 std::auto_ptr<DicomStructureSet> content_;
1481 IOracle& oracle_;
1482 State state_;
1483 std::string instanceId_;
1484
1485 void Handle(const OrthancRestApiCommand::SuccessMessage& message)
1486 {
1487 if (state_ != State_Loading)
1488 {
1489 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
1490 }
1491
1492 const boost::posix_time::ptime start = boost::posix_time::microsec_clock::local_time();
1493
1494 {
1495 OrthancPlugins::FullOrthancDataset dicom(message.GetAnswer());
1496 content_.reset(new DicomStructureSet(dicom));
1497 }
1498
1499 const boost::posix_time::ptime end = boost::posix_time::microsec_clock::local_time();
1500
1501 printf("LOADED: %d\n", (end - start).total_milliseconds());
1502 state_ = State_Ready;
1503 }
1504
1505
1506 public:
1507 DicomStructureSetLoader(IOracle& oracle,
1508 IObservable& oracleObservable) :
1509 IObserver(oracleObservable.GetBroker()),
1510 oracle_(oracle),
1511 state_(State_Setup)
1512 {
1513 oracleObservable.RegisterObserverCallback(
1514 new Callable<DicomStructureSetLoader, OrthancRestApiCommand::SuccessMessage>
1515 (*this, &DicomStructureSetLoader::Handle));
1516 }
1517
1518
1519 void LoadInstance(const std::string& instanceId)
1520 {
1521 if (state_ != State_Setup)
1522 {
1523 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
1524 }
1525 else
1526 {
1527 state_ = State_Loading;
1528 instanceId_ = instanceId;
1529
1530 {
1531 std::auto_ptr<OrthancRestApiCommand> command(new OrthancRestApiCommand);
1532 command->SetHttpHeader("Accept-Encoding", "gzip");
1533 command->SetUri("/instances/" + instanceId + "/tags?ignore-length=3006-0050");
1534 oracle_.Schedule(*this, command.release());
1535 }
1536 }
1537 }
1538
1539 virtual IExtractedSlice* ExtractSlice(const CoordinateSystem3D& cuttingPlane)
1540 {
1541 return NULL;
1542 }
1543 };
1544
1545
1546
1466 class VolumeSceneLayerSource : public boost::noncopyable 1547 class VolumeSceneLayerSource : public boost::noncopyable
1467 { 1548 {
1468 private: 1549 private:
1469 Scene2D& scene_; 1550 Scene2D& scene_;
1470 int layerDepth_; 1551 int layerDepth_;
1853 1934
1854 1935
1855 boost::shared_ptr<Toto> toto; 1936 boost::shared_ptr<Toto> toto;
1856 boost::shared_ptr<OrthancStone::OrthancSeriesVolumeProgressiveLoader> ctLoader; 1937 boost::shared_ptr<OrthancStone::OrthancSeriesVolumeProgressiveLoader> ctLoader;
1857 boost::shared_ptr<OrthancStone::OrthancMultiframeVolumeLoader> doseLoader; 1938 boost::shared_ptr<OrthancStone::OrthancMultiframeVolumeLoader> doseLoader;
1939 boost::shared_ptr<OrthancStone::DicomStructureSetLoader> rtstructLoader;
1858 1940
1859 { 1941 {
1860 OrthancStone::NativeApplicationContext::WriterLock lock(context); 1942 OrthancStone::NativeApplicationContext::WriterLock lock(context);
1861 toto.reset(new Toto(oracle, lock.GetOracleObservable())); 1943 toto.reset(new Toto(oracle, lock.GetOracleObservable()));
1862 ctLoader.reset(new OrthancStone::OrthancSeriesVolumeProgressiveLoader(ct, oracle, lock.GetOracleObservable())); 1944 ctLoader.reset(new OrthancStone::OrthancSeriesVolumeProgressiveLoader(ct, oracle, lock.GetOracleObservable()));
1863 doseLoader.reset(new OrthancStone::OrthancMultiframeVolumeLoader(dose, oracle, lock.GetOracleObservable())); 1945 doseLoader.reset(new OrthancStone::OrthancMultiframeVolumeLoader(dose, oracle, lock.GetOracleObservable()));
1946 rtstructLoader.reset(new OrthancStone::DicomStructureSetLoader(oracle, lock.GetOracleObservable()));
1864 } 1947 }
1865 1948
1866 1949
1867 toto->SetReferenceLoader(*ctLoader); 1950 toto->SetReferenceLoader(*ctLoader);
1868 1951
1881 std::auto_ptr<OrthancStone::LookupTableStyleConfigurator> config(new OrthancStone::LookupTableStyleConfigurator); 1964 std::auto_ptr<OrthancStone::LookupTableStyleConfigurator> config(new OrthancStone::LookupTableStyleConfigurator);
1882 config->SetLookupTable(Orthanc::EmbeddedResources::COLORMAP_HOT); 1965 config->SetLookupTable(Orthanc::EmbeddedResources::COLORMAP_HOT);
1883 toto->SetVolume2(1, doseLoader, config.release()); 1966 toto->SetVolume2(1, doseLoader, config.release());
1884 } 1967 }
1885 1968
1886 oracle.Schedule(*toto, new OrthancStone::SleepOracleCommand(100)); 1969 //oracle.Schedule(*toto, new OrthancStone::SleepOracleCommand(100));
1887 1970
1888 if (0) 1971 if (0)
1889 { 1972 {
1890 Json::Value v = Json::objectValue; 1973 Json::Value v = Json::objectValue;
1891 v["Level"] = "Series"; 1974 v["Level"] = "Series";
1958 command->SetPayload(new Orthanc::SingleValueObject<unsigned int>(42 * i)); 2041 command->SetPayload(new Orthanc::SingleValueObject<unsigned int>(42 * i));
1959 oracle.Schedule(*toto, command.release()); 2042 oracle.Schedule(*toto, command.release());
1960 } 2043 }
1961 } 2044 }
1962 2045
2046
1963 // 2017-11-17-Anonymized 2047 // 2017-11-17-Anonymized
1964 ctLoader->LoadSeries("cb3ea4d1-d08f3856-ad7b6314-74d88d77-60b05618"); // CT 2048 //ctLoader->LoadSeries("cb3ea4d1-d08f3856-ad7b6314-74d88d77-60b05618"); // CT
1965 doseLoader->LoadInstance("41029085-71718346-811efac4-420e2c15-d39f99b6"); // RT-DOSE 2049 //doseLoader->LoadInstance("41029085-71718346-811efac4-420e2c15-d39f99b6"); // RT-DOSE
2050 rtstructLoader->LoadInstance("83d9c0c3-913a7fee-610097d7-cbf0522d-fd75bee6"); // RT-STRUCT
1966 2051
1967 // 2015-01-28-Multiframe 2052 // 2015-01-28-Multiframe
1968 //doseLoader->LoadInstance("88f71e2a-5fad1c61-96ed14d6-5b3d3cf7-a5825279"); // Multiframe CT 2053 //doseLoader->LoadInstance("88f71e2a-5fad1c61-96ed14d6-5b3d3cf7-a5825279"); // Multiframe CT
1969 2054
1970 // Delphine 2055 // Delphine