/** * Add a new resource instance to the library. * * @param resource * Resource to add to the library */ public void addResource(Resource resource) { if (resource != null) { lock (sincronizeFlag) { #if TODO_PH if (resource is SkinResource) { SkinResource skin = (SkinResource)resource; skins.Add(skin); //osgGIS::Notify(osg::INFO)<<"ResourceLibrary: added skin" <<skin->getAbsoluteURI()<<std::endl; } else if (resource is ModelResource) { ModelResource model = (ModelResource)resource; models.Add(model); //osgGIS::Notify(osg::INFO)<<"ResourceLibrary: added model" <<skin->getAbsoulteURI()<<std::endl; //osgDB::Registry::instance()->getDataFilePathList().push_back(osgDB::getFilePath (model->getAbsoluteURI) } else if (resource is RasterResource) { RasterResource raster = (RasterResource)resource; rasters.Add(raster); //osgGIS::notify(osg::INFO)<<"ResourceLibrary: added raster"<<raster->getAbsoluteURI()<<std::endl; } else if (resource is FeatureLayerResource) { FeatureLayerResource flr = (FeatureLayerResource)resource; featureLayers.Add(flr); //osgGIS::notify(osg::INFO)<<"ResourceLibrary: added feature layer "<<flr->getAbsoluteURI()<<std::endl; } else #endif if (resource is SRSResource) { SRSResource srsr = (SRSResource)resource; srsList.Add(srsr); //osgGIS::notify(osg::INFO)<<"ResourceLibrary: added SRS" << srsr->getName()<<std::endl; } #if TODO_PH else if (resource is PathResource) { PathResource pr = (PathResource)resource; paths.Add(pr); //osgGIS::notify(osg::INFO)<<"ResourceLibrary: added path" << pr->getAbsoluteURI()<<std::endl; } #endif resource.SincronizedFlag = sincronizeFlag; } } }
protected void applyOverlayTexturing(osg.Geometry geom, Feature input, FilterEnv env) { GeoExtent tex_extent; if (getRasterOverlayScript() != null) { // if there's a raster script for this filter, we're applying textures per-feature: tex_extent = new GeoExtent( input.getExtent().getSouthwest().getAbsolute(), input.getExtent().getNortheast().getAbsolute()); } else { // otherwise prepare the geometry for an overlay texture covering the entire working extent: tex_extent = env.getExtent(); } float width = (float)tex_extent.getWidth(); float height = (float)tex_extent.getHeight(); // now visit the verts and calculate texture coordinates for each one. osg.Vec3Array verts = (osg.Vec3Array)(geom.getVertexArray()); if (verts != null) { // if we are dealing with geocentric data, we will need to xform back to a real // projection in order to determine texture coords: GeoExtent tex_extent_geo; if (env.getInputSRS().isGeocentric()) { tex_extent_geo = new GeoExtent( tex_extent.getSRS().getGeographicSRS().transform(tex_extent.getSouthwest()), tex_extent.getSRS().getGeographicSRS().transform(tex_extent.getNortheast())); } osg.Vec2Array texcoords = new osg.Vec2Array(verts.size()); for (int j = 0; j < verts.size(); j++) { // xform back to raw SRS w.o. ref frame: GeoPoint vert = new GeoPoint(verts[j], env.getInputSRS()); GeoPoint vert_map = vert.getAbsolute(); float tu, tv; if (env.getInputSRS().isGeocentric()) { tex_extent_geo.getSRS().transformInPlace(vert_map); tu = (vert_map.X - tex_extent_geo.getXMin()) / width; tv = (vert_map.Y - tex_extent_geo.getYMin()) / height; } else { tu = (vert_map.X - tex_extent.getXMin()) / width; tv = (vert_map.Y - tex_extent.getYMin()) / height; } (*texcoords)[j].set(tu, tv); } geom.setTexCoordArray(0, texcoords); } // if we are applying the raster per-feature, do so now. // TODO: deprecate? will we ever use this versus the BuildNodesFilter overlay? maybe if (getRasterOverlayScript() != null) { ScriptResult r = env.getScriptEngine().run(getRasterOverlayScript(), input, env); if (r.isValid()) { RasterResource raster = env.getSession().getResources().getRaster(r.asString()); if (raster != null) { Image image = null; std.stringstream builder; builder << "rtex_" << input.getOID() << ".jpg"; //TODO: dds with DXT1 compression osg.StateSet raster_ss = new osg.StateSet(); if (raster.applyToStateSet(raster_ss.get(), tex_extent, getRasterOverlayMaxSize(), out image)) { image.setFileName(builder.str()); geom.setStateSet(raster_ss.get()); // add this as a skin resource so the compiler can properly localize and deploy it. env.getResourceCache().addSkin(raster_ss.get()); } } } else { env.getReport().error(r.asString()); } } }