void RCViewableTransform::moveToFit(const Eks::BoundingBox &bnds) { Eks::Vector3D pos = bnds.centre(); Eks::AxisAlignedBoundingBox bbox(Eks::Frame::XYZ(), bnds); Eks::Vector3D across = acrossDirection().normalized(); Eks::Vector3D up = upDirection().normalized(); Eks::Vector3D look = lookDirection().normalized(); float minX, maxX; bbox.maximumExtents(across, minX, maxX); float minY, maxY; bbox.maximumExtents(up, minY, maxY); float minZ, maxZ; bbox.maximumExtents(look, minZ, maxZ); float centreX = pos.dot(across); float centreY = pos.dot(up); float centreZ = pos.dot(look); float axisX = std::max(centreX - minX, maxX - centreX) / aspectRatio(); float axisY = std::max(centreY - minY, maxY - centreY); float minDist = centreZ - minZ; moveToFit(pos, lookDirection(), std::max(axisX, axisY), minDist); }
bool ossimCosmoSkymedModel::InitSensorParams(const ossimKeywordlist &kwl, const char *prefix) { const char* central_freq_str = kwl.find(prefix,"central_freq"); double central_freq = atof(central_freq_str); const char* fr_str = kwl.find(prefix,"fr"); double fr = atof(fr_str); const char* fa_str = kwl.find(prefix,"fa"); double fa = atof(fa_str); //number of different looks const char* n_azilok_str = kwl.find(prefix,"n_azilok"); double n_azilok = atof(n_azilok_str); const char* n_rnglok_str = kwl.find(prefix,"n_rnglok"); double n_rnglok = atof(n_rnglok_str); //ellipsoid parameters const char* ellip_maj_str = kwl.find(prefix,"ellip_maj"); double ellip_maj = atof(ellip_maj_str) * 1000.0; // km -> m const char* ellip_min_str = kwl.find(prefix,"ellip_min"); double ellip_min = atof(ellip_min_str) * 1000.0; // km -> m if(_sensor != NULL) { delete _sensor; } _sensor = new SensorParams(); /** * @todo : � voir sur de vrais produits (exemples de DESCENDING et ASCENDING) */ const char* orbitDirection_str = kwl.find(prefix,"orbitDirection"); std::string orbitDirection(orbitDirection_str) ; int orbitDirectionSign ; if (orbitDirection=="DESCENDING") orbitDirectionSign = 1 ; else orbitDirectionSign = - 1 ; const char* lookDirection_str = kwl.find(prefix,"lookDirection"); std::string lookDirection(lookDirection_str) ; if ((lookDirection == "Right")||(lookDirection == "RIGHT")) _sensor->set_sightDirection(SensorParams::Right) ; else _sensor->set_sightDirection(SensorParams::Left) ; const char* colsOrder_str = kwl.find(prefix,"colsOrder"); std::string colsOrder(colsOrder_str) ; const char* linsOrder_str = kwl.find(prefix,"linsOrder"); std::string linsOrder(linsOrder_str) ; if (colsOrder=="NEAR-FAR") _sensor->set_col_direction(orbitDirectionSign); else _sensor->set_col_direction(-orbitDirectionSign); if (linsOrder=="NEAR-FAR") _sensor->set_lin_direction(orbitDirectionSign); else _sensor->set_lin_direction(-orbitDirectionSign); _sensor->set_sf(fr); const double CLUM = 2.99792458e+8 ; double wave_length = CLUM / central_freq ; _sensor->set_rwl(wave_length); _sensor->set_nAzimuthLook(n_azilok); _sensor->set_nRangeLook(n_rnglok); // fa is the processing PRF _sensor->set_prf(fa * n_azilok); _sensor->set_semiMajorAxis(ellip_maj) ; _sensor->set_semiMinorAxis(ellip_min) ; return true; }