#include "ASMTPart.h" #include "CREATE.h" using namespace MbD; void MbD::ASMTPart::parseASMT(std::vector& lines) { size_t pos = lines[0].find_first_not_of("\t"); auto leadingTabs = lines[0].substr(0, pos); while (!lines.empty()) { if (lines[0] == (leadingTabs + "Name")) { lines.erase(lines.begin()); name = lines[0]; lines.erase(lines.begin()); } else if (lines[0] == (leadingTabs + "Position3D")) { lines.erase(lines.begin()); position3D = readColumnOfDoubles(lines[0]); lines.erase(lines.begin()); } else if (lines[0] == (leadingTabs + "RotationMatrix")) { lines.erase(lines.begin()); rotationMatrix = std::make_shared>(3); for (int i = 0; i < 3; i++) { auto row = readRowOfDoubles(lines[0]); rotationMatrix->atiput(i, row); lines.erase(lines.begin()); } } else if (lines[0] == (leadingTabs + "Velocity3D")) { lines.erase(lines.begin()); velocity3D = readColumnOfDoubles(lines[0]); lines.erase(lines.begin()); } else if (lines[0] == (leadingTabs + "Omega3D")) { lines.erase(lines.begin()); omega3D = readColumnOfDoubles(lines[0]); lines.erase(lines.begin()); } else if (lines[0] == (leadingTabs + "FeatureOrder")) { lines.erase(lines.begin()); //featureOrder = std::make_shared>>(); auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "PrincipalMassMarker")); //std::vector featureOrderLines(lines.begin(), it); //while (!featureOrderLines.empty()) { // if (featureOrderLines[0] == (leadingTabs + "\tExtrusion")) { // featureOrderLines.erase(featureOrderLines.begin()); // auto extrusion = CREATE::With(); // extrusion->parseASMT(featureOrderLines); // featureOrder->push_back(extrusion); // extrusion->owner = this; // } // else { // assert(false); // } //} lines.erase(lines.begin(), it); } else if (lines[0] == (leadingTabs + "PrincipalMassMarker")) { lines.erase(lines.begin()); principalMassMarker = CREATE::With(); principalMassMarker->parseASMT(lines); principalMassMarker->owner = this; } else if (lines[0] == (leadingTabs + "RefPoints")) { lines.erase(lines.begin()); refPoints = std::make_shared>>(); auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "RefCurves")); std::vector refPointsLines(lines.begin(), it); while (!refPointsLines.empty()) { if (refPointsLines[0] == (leadingTabs + "\tRefPoint")) { refPointsLines.erase(refPointsLines.begin()); auto refPoint = CREATE::With(); refPoint->parseASMT(refPointsLines); refPoints->push_back(refPoint); refPoint->owner = this; } else { assert(false); } } lines.erase(lines.begin(), it); } else if (lines[0] == (leadingTabs + "RefCurves")) { lines.erase(lines.begin()); refCurves = std::make_shared>>(); auto it = std::find(lines.begin(), lines.end(), (leadingTabs + "RefSurfaces")); std::vector refCurvesLines(lines.begin(), it); while (!refCurvesLines.empty()) { if (refCurvesLines[0] == (leadingTabs + "\tRefCurve")) { refCurvesLines.erase(refCurvesLines.begin()); auto refCurve = CREATE::With(); refCurve->parseASMT(refCurvesLines); refCurves->push_back(refCurve); refCurve->owner = this; } else { assert(false); } } lines.erase(lines.begin(), it); } else if (lines[0] == (leadingTabs + "RefSurfaces")) { lines.erase(lines.begin()); refSurfaces = std::make_shared>>(); auto it = std::find(lines.begin(), lines.end(), (leadingTabs.substr(0, leadingTabs.size() - 1) + "Part")); std::vector refSurfacesLines(lines.begin(), it); while (!refSurfacesLines.empty()) { if (refSurfacesLines[0] == (leadingTabs + "\tRefSurface")) { refSurfacesLines.erase(refSurfacesLines.begin()); auto refSurface = CREATE::With(); refSurface->parseASMT(refSurfacesLines); refSurfaces->push_back(refSurface); refSurface->owner = this; } else { assert(false); } } lines.erase(lines.begin(), it); } else { return; } } }