#include "MBDynControlData.h" using namespace MbD; void MbD::MBDynControlData::initialize() { } void MbD::MBDynControlData::parseMBDyn(std::vector& lines) { readMaxIterations(lines); readDefaultOrientation(lines); readOmegaRotates(lines); readPrint(lines); readInitialStiffness(lines); readStructuralNodes(lines); readRigidBodies(lines); readJoints(lines); readGravity(lines); assert(lines.size() == 2); } void MbD::MBDynControlData::readMaxIterations(std::vector& lines) { //max iterations: 1000; std::vector tokens{ "max", "iterations:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> str; iss >> maxIterations; lines.erase(it); } void MbD::MBDynControlData::readDefaultOrientation(std::vector& lines) { //default orientation: euler321; std::vector tokens{ "default", "orientation:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> str; iss >> defaultOrientation; lines.erase(it); } void MbD::MBDynControlData::readOmegaRotates(std::vector& lines) { //omega rotates: no; std::vector tokens{ "omega", "rotates:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> str; iss >> omegaRotates; lines.erase(it); } void MbD::MBDynControlData::readPrint(std::vector& lines) { //print: none; std::vector tokens{ "print:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> str; iss >> print; lines.erase(it); } void MbD::MBDynControlData::readInitialStiffness(std::vector& lines) { //initial stiffness: 1.0, 1.0; std::vector tokens{ "initial", "stiffness:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> str; iss >> initialStiffness; iss >> str; initialStiffness.append(str); lines.erase(it); } void MbD::MBDynControlData::readStructuralNodes(std::vector& lines) { //structural nodes: 4; std::vector tokens{ "structural", "nodes:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> str; iss >> structuralNodes; lines.erase(it); } void MbD::MBDynControlData::readRigidBodies(std::vector& lines) { //rigid bodies: 3; std::vector tokens{ "rigid", "bodies:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> str; iss >> rigidBodies; lines.erase(it); } void MbD::MBDynControlData::readJoints(std::vector& lines) { //joints: 6; std::vector tokens{ "joints:" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; std::istringstream iss(*it); std::string str; iss >> str; iss >> joints; lines.erase(it); } void MbD::MBDynControlData::readGravity(std::vector& lines) { //gravity; std::vector tokens{ "gravity" }; auto it = findLineWith(lines, tokens); if (it == lines.end()) return; lines.erase(it); }