// ---------------------------------------------------------------------- void ConstantElevationTask:: run( shawn::SimulationController& sc ) throw( std::runtime_error ) { double val = sc.environment().required_double_param("height"); std::string n = sc.environment().optional_string_param("name",""); elevation_keeper_w(sc).add( new ConstantElevation(val,n) ); }
// ---------------------------------------------------------------------- void XYZFileElevationTask:: run( shawn::SimulationController& sc ) throw( std::runtime_error ) { std::string fn = sc.environment().required_string_param("file"); std::string outn = sc.environment().required_string_param("name"); std::string xyplacen = sc.environment().optional_string_param("xy_placement",KEY_SCALE); std::string zplacen = sc.environment().optional_string_param("z_placement",KEY_SCALE); bool xyplace_box; bool zplace_box; if( xyplacen == KEY_BOX ) xyplace_box = true; else if( xyplacen==KEY_SCALE ) xyplace_box = false; else throw runtime_error(string("$xy_placement must be ")+KEY_SCALE+string(" or ")+KEY_BOX); if( zplacen == KEY_BOX ) zplace_box = true; else if( zplacen==KEY_SCALE ) zplace_box = false; else throw runtime_error(string("$z_placement must be ")+KEY_SCALE+string(" or ")+KEY_BOX); XYZFile* data = new XYZFile; Vec base_point; Vec scale_vec; XYZFileElevation* elev; try { data->read(fn); if( (data->x_dimension()<2) || (data->y_dimension()<2) ) { ostringstream oss; oss << "XYZ data must have at least 2x2 grid points, but " << fn << " just contains " << data->x_dimension() << "x" << data->y_dimension(); throw runtime_error(oss.str()); } if( xyplace_box ) xy_place_box(sc,*data,base_point,scale_vec); else xy_place_scale(sc,*data,base_point,scale_vec); if( zplace_box ) z_place_box(sc,*data,base_point,scale_vec); else z_place_scale(sc,*data,base_point,scale_vec); elev = new XYZFileElevation(data, base_point, scale_vec.x(),scale_vec.y(),scale_vec.z(), outn); } catch( runtime_error& ) { delete data; throw; } elevation_keeper_w(sc).add( elev ); }