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 }