int main( int argc, char** argv ) { std::string inputFilename = examplesPath + "samples/Al.100.vol"; //------------ typedef SpaceND<3> Space4Type; typedef HyperRectDomain<Space4Type> TDomain; typedef TDomain::Point Point; QApplication application(argc,argv); Viewer3D viewer; viewer.setWindowTitle("simpleViewer"); viewer.show(); //Default image selector = STLVector typedef ImageSelector<TDomain, unsigned char>::Type Image; Image image = VolReader<Image>::importVol( inputFilename ); TDomain domain = image.domain(); Image imageSeeds ( domain); for ( Image::Iterator it = imageSeeds.begin(), itend = imageSeeds.end();it != itend; ++it) (*it)=1; Z3i::Point p0(10,10,10); //imageSeeds.setValue(p0, 0 ); randomSeeds(imageSeeds, 70, 0); //Distance transformation computation typedef ImageSelector<TDomain, long int>::Type ImageLong; typedef SimpleThresholdForegroundPredicate<Image> Predicate; Predicate aPredicate(imageSeeds,0); typedef DistanceTransformation<Space4Type,Predicate, 2> DTL2; typedef DistanceTransformation<Space4Type,Predicate, 0> DTLInf; typedef DistanceTransformation<Space4Type,Predicate, 1> DTL1; DTL2 dtL2(domain, aPredicate); DTLInf dtLinf(domain, aPredicate); DTL1 dtL1(domain, aPredicate); DTL1::OutputImage resultL1 = dtL1.compute ( ); unsigned int min = 0; unsigned int max = 0; for(DTL1::OutputImage::ConstIterator it = resultL1.begin(), itend=resultL1.end(); it!=itend; ++it) { if( (*it) < min ) min=(*it); if( (*it) > max ) max=(*it); } GradientColorMap<long> gradient( 0,30); gradient.addColor(Color::Red); gradient.addColor(Color::Yellow); gradient.addColor(Color::Green); gradient.addColor(Color::Cyan); gradient.addColor(Color::Blue); gradient.addColor(Color::Magenta); gradient.addColor(Color::Red); viewer << SetMode3D( (*(domain.begin())).className(), "Paving" ); for(TDomain::ConstIterator it = domain.begin(), itend=domain.end(); it!=itend; ++it){ unsigned int valDist= resultL1( (*it) ); Color c= gradient(valDist); if(resultL1(*it)<=30 ){ viewer << CustomColors3D(Color((float)(c.red()), (float)(c.green()), (float)(c.blue(),205)), Color((float)(c.red()), (float)(c.green()), (float)(c.blue()),205)); viewer << *it ; } } //viewer << ClippingPlane(1,0,0,-60); viewer<< Viewer3D::updateDisplay; return application.exec(); }
bool testEmptyDomain() { typedef SpaceND<3> TSpace; typedef TSpace::Point TPoint; typedef HyperRectDomain<TSpace> TDomain; unsigned int nb = 0; unsigned int nbok = 0; trace.beginBlock( "Test empty domain." ); const TDomain nonempty_domain( TPoint::diagonal(0), TPoint::diagonal(0) ); ++nb; nbok += nonempty_domain.isEmpty() ? 0 : 1; trace.info() << "(" << nbok << "/" << nb << ") Creating non-empty domain & checking isEmpty." << std::endl; const TDomain default_domain; ++nb; nbok += default_domain.isEmpty() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Creating default empty domain & checking isEmpty." << std::endl; const TDomain domain( TPoint::diagonal(1), TPoint::diagonal(0) ); ++nb; nbok += domain.isEmpty() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Creating default custom domain & checking isEmpty." << std::endl; ++nb; nbok += domain.size() == 0 ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Empty domain has size = " << domain.size() << std::endl; ++nb; nbok += domain.begin() == domain.end() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end()" << std::endl; ++nb; nbok += domain.rbegin() == domain.rend() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend()" << std::endl; TDomain::ConstSubRange range = domain.subRange( 0, 1, 2, domain.lowerBound() ); ++nb; nbok += range.begin() == range.end() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {0,1,2}" << std::endl; ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {0,1,2}" << std::endl; range = domain.subRange( 2, 1, 0, domain.lowerBound() ); ++nb; nbok += range.begin() == range.end() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {2,1,0}" << std::endl; ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {2,1,0}" << std::endl; range = domain.subRange( 0, 2, domain.lowerBound() ); ++nb; nbok += range.begin() == range.end() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {0,2}" << std::endl; ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {0,2}" << std::endl; range = domain.subRange( 2, 0, domain.lowerBound() ); ++nb; nbok += range.begin() == range.end() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {2,0}" << std::endl; ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {2,0}" << std::endl; range = domain.subRange( 1, domain.lowerBound() ); ++nb; nbok += range.begin() == range.end() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {1}" << std::endl; ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0; trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-rang {1}" << std::endl; trace.endBlock(); return nb == nbok; }