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