Ejemplo n.º 1
0
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);
  }
Ejemplo n.º 2
0
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;
}