Mercurial > hg > orthanc-stone
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 |