bool testSegmentation(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range Range r = curve.getIncidentPointsRange(); //range typedef typename Range::ConstIterator ConstIterator; //iterator typedef StabbingCircleComputer<ConstIterator> SegmentComputer; //segment computer unsigned int nbok = 0; unsigned int nb = 0; trace.beginBlock ( "Greedy segmentation" ); { typedef GreedySegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); Board2D board; board << r; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << SetMode(SegmentComputer().className(), "Sector") << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveSVG("StabbingCircleComputerGreedySegmentationTest.svg", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results given by another program bool flag = ((r.size()==85)&&(n==6)&&(suml==90)&&((r.size()+n-1)==suml)); nbok += flag ? 1 : 0; nb++; } trace.endBlock(); trace.beginBlock ( "Saturated segmentation" ); { typedef SaturatedSegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); theSegmentation.setMode("Last"); Board2D board; board << curve; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << SetMode(SegmentComputer().className(), "Annulus") << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveSVG("StabbingCircleComputerSaturatedSegmentationTest.svg", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results given by another program nbok += ((r.size()==85)&&(n==20)&&(suml==326)) ? 1 : 0; nb++; } trace.endBlock(); trace.info() << "(" << nbok << "/" << nb << ") " << endl; return (nbok == nb); }
bool testSegmentation(const TCurve& curve) { typedef typename TCurve::IncidentPointsRange Range; //range Range r = curve.getIncidentPointsRange(); //range typedef typename Range::ConstIterator ConstIterator; //iterator typedef GeometricalDSS<ConstIterator> SegmentComputer; //segment computer unsigned int nbok = 0; unsigned int nb = 0; trace.beginBlock ( "Greedy segmentation" ); { typedef GreedySegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); Board2D board; board << r; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveEPS("GeometricalDSSGreedySegmentationTest.eps", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results gave by another program nbok += ((r.size()==85)&&(n==10)&&(suml==94)) ? 1 : 0; nb++; } trace.endBlock(); trace.beginBlock ( "Saturated segmentation" ); { typedef SaturatedSegmentation<SegmentComputer> Segmentation; Segmentation theSegmentation( r.begin(), r.end(), SegmentComputer() ); Board2D board; board << r; typename Segmentation::SegmentComputerIterator it = theSegmentation.begin(); typename Segmentation::SegmentComputerIterator itEnd = theSegmentation.end(); unsigned int n = 0; unsigned int suml = 0; for ( ; it != itEnd; ++it, ++n) { board << (*it); for (ConstIterator i = it->begin(); i != it->end(); ++i) suml += 1; } board.saveEPS("GeometricalDSSSaturatedSegmentationTest.eps", Board2D::BoundingBox, 5000 ); trace.info() << r.size() << ";" << n << ";" << suml << endl; //comparison with the results gave by another program nbok += ((r.size()==85)&&(n==25)&&(suml==255)) ? 1 : 0; nb++; } trace.endBlock(); trace.info() << "(" << nbok << "/" << nb << ") " << endl; return (nbok == nb); }