bool FGMassBalance::Load(Element* document) { string element_name = ""; Name = "Mass Properties Model: " + document->GetAttributeValue("name"); // Perform base class Pre-Load if (!FGModel::Load(document)) return false; SetAircraftBaseInertias(ReadInertiaMatrix(document)); if (document->FindElement("emptywt")) { EmptyWeight = document->FindElementValueAsNumberConvertTo("emptywt", "LBS"); } Element *element = document->FindElement("location"); while (element) { element_name = element->GetAttributeValue("name"); if (element_name == "CG") vbaseXYZcg = element->FindElementTripletConvertTo("IN"); element = document->FindNextElement("location"); } // Find all POINTMASS elements that descend from this METRICS branch of the // config file. element = document->FindElement("pointmass"); while (element) { AddPointMass(element); element = document->FindNextElement("pointmass"); } double ChildFDMWeight = 0.0; for (int fdm=0; fdm<FDMExec->GetFDMCount(); fdm++) { if (FDMExec->GetChildFDM(fdm)->mated) ChildFDMWeight += FDMExec->GetChildFDM(fdm)->exec->GetMassBalance()->GetWeight(); } Weight = EmptyWeight + in.TanksWeight + GetTotalPointMassWeight() + in.GasMass*slugtolb + ChildFDMWeight; Mass = lbtoslug*Weight; PostLoad(document, PropertyManager); Debug(2); return true; }
bool FGMassBalance::Load(Element* elem) { string element_name = ""; double bixx, biyy, bizz, bixy, bixz, biyz; string fname="", file=""; string separator = "/"; fname = elem->GetAttributeValue("file"); if (!fname.empty()) { file = FDMExec->GetFullAircraftPath() + separator + fname; document = LoadXMLDocument(file); if (document == 0L) return false; } else { document = elem; } FGModel::Load(document); // Perform base class Load. bixx = biyy = bizz = bixy = bixz = biyz = 0.0; if (document->FindElement("ixx")) bixx = document->FindElementValueAsNumberConvertTo("ixx", "SLUG*FT2"); if (document->FindElement("iyy")) biyy = document->FindElementValueAsNumberConvertTo("iyy", "SLUG*FT2"); if (document->FindElement("izz")) bizz = document->FindElementValueAsNumberConvertTo("izz", "SLUG*FT2"); if (document->FindElement("ixy")) bixy = document->FindElementValueAsNumberConvertTo("ixy", "SLUG*FT2"); if (document->FindElement("ixz")) bixz = document->FindElementValueAsNumberConvertTo("ixz", "SLUG*FT2"); if (document->FindElement("iyz")) biyz = document->FindElementValueAsNumberConvertTo("iyz", "SLUG*FT2"); SetAircraftBaseInertias(FGMatrix33( bixx, -bixy, bixz, -bixy, biyy, -biyz, bixz, -biyz, bizz )); if (document->FindElement("emptywt")) { EmptyWeight = document->FindElementValueAsNumberConvertTo("emptywt", "LBS"); } Element *element = document->FindElement("location"); while (element) { element_name = element->GetAttributeValue("name"); if (element_name == "CG") vbaseXYZcg = element->FindElementTripletConvertTo("IN"); element = document->FindNextElement("location"); } // Find all POINTMASS elements that descend from this METRICS branch of the // config file. element = document->FindElement("pointmass"); while (element) { AddPointMass(element); element = document->FindNextElement("pointmass"); } double ChildFDMWeight = 0.0; for (int fdm=0; fdm<FDMExec->GetFDMCount(); fdm++) { if (FDMExec->GetChildFDM(fdm)->mated) ChildFDMWeight += FDMExec->GetChildFDM(fdm)->exec->GetMassBalance()->GetWeight(); } Weight = EmptyWeight + in.TanksWeight + GetTotalPointMassWeight() + in.GasMass*slugtolb + ChildFDMWeight; Mass = lbtoslug*Weight; PostLoad(document, PropertyManager); Debug(2); return true; }