virtual ReadResult readImage(const std::string& file, const osgDB::ReaderWriter::Options* options) const { std::string ext = osgDB::getLowerCaseFileExtension(file); if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED; std::string fileName = osgDB::findDataFile( file, options ); if (fileName.empty()) return ReadResult::FILE_NOT_FOUND; osgDB::ifstream istream(fileName.c_str(), std::ios::in | std::ios::binary); if(!istream) return ReadResult::ERROR_IN_READING_FILE; ReadResult rr = readJPGStream(istream); if(rr.validImage()) rr.getImage()->setFileName(file); return rr; }
virtual ReadResult readObject (const std::string &file, const osgDB::ReaderWriter::Options* options) const { ReadResult rr = readImage(file, options); if (!rr.validImage()) return rr; bool use_core_video = true; if (options && !options->getPluginStringData("disableCoreVideo").empty()) use_core_video = false; osg::ref_ptr<OSXAVFoundationVideo> video = dynamic_cast<OSXAVFoundationVideo*>(rr.getImage()); if (!video || !use_core_video) return rr; osg::ref_ptr<OSXAVFoundationCoreVideoTexture> texture = new OSXAVFoundationCoreVideoTexture(video); return texture.release(); }
virtual ReadResult readNode(const std::string& file, const osgDB::ReaderWriter::Options* options =NULL) const { ReadResult result = readImage(file, options); if (!result.validImage()) return result; osg::ref_ptr<osgVolume::VolumeTile> tile = new osgVolume::VolumeTile; tile->setVolumeTechnique(new osgVolume::RayTracedTechnique()); osg::ref_ptr<osgVolume::ImageLayer> layer= new osgVolume::ImageLayer(result.getImage()); layer->rescaleToZeroToOneRange(); osgVolume::SwitchProperty* sp = new osgVolume::SwitchProperty; sp->setActiveProperty(0); float alphaFunc = 0.1f; osgVolume::AlphaFuncProperty* ap = new osgVolume::AlphaFuncProperty(alphaFunc); osgVolume::SampleDensityProperty* sd = new osgVolume::SampleDensityProperty(0.005); osgVolume::TransparencyProperty* tp = new osgVolume::TransparencyProperty(1.0); { // Standard osgVolume::CompositeProperty* cp = new osgVolume::CompositeProperty; cp->addProperty(ap); cp->addProperty(sd); cp->addProperty(tp); sp->addProperty(cp); } { // Light osgVolume::CompositeProperty* cp = new osgVolume::CompositeProperty; cp->addProperty(ap); cp->addProperty(sd); cp->addProperty(tp); cp->addProperty(new osgVolume::LightingProperty); sp->addProperty(cp); } { // Isosurface osgVolume::CompositeProperty* cp = new osgVolume::CompositeProperty; cp->addProperty(sd); cp->addProperty(tp); cp->addProperty(new osgVolume::IsoSurfaceProperty(alphaFunc)); sp->addProperty(cp); } { // MaximumIntensityProjection osgVolume::CompositeProperty* cp = new osgVolume::CompositeProperty; cp->addProperty(ap); cp->addProperty(sd); cp->addProperty(tp); cp->addProperty(new osgVolume::MaximumIntensityProjectionProperty); sp->addProperty(cp); } layer->addProperty(sp); tile->setLayer(layer.get()); // get matrix providing size of texels (in mm) osg::RefMatrix* matrix = dynamic_cast<osg::RefMatrix*>(result.getImage()->getUserData()); if (matrix) { osgVolume::Locator* locator = new osgVolume::Locator(*matrix); tile->setLocator(locator); layer->setLocator(locator); // result.getImage()->setUserData(0); osg::notify(osg::NOTICE)<<"Locator "<<*matrix<<std::endl; } else { osg::notify(osg::NOTICE)<<"No Locator found on osg::Image"<<std::endl; } return tile.release(); }