Mercurial > hg > orthanc-stone
comparison UnitTestsSources/TestStructureSet.cpp @ 1450:2a5f0f771fbd loader-injection-feature
VC2008 port + improved struct loader injection
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Tue, 02 Jun 2020 16:45:21 +0200 |
parents | f3f4cd58fde4 |
children | 2a11bbf7f6b0 |
comparison
equal
deleted
inserted
replaced
1449:11141df26e0d | 1450:2a5f0f771fbd |
---|---|
5671 | 5671 |
5672 // Create struct loader | 5672 // Create struct loader |
5673 optimizedStructLoader = OrthancStone::DicomStructureSetLoader::Create(*loadersContext); | 5673 optimizedStructLoader = OrthancStone::DicomStructureSetLoader::Create(*loadersContext); |
5674 | 5674 |
5675 // create the slice processor / instance lookup | 5675 // create the slice processor / instance lookup |
5676 boost::shared_ptr<SliceProcessor> sliceProcessor = boost::make_shared<SliceProcessor>(*optimizedStructLoader); | 5676 boost::shared_ptr<SliceProcessor> sliceProcessor(new SliceProcessor(*optimizedStructLoader)); |
5677 | 5677 |
5678 // Inject it into CT loader | 5678 // Inject it into CT loader |
5679 ctLoader->SetDicomSlicePostProcessor(sliceProcessor); | 5679 ctLoader->SetDicomSlicePostProcessor(sliceProcessor); |
5680 | 5680 |
5681 // Inject it into RTSTRUCT loader | 5681 // Inject it into RTSTRUCT loader |
5705 OrthancStone::VolumeProjection projection, | 5705 OrthancStone::VolumeProjection projection, |
5706 boost::shared_ptr<OrthancStone::OrthancSeriesVolumeProgressiveLoader> ctLoader)*/ | 5706 boost::shared_ptr<OrthancStone::OrthancSeriesVolumeProgressiveLoader> ctLoader)*/ |
5707 | 5707 |
5708 | 5708 |
5709 std::vector<OrthancStone::CoordinateSystem3D> allPlanes; | 5709 std::vector<OrthancStone::CoordinateSystem3D> allPlanes; |
5710 for (const auto& plane : axialPlanes) | 5710 |
5711 allPlanes.push_back(plane); | 5711 // let's gather all the possible cutting planes in a single struct |
5712 for (const auto& plane : coronalPlanes) | 5712 for (size_t i = 0; i < axialPlanes.size(); ++i) |
5713 allPlanes.push_back(plane); | 5713 allPlanes.push_back(axialPlanes[i]); |
5714 for (const auto& plane : sagittalPlanes) | 5714 |
5715 allPlanes.push_back(plane); | 5715 for (size_t i = 0; i < coronalPlanes.size(); ++i) |
5716 allPlanes.push_back(coronalPlanes[i]); | |
5717 | |
5718 for (size_t i = 0; i < sagittalPlanes.size(); ++i) | |
5719 allPlanes.push_back(sagittalPlanes[i]); | |
5716 | 5720 |
5717 for (size_t i = 0; i < normalContent->GetStructuresCount(); ++i) | 5721 for (size_t i = 0; i < normalContent->GetStructuresCount(); ++i) |
5718 { | 5722 { |
5723 std::cout << "Testing structure (" << i << "/" << normalContent->GetStructuresCount() << ")\n"; | |
5719 Vector structureCenter1 = normalContent->GetStructureCenter(i); | 5724 Vector structureCenter1 = normalContent->GetStructureCenter(i); |
5720 const std::string& structureName1 = normalContent->GetStructureName(i); | 5725 const std::string& structureName1 = normalContent->GetStructureName(i); |
5721 const std::string& structureInterpretation1 = normalContent->GetStructureInterpretation(i); | 5726 const std::string& structureInterpretation1 = normalContent->GetStructureInterpretation(i); |
5722 Color structureColor1 = normalContent->GetStructureColor(i); | 5727 Color structureColor1 = normalContent->GetStructureColor(i); |
5723 | 5728 |
5734 EXPECT_EQ(structureInterpretation1, structureInterpretation2); | 5739 EXPECT_EQ(structureInterpretation1, structureInterpretation2); |
5735 EXPECT_EQ(structureColor1.GetRed(), structureColor2.GetRed()); | 5740 EXPECT_EQ(structureColor1.GetRed(), structureColor2.GetRed()); |
5736 EXPECT_EQ(structureColor1.GetGreen(), structureColor2.GetGreen()); | 5741 EXPECT_EQ(structureColor1.GetGreen(), structureColor2.GetGreen()); |
5737 EXPECT_EQ(structureColor1.GetBlue(), structureColor2.GetBlue()); | 5742 EXPECT_EQ(structureColor1.GetBlue(), structureColor2.GetBlue()); |
5738 | 5743 |
5739 for (const auto& plane : allPlanes) | 5744 // "random" walk through the planes. Processing them all takes too long (~ 1 min) |
5745 for (size_t j = 0; j < allPlanes.size(); j += 37) | |
5740 { | 5746 { |
5747 const OrthancStone::CoordinateSystem3D& plane = allPlanes[j]; | |
5748 | |
5741 std::vector< std::pair<Point2D, Point2D> > segments1; | 5749 std::vector< std::pair<Point2D, Point2D> > segments1; |
5742 std::vector< std::pair<Point2D, Point2D> > segments2; | 5750 std::vector< std::pair<Point2D, Point2D> > segments2; |
5743 | 5751 |
5744 bool ok1 = normalContent->ProjectStructure(segments1, i, plane); | 5752 bool ok1 = normalContent->ProjectStructure(segments1, i, plane); |
5745 bool ok2 = optimizedContent->ProjectStructure(segments2, i, plane); | 5753 bool ok2 = optimizedContent->ProjectStructure(segments2, i, plane); |
5746 | 5754 |
5747 // checks here | 5755 // checks here |
5748 EXPECT_EQ(ok1, ok2); | 5756 EXPECT_EQ(ok1, ok2); |
5749 EXPECT_EQ(segments1.size(), segments2.size()); | 5757 EXPECT_EQ(segments1.size(), segments2.size()); |
5758 | |
5759 for (size_t k = 0; k < segments1.size(); ++k) | |
5760 { | |
5761 EXPECT_NEAR(segments1[k].first.x, segments2[k].first.x, TOLERANCE); | |
5762 EXPECT_NEAR(segments1[k].first.y, segments2[k].first.y, TOLERANCE); | |
5763 EXPECT_NEAR(segments1[k].second.x, segments2[k].second.x, TOLERANCE); | |
5764 EXPECT_NEAR(segments1[k].second.y, segments2[k].second.y, TOLERANCE); | |
5765 } | |
5750 } | 5766 } |
5751 } | 5767 } |
5752 | 5768 |
5753 Exitialize(*loadersContext); | 5769 Exitialize(*loadersContext); |
5754 } | 5770 } |