⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fgxmlelement.cpp

📁 6 DOF Missle Simulation
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double Element::GetDataAsNumber(void){  if (data_lines.size() == 1) {    return atof(data_lines[0].c_str());  } else if (data_lines.size() == 0) {    return HUGE_VAL;  } else {    cerr << "Attempting to get single data value from multiple lines in element " << name << endl;    return HUGE_VAL;  }}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%unsigned int Element::GetNumElements(string element_name){  unsigned int number_of_elements=0;  Element* el=FindElement(element_name);  while (el) {    number_of_elements++;    el=FindNextElement(element_name);  }  return number_of_elements;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Element* Element::FindElement(string el){  if (el.empty() && children.size() >= 1) {    element_index = 1;    return children[0];  }  for (unsigned int i=0; i<children.size(); i++) {    if (el == children[i]->GetName()) {      element_index = i+1;      return children[i];    }  }  element_index = 0;  return 0L;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Element* Element::FindNextElement(string el){  if (el.empty()) {    if (element_index < children.size()) {      return children[element_index++];    } else {      element_index = 0;      return 0L;    }  }  for (unsigned int i=element_index; i<children.size(); i++) {    if (el == children[i]->GetName()) {      element_index = i+1;      return children[i];    }  }  element_index = 0;  return 0L;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double Element::FindElementValueAsNumber(string el){  Element* element = FindElement(el);  if (element) {    return element->GetDataAsNumber();  } else {    cerr << "Attempting to get single data value from multiple lines" << endl;    return 0;  }}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%string Element::FindElementValue(string el){  Element* element = FindElement(el);  if (element) {    return element->GetDataLine();  } else {    return "";  }}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double Element::FindElementValueAsNumberConvertTo(string el, string target_units){  Element* element = FindElement(el);  if (!element) {    cerr << "Attempting to get non-existent element " << el << endl;    exit(0);  }  string supplied_units = element->GetAttributeValue("unit");  if (!supplied_units.empty()) {    if (convert.find(supplied_units) == convert.end()) {      cerr << endl << "Supplied unit: \"" << supplied_units << "\" does not exist (typo?). Add new unit"           << " conversion in FGXMLElement.cpp." << endl;      exit(-1);    }    if (convert[supplied_units].find(target_units) == convert[supplied_units].end()) {      cerr << endl << "Supplied unit: \"" << supplied_units << "\" cannot be converted to "                   << target_units << ". Add new unit conversion in FGXMLElement.cpp or fix typo" << endl;      exit(-1);    }  }  double value = element->GetDataAsNumber();  if (!supplied_units.empty()) {    value *= convert[supplied_units][target_units];  }  return value;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%double Element::FindElementValueAsNumberConvertFromTo( string el,                                                       string supplied_units,                                                       string target_units){  Element* element = FindElement(el);  if (!element) {    cerr << "Attempting to get non-existent element " << el << endl;    exit(0);  }  if (!supplied_units.empty()) {    if (convert.find(supplied_units) == convert.end()) {      cerr << endl << "Supplied unit: \"" << supplied_units << "\" does not exist (typo?). Add new unit"           << " conversion in FGXMLElement.cpp." << endl;      exit(-1);    }    if (convert[supplied_units].find(target_units) == convert[supplied_units].end()) {      cerr << endl << "Supplied unit: \"" << supplied_units << "\" cannot be converted to "                   << target_units << ". Add new unit conversion in FGXMLElement.cpp or fix typo" << endl;      exit(-1);    }  }  double value = element->GetDataAsNumber();  if (!supplied_units.empty()) {    value *= convert[supplied_units][target_units];  }  return value;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FGColumnVector3 Element::FindElementTripletConvertTo( 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()) {      cerr << endl << "Supplied unit: \"" << supplied_units << "\" does not exist (typo?). Add new unit"           << " conversion in FGXMLElement.cpp." << endl;      exit(-1);    }    if (convert[supplied_units].find(target_units) == convert[supplied_units].end()) {      cerr << endl << "Supplied unit: \"" << supplied_units << "\" cannot be converted to "                   << target_units << ". Add new unit conversion in FGXMLElement.cpp or fix typo" << endl;      exit(-1);    }  }  item = FindElement("x");  if (!item) item = FindElement("roll");  if (item) {    value = item->GetDataAsNumber();    if (!supplied_units.empty()) value *= convert[supplied_units][target_units];  } else {    value = 0.0;    cerr << "Could not find an X triplet item for this column vector." << endl;  }  triplet(1) = value;  item = FindElement("y");  if (!item) item = FindElement("pitch");  if (item) {    value = item->GetDataAsNumber();    if (!supplied_units.empty()) value *= convert[supplied_units][target_units];  } else {    value = 0.0;    cerr << "Could not find a Y triplet item for this column vector." << endl;  }  triplet(2) = value;  item = FindElement("z");  if (!item) item = FindElement("yaw");  if (item) {    value = item->GetDataAsNumber();    if (!supplied_units.empty()) value *= convert[supplied_units][target_units];  } else {    value = 0.0;    cerr << "Could not find a Z triplet item for this column vector." << endl;  }  triplet(3) = value;  return triplet;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%void Element::Print(unsigned int level){  unsigned int i, spaces;  level+=2;  for (spaces=0; spaces<=level; spaces++) cout << " "; // format output  cout << "Element Name: " << name;  for (i=0; i<attributes.size(); i++) {    cout << "  " << attribute_key[i] << " = " << attributes[attribute_key[i]];  }  cout << endl;  for (i=0; i<data_lines.size(); i++) {    for (spaces=0; spaces<=level; spaces++) cout << " "; // format output    cout << data_lines[i] << endl;  }  for (i=0; i<children.size(); i++) {    children[i]->Print(level);  }}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%void Element::AddAttribute(string name, string value){  attribute_key.push_back(name);  attributes[name] = value;}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%void Element::AddData(string d){  unsigned int string_start = (unsigned int)d.find_first_not_of(" \t");  if (string_start > 0) {    d.erase(0,string_start);  }  data_lines.push_back(d);}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%} // end namespace JSBSim

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -