protected virtual uint queueTasks(Profile profile, TaskManager task_man) { uint level = 0; foreach (MapLayerLevelOfDetail i in map_layer.getLevels()) { MapLayerLevelOfDetail level_def = i; string s = level.ToString(); FilterEnv cell_env = getSession().createFilterEnv(); cell_env.setExtent(map_layer.getAreaOfInterest()); //GeoExtent.infinite() ); cell_env.setTerrainNode(getTerrainNode()); cell_env.setTerrainSRS(getTerrainSRS()); foreach (Property prop in level_def.getEnvProperties()) { cell_env.setProperty(prop); } Task task = new CellCompiler(s, s, level_def.getFeatureLayer(), level_def.getFilterGraph(), level_def.getMinRange(), level_def.getMaxRange(), cell_env, null, null, null); task_man.queueTask(task); } return(level); }
public virtual bool continueCompiling(CompileSession cs_interface) { CompileSessionImpl cs = (CompileSessionImpl)cs_interface; cs.clearTaskQueue(); if (cs.getTaskManager().wait(1000L)) { Task completed_task = cs.getTaskManager().getNextCompletedTask(); if (completed_task != null) { CellCompiler cell_compiler = (CellCompiler)completed_task; if (cell_compiler.isInExceptionState()) { //TODO: replace this with Report facility //osgGIS.notify( osg.WARN ) << "ERROR: cell failed; unhandled exception state." // << std.endl; cs.getTaskQueue().Enqueue(cell_compiler); } else if (cell_compiler.getResult().isOK()) { cell_compiler.runSynchronousPostProcess(cs.getReport()); // give the layer compiler an opportunity to do something: processCompletedTask(cell_compiler); // record the completed task to the caller can see it cs.getTaskQueue().Enqueue(cell_compiler); uint total_tasks = cs.getTotalTasks(); uint tasks_completed = total_tasks - cs.getTaskManager().getNumTasks(); float p = 100.0f * (float)tasks_completed / (float)total_tasks; float elapsed = (float)cs.getElapsedTimeSeconds(); float avg_task_time = elapsed / (float)tasks_completed; float time_remaining = ((float)total_tasks - (float)tasks_completed) * avg_task_time; uint hrs, mins, secs; TimeUtils.getHMSDuration(time_remaining, hrs, mins, secs); //char buf[10]; //sprintf( buf, "%02d:%02d:%02d", hrs, mins, secs ); // osgGIS.notify(osg.NOTICE) << tasks_completed << "/" << total_tasks // << " tasks (" << (int)p << "%) complete, " // << buf << " remaining" << std.endl; } else { //TODO: replace this with Report facility //osgGIS.notify( osg.WARN ) << "ERROR: compilation of cell " // << cell_compiler.getName() << " failed : " // << cell_compiler.getResult().getMessage() // << std.endl; } } } return(cs.getTaskManager().hasMoreTasks()); }
protected virtual void processCompletedTask(CellCompiler task) { if (task.getResult().isOK() && task.getResultNode()) { if (!lod.valid()) { lod = new osg.LOD(); } uint key = uint.Parse(task.getName()); MapLayerLevelOfDetail def = getLodForKey(key, getMapLayer()); if (def != null) { lod.addChild(task.getResultNode(), def.getMinRange(), def.getMaxRange()); } } }
protected Task createQuadKeyTask(QuadKey key) { // construct a filter environment template to use for all tasks: FilterEnv cell_env = getSession().createFilterEnv(); cell_env.setTerrainNode(getTerrainNode()); cell_env.setTerrainSRS(getTerrainSRS()); string abs_path = createAbsPathFromTemplate("g" + key.toString()); Task task = null; MapLayerLevelOfDetail def = getDefinition(key.createParentKey(), map_layer); if (def != null) { cell_env.setInputSRS(def.getFeatureLayer().getSRS()); cell_env.setExtent(map_layer.getAreaOfInterest().getSRS().transform(key.getExtent())); cell_env.setProperty(new Property("compiler.cell_id", key.toString())); foreach (Property i in def.getEnvProperties()) { cell_env.setProperty(i); } task = new CellCompiler( key.toString(), abs_path, def.getFeatureLayer(), def.getFilterGraph(), def.getMinRange(), def.getMaxRange(), cell_env, def.getResourcePackager() ? def.getResourcePackager() : resource_packager.get(), getArchive(), def.getUserData()); // osgGIS.info() // << "Task: Key = " << key.toString() << ", LOD = " << key.getLOD() << ", Extent = " << key.getExtent().toString() // << " (w=" << key.getExtent().getWidth() << ", h=" << key.getExtent().getHeight() << ")" // << std.endl; } return(task); }
protected virtual void processCompletedTask(CellCompiler compiler) { }