Exemple #1
0
FGColumnVector3 Element::FindElementTripletConvertTo( const string& target_units)
{
  FGColumnVector3 triplet;
  Element* item;
  double value=0.0;
  string supplied_units = GetAttributeValue("unit");

  if (!supplied_units.empty()) {
    if (convert.find(supplied_units) == convert.end()) {
        std::stringstream error;
      error << ReadFrom() << "Supplied unit: \""
           << supplied_units << "\" does not exist (typo?)." << endl;
      throw std::runtime_error(error.str());
    }
    if (convert[supplied_units].find(target_units) == convert[supplied_units].end()) {
        std::stringstream error;
      error << ReadFrom() << "Supplied unit: \""
           << supplied_units << "\" cannot be converted to " << target_units
           << endl;
      throw std::runtime_error(error.str());
    }
  }

  item = FindElement("x");
  if (!item) item = FindElement("roll");
  if (item) {
    value = item->GetDataAsNumber();
    if (!supplied_units.empty()) value *= convert[supplied_units][target_units];
    triplet(1) = DisperseValue(item, value, supplied_units, target_units);
  } else {
    triplet(1) = 0.0;
  }
  

  item = FindElement("y");
  if (!item) item = FindElement("pitch");
  if (item) {
    value = item->GetDataAsNumber();
    if (!supplied_units.empty()) value *= convert[supplied_units][target_units];
    triplet(2) = DisperseValue(item, value, supplied_units, target_units);
  } else {
    triplet(2) = 0.0;
  }

  item = FindElement("z");
  if (!item) item = FindElement("yaw");
  if (item) {
    value = item->GetDataAsNumber();
    if (!supplied_units.empty()) value *= convert[supplied_units][target_units];
    triplet(3) = DisperseValue(item, value, supplied_units, target_units);
  } else {
    triplet(3) = 0.0;
  }

  return triplet;
}
Exemple #2
0
double Element::FindElementValueAsNumberConvertFromTo( const string& el,
                                                       const string& supplied_units,
                                                       const string& target_units)
{
  Element* element = FindElement(el);

  if (!element) {
    cerr << "Attempting to get non-existent element " << el << endl;
    exit(-1);
  }

  if (!supplied_units.empty()) {
    if (convert.find(supplied_units) == convert.end()) {
      cerr << element->ReadFrom() << "Supplied unit: \""
           << supplied_units << "\" does not exist (typo?)." << endl;
      exit(-1);
    }
    if (convert[supplied_units].find(target_units) == convert[supplied_units].end()) {
      cerr << element->ReadFrom() << "Supplied unit: \""
           << supplied_units << "\" cannot be converted to " << target_units
           << endl;
      exit(-1);
    }
  }

  double value = element->GetDataAsNumber();
  if (!supplied_units.empty()) {
    value *= convert[supplied_units][target_units];
  }

  value = DisperseValue(element, value, supplied_units, target_units);

  return value;
}
Exemple #3
0
double Element::FindElementValueAsNumberConvertTo(const string& el, const string& target_units)
{
  Element* element = FindElement(el);

  if (!element) {
      std::stringstream error;
    error << ReadFrom() << "Attempting to get non-existent element " << el
         << endl;
    throw std::runtime_error(error.str());
  }

  string supplied_units = element->GetAttributeValue("unit");

  if (!supplied_units.empty()) {
    if (convert.find(supplied_units) == convert.end()) {
        std::stringstream error;
      error << element->ReadFrom() << "Supplied unit: \""
           << supplied_units << "\" does not exist (typo?)." << endl;
      throw std::runtime_error(error.str());
    }
    if (convert[supplied_units].find(target_units) == convert[supplied_units].end()) {
        std::stringstream error;
      error << element->ReadFrom() << "Supplied unit: \""
           << supplied_units << "\" cannot be converted to " << target_units
           << endl;
      throw std::runtime_error(error.str());
    }
  }

  double value = element->GetDataAsNumber();

  // Sanity check for angular values
  if ((supplied_units == "RAD") && (fabs(value) > 2 * M_PI)) {
      cerr << element->ReadFrom() << "The value " << value
           << " RAD is outside the range [ -2*M_PI RAD ; +2*M_PI RAD ]" << endl;
  }
  if ((supplied_units == "DEG") && (fabs(value) > 360.0)) {
      cerr << element->ReadFrom() << "The value " << value
           << " DEG is outside the range [ -360 DEG ; +360 DEG ]" << endl;
  }
  
  
  if (!supplied_units.empty()) {
    value *= convert[supplied_units][target_units];
  }

  if ((target_units == "RAD") && (fabs(value) > 2 * M_PI)) {
      cerr << element->ReadFrom() << "The value " << value
           << " RAD is outside the range [ -2*M_PI RAD ; +2*M_PI RAD ]" << endl;
  }
  if ((target_units == "DEG") && (fabs(value) > 360.0)) {
      cerr << element->ReadFrom() << "The value " << value
           << " DEG is outside the range [ -360 DEG ; +360 DEG ]" << endl;
  }

  value = DisperseValue(element, value, supplied_units, target_units);

  return value;
}
Exemple #4
0
double Element::FindElementValueAsNumber(const string& el)
{
  Element* element = FindElement(el);
  if (element) {
    double value = element->GetDataAsNumber();
    value = DisperseValue(element, value);
    return value;
  } else {
    cerr << ReadFrom() << "Attempting to get non-existent element " << el
         << endl;
    exit(-1);
  }
}
Exemple #5
0
double Element::FindElementValueAsNumber(const string& el)
{
  Element* element = FindElement(el);
  if (element) {
    double value = element->GetDataAsNumber();
    value = DisperseValue(element, value);
    return value;
  } else {
      std::stringstream error;
    error << ReadFrom() << "Attempting to get non-existent element " << el
         << endl;
    throw std::runtime_error(error.str());
  }
}