diff --git a/OndselSolver/ASMTAnimationParameters.cpp b/OndselSolver/ASMTAnimationParameters.cpp index 9ca46f1..8c5e042 100644 --- a/OndselSolver/ASMTAnimationParameters.cpp +++ b/OndselSolver/ASMTAnimationParameters.cpp @@ -42,3 +42,20 @@ void MbD::ASMTAnimationParameters::parseASMT(std::vector& lines) lines.erase(lines.begin()); } + +void MbD::ASMTAnimationParameters::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "AnimationParameters"); + storeOnLevelString(os, level + 1, "nframe"); + storeOnLevelInt(os, level + 2, nframe); + storeOnLevelString(os, level + 1, "icurrent"); + storeOnLevelInt(os, level + 2, icurrent); + storeOnLevelString(os, level + 1, "istart"); + storeOnLevelInt(os, level + 2, istart); + storeOnLevelString(os, level + 1, "iend"); + storeOnLevelInt(os, level + 2, iend); + storeOnLevelString(os, level + 1, "isForward"); + storeOnLevelBool(os, level + 2, isForward); + storeOnLevelString(os, level + 1, "framesPerSecond"); + storeOnLevelInt(os, level + 2, framesPerSecond); +} diff --git a/OndselSolver/ASMTAnimationParameters.h b/OndselSolver/ASMTAnimationParameters.h index 287277b..3d933bf 100644 --- a/OndselSolver/ASMTAnimationParameters.h +++ b/OndselSolver/ASMTAnimationParameters.h @@ -16,6 +16,7 @@ namespace MbD { // public: void parseASMT(std::vector& lines) override; + void storeOnLevel(std::ofstream& os, int level) override; int nframe = 1000000, icurrent = 0, istart = 0, iend = 1000000, framesPerSecond = 30; bool isForward = true; diff --git a/OndselSolver/ASMTAssembly.cpp b/OndselSolver/ASMTAssembly.cpp index c3b7df0..c955aa5 100644 --- a/OndselSolver/ASMTAssembly.cpp +++ b/OndselSolver/ASMTAssembly.cpp @@ -5,7 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - + #include #include #include @@ -40,6 +40,7 @@ #include "SystemSolver.h" #include "ASMTItemIJ.h" #include "ASMTKinematicIJ.h" +#include using namespace MbD; @@ -369,15 +370,17 @@ void MbD::ASMTAssembly::runSinglePendulum() void MbD::ASMTAssembly::runFile(const char* fileName) { std::ifstream stream(fileName); - if(stream.fail()) { - throw std::invalid_argument("File not found."); - } + if (stream.fail()) { + throw std::invalid_argument("File not found."); + } std::string line; std::vector lines; while (std::getline(stream, line)) { lines.push_back(line); } - assert(lines[0] == "freeCAD: 3D CAD with Motion Simulation by askoh.com"); + bool bool1 = lines[0] == "freeCAD: 3D CAD with Motion Simulation by askoh.com"; + bool bool2 = lines[0] == "OndselSolver"; + assert(bool1 || bool2); lines.erase(lines.begin()); if (lines[0] == "Assembly") { @@ -386,7 +389,32 @@ void MbD::ASMTAssembly::runFile(const char* fileName) assembly->parseASMT(lines); assembly->runKINEMATIC(); } +} +void MbD::ASMTAssembly::readWriteFile(const char* fileName) +{ + std::ifstream stream(fileName); + if (stream.fail()) { + throw std::invalid_argument("File not found."); + } + std::string line; + std::vector lines; + while (std::getline(stream, line)) { + lines.push_back(line); + } + bool bool1 = lines[0] == "freeCAD: 3D CAD with Motion Simulation by askoh.com"; + bool bool2 = lines[0] == "OndselSolver"; + assert(bool1 || bool2); + lines.erase(lines.begin()); + + if (lines[0] == "Assembly") { + lines.erase(lines.begin()); + auto assembly = CREATE::With(); + assembly->parseASMT(lines); + assembly->runKINEMATIC(); + assembly->outputFile("assembly.asmt"); + ASMTAssembly::runFile("assembly.asmt"); + } } void MbD::ASMTAssembly::initialize() @@ -906,7 +934,38 @@ void MbD::ASMTAssembly::createMbD(std::shared_ptr mbdSys, std::shared_pt mbdSysSolver->orderMax = simulationParameters->orderMax; mbdSysSolver->translationLimit = simulationParameters->translationLimit / mbdUnits->length; mbdSysSolver->rotationLimit = simulationParameters->rotationLimit; - animationParameters = nullptr; + //animationParameters = nullptr; +} + +void MbD::ASMTAssembly::outputFile(std::string filename) +{ + std::ofstream os(filename); + os << std::setprecision(std::numeric_limits::digits10 + 1); + // try { + os << "OndselSolver" << std::endl; + storeOnLevel(os, 0); + os.close(); + // } + // catch (...) { + // os.close(); + // } +} + +void MbD::ASMTAssembly::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Assembly"); + storeOnLevelNotes(os, level + 1); + storeOnLevelName(os, level + 1); + ASMTSpatialContainer::storeOnLevel(os, level); + + storeOnLevelParts(os, level + 1); + storeOnLevelKinematicIJs(os, level + 1); + storeOnLevelConstraintSets(os, level + 1); + storeOnLevelForceTorques(os, level + 1); + constantGravity->storeOnLevel(os, level + 1); + simulationParameters->storeOnLevel(os, level + 1); + animationParameters->storeOnLevel(os, level + 1); + storeOnTimeSeries(os); } void MbD::ASMTAssembly::solve() @@ -1089,4 +1148,88 @@ std::shared_ptr MbD::ASMTAssembly::partPartialNamed(std::string partia return part; } +void MbD::ASMTAssembly::storeOnLevelNotes(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Notes"); + storeOnLevelString(os, level + 1, notes); +} + +void MbD::ASMTAssembly::storeOnLevelParts(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Parts"); + for (auto& part : *parts) { + part->storeOnLevel(os, level + 1); + } +} + +void MbD::ASMTAssembly::storeOnLevelKinematicIJs(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "KinematicIJs"); + for (auto& kinematicIJ : *kinematicIJs) { + kinematicIJ->storeOnLevel(os, level); + } +} + +void MbD::ASMTAssembly::storeOnLevelConstraintSets(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "ConstraintSets"); + storeOnLevelJoints(os, level + 1); + storeOnLevelMotions(os, level + 1); + storeOnLevelGeneralConstraintSets(os, level + 1); +} + +void MbD::ASMTAssembly::storeOnLevelForceTorques(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "ForceTorques"); + for (auto& forceTorque : *forcesTorques) { + forceTorque->storeOnLevel(os, level + 1); + } +} + +void MbD::ASMTAssembly::storeOnLevelJoints(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Joints"); + for (auto& joint : *joints) { + joint->storeOnLevel(os, level + 1); + } +} + +void MbD::ASMTAssembly::storeOnLevelMotions(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Motions"); + for (auto& motion : *motions) { + motion->storeOnLevel(os, level + 1); + } +} + +void MbD::ASMTAssembly::storeOnLevelGeneralConstraintSets(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "GeneralConstraintSets"); + //for (auto& generalConstraintSet : *generalConstraintSets) { + // generalConstraintSet->storeOnLevel(os, level); + //} +} + +void MbD::ASMTAssembly::storeOnTimeSeries(std::ofstream& os) +{ + os << "TimeSeries" << std::endl; + os << "Number\tInput\t"; + for (int i = 1; i < times->size(); i++) + { + os << i << '\t'; + } + os << std::endl; + os << "Time\tInput\t"; + for (int i = 1; i < times->size(); i++) + { + os << times->at(i) << '\t'; + } + os << std::endl; + os << "AssemblySeries\t" << fullName("") << std::endl; + ASMTSpatialContainer::storeOnTimeSeries(os); + for (auto& part : *parts) part->storeOnTimeSeries(os); + for (auto& joint : *joints) joint->storeOnTimeSeries(os); + for (auto& motion : *motions) motion->storeOnTimeSeries(os); +} + diff --git a/OndselSolver/ASMTAssembly.h b/OndselSolver/ASMTAssembly.h index d5ef87c..4875f82 100644 --- a/OndselSolver/ASMTAssembly.h +++ b/OndselSolver/ASMTAssembly.h @@ -44,6 +44,7 @@ namespace MbD { static void runSinglePendulumSimplified(); static void runSinglePendulum(); static void runFile(const char* chars); + static void readWriteFile(const char* chars); void initialize() override; ASMTAssembly* root() override; void setNotes(std::string str); @@ -84,6 +85,8 @@ namespace MbD { std::shared_ptr>>markerMap(); void deleteMbD(); void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void outputFile(std::string filename); + void storeOnLevel(std::ofstream& os, int level) override; /* This function performs a one shot solve of the assembly.*/ void solve(); @@ -108,6 +111,15 @@ namespace MbD { void setSimulationParameters(std::shared_ptr simulationParameters); std::shared_ptr partNamed(std::string partName); std::shared_ptr partPartialNamed(std::string partialName); + void storeOnLevelNotes(std::ofstream& os, int level); + void storeOnLevelParts(std::ofstream& os, int level); + void storeOnLevelKinematicIJs(std::ofstream& os, int level); + void storeOnLevelConstraintSets(std::ofstream& os, int level); + void storeOnLevelForceTorques(std::ofstream& os, int level); + void storeOnLevelJoints(std::ofstream& os, int level); + void storeOnLevelMotions(std::ofstream& os, int level); + void storeOnLevelGeneralConstraintSets(std::ofstream& os, int level); + void storeOnTimeSeries(std::ofstream& os) override; std::string notes; std::shared_ptr>> parts = std::make_shared>>(); diff --git a/OndselSolver/ASMTConstantGravity.cpp b/OndselSolver/ASMTConstantGravity.cpp index 181ffd1..71f62e0 100644 --- a/OndselSolver/ASMTConstantGravity.cpp +++ b/OndselSolver/ASMTConstantGravity.cpp @@ -38,3 +38,9 @@ void MbD::ASMTConstantGravity::setg(double a, double b, double c) { g = std::make_shared>(ListD{ a, b, c }); } + +void MbD::ASMTConstantGravity::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "ConstantGravity"); + storeOnLevelArray(os, level + 1, *g); +} diff --git a/OndselSolver/ASMTConstantGravity.h b/OndselSolver/ASMTConstantGravity.h index 56045a7..9f7ad09 100644 --- a/OndselSolver/ASMTConstantGravity.h +++ b/OndselSolver/ASMTConstantGravity.h @@ -24,6 +24,7 @@ namespace MbD { void setg(FColDsptr g); void setg(double a, double b, double c); + void storeOnLevel(std::ofstream& os, int level) override; FColDsptr g = std::make_shared>(ListD{ 0.,0.,0. }); }; diff --git a/OndselSolver/ASMTCylindricalJoint.cpp b/OndselSolver/ASMTCylindricalJoint.cpp index 1af9b56..34ea474 100644 --- a/OndselSolver/ASMTCylindricalJoint.cpp +++ b/OndselSolver/ASMTCylindricalJoint.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTCylindricalJoint.h" using namespace MbD; @@ -14,3 +15,17 @@ std::shared_ptr MbD::ASMTCylindricalJoint::mbdClassNew() { return CREATE::With(); } + +void MbD::ASMTCylindricalJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "CylindricalJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTCylindricalJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "CylindricalJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTCylindricalJoint.h b/OndselSolver/ASMTCylindricalJoint.h index 8a15861..47b1ab9 100644 --- a/OndselSolver/ASMTCylindricalJoint.h +++ b/OndselSolver/ASMTCylindricalJoint.h @@ -17,7 +17,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; - + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; } diff --git a/OndselSolver/ASMTFixedJoint.cpp b/OndselSolver/ASMTFixedJoint.cpp index fcc4720..ebce2b7 100644 --- a/OndselSolver/ASMTFixedJoint.cpp +++ b/OndselSolver/ASMTFixedJoint.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTFixedJoint.h" using namespace MbD; @@ -14,3 +15,17 @@ std::shared_ptr MbD::ASMTFixedJoint::mbdClassNew() { return CREATE::With(); } + +void MbD::ASMTFixedJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "FixedJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTFixedJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "FixedJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTFixedJoint.h b/OndselSolver/ASMTFixedJoint.h index 46d1a37..916dd7c 100644 --- a/OndselSolver/ASMTFixedJoint.h +++ b/OndselSolver/ASMTFixedJoint.h @@ -17,6 +17,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; } diff --git a/OndselSolver/ASMTGeneralMotion.cpp b/OndselSolver/ASMTGeneralMotion.cpp index a30abab..3ba1c77 100644 --- a/OndselSolver/ASMTGeneralMotion.cpp +++ b/OndselSolver/ASMTGeneralMotion.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTGeneralMotion.h" #include "ASMTAssembly.h" #include "SymbolicParser.h" @@ -147,3 +148,17 @@ void MbD::ASMTGeneralMotion::createMbD(std::shared_ptr mbdSys, std::shar fangIJJ->rotOrder = rotOrder; fullMotion->fangIJJ = fangIJJ; } + +void MbD::ASMTGeneralMotion::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "GeneralMotion"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTGeneralMotion::storeOnTimeSeries(std::ofstream& os) +{ + os << "GeneralMotionSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTGeneralMotion.h b/OndselSolver/ASMTGeneralMotion.h index 089b05c..f34a7ef 100644 --- a/OndselSolver/ASMTGeneralMotion.h +++ b/OndselSolver/ASMTGeneralMotion.h @@ -21,6 +21,8 @@ namespace MbD { void readRotationOrder(std::vector& lines); std::shared_ptr mbdClassNew() override; void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; std::shared_ptr> rIJI, angIJJ; std::string rotationOrder; diff --git a/OndselSolver/ASMTItem.cpp b/OndselSolver/ASMTItem.cpp index 65ee189..95c8541 100644 --- a/OndselSolver/ASMTItem.cpp +++ b/OndselSolver/ASMTItem.cpp @@ -5,7 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - + #include "ASMTItem.h" #include "CREATE.h" #include "ASMTSpatialContainer.h" @@ -173,3 +173,66 @@ std::shared_ptr MbD::ASMTItem::sptrConstant(double value) { return std::make_shared(value); } + +void MbD::ASMTItem::storeOnLevel(std::ofstream& os, int level) +{ + assert(false); +} + +void MbD::ASMTItem::storeOnLevelTabs(std::ofstream& os, int level) +{ + for (int i = 0; i < level; i++) + { + os << '\t'; + } +} + +void MbD::ASMTItem::storeOnLevelString(std::ofstream& os, int level, std::string str) +{ + storeOnLevelTabs(os, level); + os << str << std::endl; +} + +void MbD::ASMTItem::storeOnLevelDouble(std::ofstream& os, int level, double value) +{ + storeOnLevelTabs(os, level); + os << value << std::endl; +} + +void MbD::ASMTItem::storeOnLevelInt(std::ofstream& os, int level, int i) +{ + storeOnLevelTabs(os, level); + os << i << std::endl; +} + +void MbD::ASMTItem::storeOnLevelBool(std::ofstream& os, int level, bool value) +{ + storeOnLevelTabs(os, level); + if (value) { + os << "true" << std::endl; + } + else { + os << "false" << std::endl; + } +} + +void MbD::ASMTItem::storeOnLevelArray(std::ofstream& os, int level, std::vector array) +{ + storeOnLevelTabs(os, level); + for (int i = 0; i < array.size(); i++) + { + os << array[i] << '\t'; + } + os << std::endl; +} + +void MbD::ASMTItem::storeOnLevelName(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Name"); + storeOnLevelString(os, level + 1, name); +} + +void MbD::ASMTItem::storeOnTimeSeries(std::ofstream& os) +{ + assert(false); +} diff --git a/OndselSolver/ASMTItem.h b/OndselSolver/ASMTItem.h index 07dd5c9..9fe9489 100644 --- a/OndselSolver/ASMTItem.h +++ b/OndselSolver/ASMTItem.h @@ -44,10 +44,31 @@ namespace MbD { virtual void outputResults(AnalysisType type); std::shared_ptr mbdUnits(); std::shared_ptr sptrConstant(double value); + virtual void storeOnLevel(std::ofstream& os, int level); + virtual void storeOnLevelTabs(std::ofstream& os, int level); + virtual void storeOnLevelString(std::ofstream& os, int level, std::string str); + virtual void storeOnLevelDouble(std::ofstream& os, int level, double value); + virtual void storeOnLevelInt(std::ofstream& os, int level, int i); + virtual void storeOnLevelBool(std::ofstream& os, int level, bool value); + //template + //void storeOnLevelArray(std::ofstream& os, int level, std::vector array); + void storeOnLevelArray(std::ofstream& os, int level, std::vector array); + void storeOnLevelName(std::ofstream& os, int level); + virtual void storeOnTimeSeries(std::ofstream& os); std::string name; ASMTItem* owner = nullptr; std::shared_ptr mbdObject; }; + //template + //inline void ASMTItem::storeOnLevelArray(std::ofstream& os, int level, std::vector array) + //{ + // storeOnLevelTabs(os, level); + // for (int i = 0; i < array.size(); i++) + // { + // os << array[i] << '\t'; + // } + // //os << std::endl; + //} } diff --git a/OndselSolver/ASMTItemIJ.cpp b/OndselSolver/ASMTItemIJ.cpp index 71472e6..de459aa 100644 --- a/OndselSolver/ASMTItemIJ.cpp +++ b/OndselSolver/ASMTItemIJ.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTItemIJ.h" MbD::ASMTItemIJ::ASMTItemIJ() @@ -95,3 +96,51 @@ void MbD::ASMTItemIJ::readTZonIs(std::vector& lines) readDoublesInto(str, "TZonI", intzs); lines.erase(lines.begin()); } + +void MbD::ASMTItemIJ::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level + 1, "MarkerI"); + storeOnLevelString(os, level + 2, markerI); + storeOnLevelString(os, level + 1, "MarkerJ"); + storeOnLevelString(os, level + 2, markerJ); +} + +void MbD::ASMTItemIJ::storeOnTimeSeries(std::ofstream& os) +{ + os << "FXonI\t"; + for (int i = 0; i < fxs->size(); i++) + { + os << fxs->at(i) << '\t'; + } + os << std::endl; + os << "FYonI\t"; + for (int i = 0; i < fys->size(); i++) + { + os << fys->at(i) << '\t'; + } + os << std::endl; + os << "FZonI\t"; + for (int i = 0; i < fzs->size(); i++) + { + os << fzs->at(i) << '\t'; + } + os << std::endl; + os << "TXonI\t"; + for (int i = 0; i < txs->size(); i++) + { + os << txs->at(i) << '\t'; + } + os << std::endl; + os << "TYonI\t"; + for (int i = 0; i < tys->size(); i++) + { + os << tys->at(i) << '\t'; + } + os << std::endl; + os << "TZonI\t"; + for (int i = 0; i < tzs->size(); i++) + { + os << tzs->at(i) << '\t'; + } + os << std::endl; +} diff --git a/OndselSolver/ASMTItemIJ.h b/OndselSolver/ASMTItemIJ.h index 87004e0..7445a5f 100644 --- a/OndselSolver/ASMTItemIJ.h +++ b/OndselSolver/ASMTItemIJ.h @@ -27,6 +27,8 @@ namespace MbD { void readTXonIs(std::vector& lines); void readTYonIs(std::vector& lines); void readTZonIs(std::vector& lines); + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; std::string markerI, markerJ; FRowDsptr fxs, fys, fzs, txs, tys, tzs; diff --git a/OndselSolver/ASMTJoint.cpp b/OndselSolver/ASMTJoint.cpp index 1b1de97..389113b 100644 --- a/OndselSolver/ASMTJoint.cpp +++ b/OndselSolver/ASMTJoint.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTJoint.h" using namespace MbD; @@ -34,3 +35,13 @@ void MbD::ASMTJoint::readJointSeries(std::vector& lines) readTYonIs(lines); readTZonIs(lines); } + +void MbD::ASMTJoint::storeOnLevel(std::ofstream& os, int level) +{ + assert(false); +} + +void MbD::ASMTJoint::storeOnTimeSeries(std::ofstream& os) +{ + assert(false); +} diff --git a/OndselSolver/ASMTJoint.h b/OndselSolver/ASMTJoint.h index 73e1a97..7ed3cff 100644 --- a/OndselSolver/ASMTJoint.h +++ b/OndselSolver/ASMTJoint.h @@ -18,6 +18,8 @@ namespace MbD { public: void parseASMT(std::vector& lines) override; void readJointSeries(std::vector& lines); + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; std::shared_ptr>> jointSeries; diff --git a/OndselSolver/ASMTMarker.cpp b/OndselSolver/ASMTMarker.cpp index 6b0d729..a190e96 100644 --- a/OndselSolver/ASMTMarker.cpp +++ b/OndselSolver/ASMTMarker.cpp @@ -5,7 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - + #include "ASMTMarker.h" #include "ASMTRefItem.h" #include "ASMTPart.h" @@ -60,3 +60,11 @@ void MbD::ASMTMarker::createMbD(std::shared_ptr mbdSys, std::shared_ptr< mkr->aApm = aApm(); mbdObject = mkr->endFrames->at(0); } + +void MbD::ASMTMarker::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Marker"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTSpatialItem::storeOnLevel(os, level); +} diff --git a/OndselSolver/ASMTMarker.h b/OndselSolver/ASMTMarker.h index fc8f7f1..a8d8eeb 100644 --- a/OndselSolver/ASMTMarker.h +++ b/OndselSolver/ASMTMarker.h @@ -22,6 +22,7 @@ namespace MbD { FColDsptr rpmp(); FMatDsptr aApm(); void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void storeOnLevel(std::ofstream& os, int level) override; }; } diff --git a/OndselSolver/ASMTMotion.cpp b/OndselSolver/ASMTMotion.cpp index fa22dfc..8cb66bc 100644 --- a/OndselSolver/ASMTMotion.cpp +++ b/OndselSolver/ASMTMotion.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTMotion.h" using namespace MbD; @@ -31,3 +32,13 @@ void MbD::ASMTMotion::readMotionSeries(std::vector& lines) void MbD::ASMTMotion::initMarkers() { } + +void MbD::ASMTMotion::storeOnLevel(std::ofstream& os, int level) +{ + assert(false); +} + +void MbD::ASMTMotion::storeOnTimeSeries(std::ofstream& os) +{ + assert(false); +} diff --git a/OndselSolver/ASMTMotion.h b/OndselSolver/ASMTMotion.h index d4de138..7a4e2e0 100644 --- a/OndselSolver/ASMTMotion.h +++ b/OndselSolver/ASMTMotion.h @@ -18,6 +18,8 @@ namespace MbD { public: void readMotionSeries(std::vector& lines); virtual void initMarkers(); + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; std::shared_ptr>> motionSeries; diff --git a/OndselSolver/ASMTNoRotationJoint.cpp b/OndselSolver/ASMTNoRotationJoint.cpp index 446295e..42340e7 100644 --- a/OndselSolver/ASMTNoRotationJoint.cpp +++ b/OndselSolver/ASMTNoRotationJoint.cpp @@ -5,6 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ +#include #include "ASMTNoRotationJoint.h" #include "NoRotationJoint.h" @@ -15,3 +16,17 @@ std::shared_ptr MbD::ASMTNoRotationJoint::mbdClassNew() { return CREATE::With(); } + +void MbD::ASMTNoRotationJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "NoRotationJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTNoRotationJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "NoRotationJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTNoRotationJoint.h b/OndselSolver/ASMTNoRotationJoint.h index d39dbaa..c6e53b6 100644 --- a/OndselSolver/ASMTNoRotationJoint.h +++ b/OndselSolver/ASMTNoRotationJoint.h @@ -16,6 +16,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; } diff --git a/OndselSolver/ASMTPart.cpp b/OndselSolver/ASMTPart.cpp index 3a2405b..e697eaa 100644 --- a/OndselSolver/ASMTPart.cpp +++ b/OndselSolver/ASMTPart.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTPart.h" #include "CREATE.h" #include "ASMTPrincipalMassMarker.h" @@ -116,3 +117,29 @@ void MbD::ASMTPart::createMbD(std::shared_ptr mbdSys, std::shared_ptr(mbdObject)->asFixed(); } + +void MbD::ASMTPart::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Part"); + storeOnLevelName(os, level + 1); + storeOnLevelPosition(os, level + 1); + storeOnLevelRotationMatrix(os, level + 1); + storeOnLevelVelocity(os, level + 1); + storeOnLevelOmega(os, level + 1); + storeOnLevelString(os, level + 1, "FeatureOrder"); + storeOnLevelMassMarker(os, level + 1); + storeOnLevelRefPoints(os, level + 1); + storeOnLevelRefCurves(os, level + 1); + storeOnLevelRefSurfaces(os, level + 1); +} + +void MbD::ASMTPart::storeOnLevelMassMarker(std::ofstream& os, int level) +{ + principalMassMarker->storeOnLevel(os, level); +} + +void MbD::ASMTPart::storeOnTimeSeries(std::ofstream& os) +{ + os << "PartSeries\t" << fullName("") << std::endl; + ASMTSpatialContainer::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTPart.h b/OndselSolver/ASMTPart.h index 8a7c8fb..7b50ab4 100644 --- a/OndselSolver/ASMTPart.h +++ b/OndselSolver/ASMTPart.h @@ -25,6 +25,9 @@ namespace MbD { FColDsptr omeOpO() override; ASMTPart* part() override; void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnLevelMassMarker(std::ofstream& os, int level); + void storeOnTimeSeries(std::ofstream& os) override; //std::shared_ptr>> featureOrder; std::shared_ptr>> partSeries; diff --git a/OndselSolver/ASMTPointInLineJoint.cpp b/OndselSolver/ASMTPointInLineJoint.cpp index 954361d..5cc4676 100644 --- a/OndselSolver/ASMTPointInLineJoint.cpp +++ b/OndselSolver/ASMTPointInLineJoint.cpp @@ -5,6 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ +#include #include "ASMTPointInLineJoint.h" #include "PointInLineJoint.h" @@ -14,4 +15,18 @@ using namespace MbD; std::shared_ptr MbD::ASMTPointInLineJoint::mbdClassNew() { return CREATE::With(); -} \ No newline at end of file +} + +void MbD::ASMTPointInLineJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "PointInLineJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTPointInLineJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "PointInLineJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTPointInLineJoint.h b/OndselSolver/ASMTPointInLineJoint.h index 4cabf83..9c917a9 100644 --- a/OndselSolver/ASMTPointInLineJoint.h +++ b/OndselSolver/ASMTPointInLineJoint.h @@ -16,6 +16,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; } diff --git a/OndselSolver/ASMTPointInPlaneJoint.cpp b/OndselSolver/ASMTPointInPlaneJoint.cpp index 636e173..fb47516 100644 --- a/OndselSolver/ASMTPointInPlaneJoint.cpp +++ b/OndselSolver/ASMTPointInPlaneJoint.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTPointInPlaneJoint.h" #include "PointInPlaneJoint.h" @@ -38,3 +39,17 @@ void MbD::ASMTPointInPlaneJoint::createMbD(std::shared_ptr mbdSys, std:: pointInPlaneJoint->offset = offset; } +void MbD::ASMTPointInPlaneJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "PointInPlaneJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTPointInPlaneJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "PointInPlaneJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} + diff --git a/OndselSolver/ASMTPointInPlaneJoint.h b/OndselSolver/ASMTPointInPlaneJoint.h index 3ae82b7..54785a0 100644 --- a/OndselSolver/ASMTPointInPlaneJoint.h +++ b/OndselSolver/ASMTPointInPlaneJoint.h @@ -19,6 +19,8 @@ namespace MbD { void parseASMT(std::vector& lines) override; void readOffset(std::vector& lines); void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; double offset; }; diff --git a/OndselSolver/ASMTPrincipalMassMarker.cpp b/OndselSolver/ASMTPrincipalMassMarker.cpp index 80b1406..d5ee7fe 100644 --- a/OndselSolver/ASMTPrincipalMassMarker.cpp +++ b/OndselSolver/ASMTPrincipalMassMarker.cpp @@ -18,7 +18,7 @@ void MbD::ASMTPrincipalMassMarker::parseASMT(std::vector& lines) auto leadingTabs = lines[0].substr(0, pos); assert(lines[0] == (leadingTabs + "Name")); lines.erase(lines.begin()); - name = lines[0]; + name = readString(lines[0]); lines.erase(lines.begin()); assert(lines[0] == (leadingTabs + "Position3D")); lines.erase(lines.begin()); @@ -72,3 +72,17 @@ void MbD::ASMTPrincipalMassMarker::setMomentOfInertias(double a, double b, doubl { momentOfInertias = std::make_shared>(ListD{ a, b, c }); } + +void MbD::ASMTPrincipalMassMarker::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "PrincipalMassMarker"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTSpatialItem::storeOnLevel(os, level); + storeOnLevelString(os, level + 1, "Mass"); + storeOnLevelDouble(os, level + 2, mass); + storeOnLevelString(os, level + 1, "MomentOfInertias"); + storeOnLevelArray(os, level + 2, *momentOfInertias); + storeOnLevelString(os, level + 1, "Density"); + storeOnLevelDouble(os, level + 2, density); +} diff --git a/OndselSolver/ASMTPrincipalMassMarker.h b/OndselSolver/ASMTPrincipalMassMarker.h index 0686ae9..2e5740d 100644 --- a/OndselSolver/ASMTPrincipalMassMarker.h +++ b/OndselSolver/ASMTPrincipalMassMarker.h @@ -22,6 +22,7 @@ namespace MbD { // Overloads to simplify syntax. void setMomentOfInertias(double a, double b, double c); + void storeOnLevel(std::ofstream& os, int level) override; double mass = 0.0; double density = 0.0; diff --git a/OndselSolver/ASMTRefCurve.cpp b/OndselSolver/ASMTRefCurve.cpp index 227b9d8..b95dbe4 100644 --- a/OndselSolver/ASMTRefCurve.cpp +++ b/OndselSolver/ASMTRefCurve.cpp @@ -15,3 +15,8 @@ void MbD::ASMTRefCurve::parseASMT(std::vector& lines) { assert(false); } + +void MbD::ASMTRefCurve::storeOnLevel(std::ofstream& os, int level) +{ + assert(false); +} diff --git a/OndselSolver/ASMTRefCurve.h b/OndselSolver/ASMTRefCurve.h index 0342497..e1e8126 100644 --- a/OndselSolver/ASMTRefCurve.h +++ b/OndselSolver/ASMTRefCurve.h @@ -16,6 +16,7 @@ namespace MbD { // public: void parseASMT(std::vector& lines) override; + void storeOnLevel(std::ofstream& os, int level) override; }; diff --git a/OndselSolver/ASMTRefItem.cpp b/OndselSolver/ASMTRefItem.cpp index f0d9d0c..e87e168 100644 --- a/OndselSolver/ASMTRefItem.cpp +++ b/OndselSolver/ASMTRefItem.cpp @@ -41,3 +41,12 @@ void MbD::ASMTRefItem::readMarker(std::vector& lines) markers->push_back(marker); marker->owner = this; } + +void MbD::ASMTRefItem::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RefPoints"); + ASMTSpatialItem::storeOnLevel(os, level+1); + for (auto& marker : *markers) { + marker->storeOnLevel(os, level); + } +} diff --git a/OndselSolver/ASMTRefItem.h b/OndselSolver/ASMTRefItem.h index 8687bd1..10deb6d 100644 --- a/OndselSolver/ASMTRefItem.h +++ b/OndselSolver/ASMTRefItem.h @@ -20,6 +20,7 @@ namespace MbD { void addMarker(std::shared_ptr marker); void readMarkers(std::vector& lines); void readMarker(std::vector& lines); + void storeOnLevel(std::ofstream& os, int level) override; std::shared_ptr>> markers = std::make_shared>>(); diff --git a/OndselSolver/ASMTRefPoint.cpp b/OndselSolver/ASMTRefPoint.cpp index b5a62eb..dc87576 100644 --- a/OndselSolver/ASMTRefPoint.cpp +++ b/OndselSolver/ASMTRefPoint.cpp @@ -5,7 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - + #include "ASMTRefPoint.h" #include "ASMTMarker.h" #include "CREATE.h" @@ -30,3 +30,13 @@ void MbD::ASMTRefPoint::createMbD(std::shared_ptr mbdSys, std::shared_pt marker->createMbD(mbdSys, mbdUnits); } } + +void MbD::ASMTRefPoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RefPoint"); + ASMTSpatialItem::storeOnLevel(os, level); + storeOnLevelString(os, level + 1, "Markers"); + for (auto& marker : *markers) { + marker->storeOnLevel(os, level + 2); + } +} diff --git a/OndselSolver/ASMTRefPoint.h b/OndselSolver/ASMTRefPoint.h index d341bc9..32c40e1 100644 --- a/OndselSolver/ASMTRefPoint.h +++ b/OndselSolver/ASMTRefPoint.h @@ -20,6 +20,7 @@ namespace MbD { void parseASMT(std::vector& lines) override; std::string fullName(std::string partialName) override; void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; + void storeOnLevel(std::ofstream& os, int level) override; }; diff --git a/OndselSolver/ASMTRefSurface.cpp b/OndselSolver/ASMTRefSurface.cpp index f9ff13f..883bdd9 100644 --- a/OndselSolver/ASMTRefSurface.cpp +++ b/OndselSolver/ASMTRefSurface.cpp @@ -15,3 +15,8 @@ void MbD::ASMTRefSurface::parseASMT(std::vector& lines) { assert(false); } + +void MbD::ASMTRefSurface::storeOnLevel(std::ofstream& os, int level) +{ + assert(false); +} diff --git a/OndselSolver/ASMTRefSurface.h b/OndselSolver/ASMTRefSurface.h index 4bd62b0..5a9abc9 100644 --- a/OndselSolver/ASMTRefSurface.h +++ b/OndselSolver/ASMTRefSurface.h @@ -16,6 +16,7 @@ namespace MbD { // public: void parseASMT(std::vector& lines) override; + void storeOnLevel(std::ofstream& os, int level) override; }; diff --git a/OndselSolver/ASMTRevoluteJoint.cpp b/OndselSolver/ASMTRevoluteJoint.cpp index 6fd2467..15e28e9 100644 --- a/OndselSolver/ASMTRevoluteJoint.cpp +++ b/OndselSolver/ASMTRevoluteJoint.cpp @@ -5,12 +5,27 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTRevoluteJoint.h" using namespace MbD; std::shared_ptr MbD::ASMTRevoluteJoint::mbdClassNew() { - return CREATE::With(); + return CREATE::With(); +} + +void MbD::ASMTRevoluteJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RevoluteJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTRevoluteJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "RevoluteJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); } diff --git a/OndselSolver/ASMTRevoluteJoint.h b/OndselSolver/ASMTRevoluteJoint.h index befde2c..54dd0cc 100644 --- a/OndselSolver/ASMTRevoluteJoint.h +++ b/OndselSolver/ASMTRevoluteJoint.h @@ -17,6 +17,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; } diff --git a/OndselSolver/ASMTRotationalMotion.cpp b/OndselSolver/ASMTRotationalMotion.cpp index b87f9ff..8283d63 100644 --- a/OndselSolver/ASMTRotationalMotion.cpp +++ b/OndselSolver/ASMTRotationalMotion.cpp @@ -5,6 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ +#include #include "ASMTRotationalMotion.h" #include "ASMTAssembly.h" @@ -20,6 +21,10 @@ using namespace MbD; void MbD::ASMTRotationalMotion::parseASMT(std::vector& lines) { readName(lines); + if (lines[0].find("MarkerI") != std::string::npos) { + readMarkerI(lines); + readMarkerJ(lines); + } readMotionJoint(lines); readRotationZ(lines); } @@ -82,3 +87,21 @@ void MbD::ASMTRotationalMotion::setRotationZ(std::string rotZ) { rotationZ = rotZ; } + +void MbD::ASMTRotationalMotion::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RotationalMotion"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); + storeOnLevelString(os, level + 1, "MotionJoint"); + storeOnLevelString(os, level + 2, motionJoint); + storeOnLevelString(os, level + 1, "RotationZ"); + storeOnLevelString(os, level + 2, rotationZ); +} + +void MbD::ASMTRotationalMotion::storeOnTimeSeries(std::ofstream& os) +{ + os << "RotationalMotionSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTRotationalMotion.h b/OndselSolver/ASMTRotationalMotion.h index 11a43c3..3386358 100644 --- a/OndselSolver/ASMTRotationalMotion.h +++ b/OndselSolver/ASMTRotationalMotion.h @@ -24,6 +24,8 @@ namespace MbD { std::shared_ptr mbdClassNew() override; void setMotionJoint(std::string motionJoint); void setRotationZ(std::string rotZ); + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; std::string motionJoint, rotationZ; }; diff --git a/OndselSolver/ASMTSimulationParameters.cpp b/OndselSolver/ASMTSimulationParameters.cpp index d866e51..c7c5bdb 100644 --- a/OndselSolver/ASMTSimulationParameters.cpp +++ b/OndselSolver/ASMTSimulationParameters.cpp @@ -78,3 +78,20 @@ void MbD::ASMTSimulationParameters::setmaxIter(int maxIter) iterMaxPosKine = maxIter; iterMaxAccKine = maxIter; } + +void MbD::ASMTSimulationParameters::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "SimulationParameters"); + storeOnLevelString(os, level + 1, "tstart"); + storeOnLevelDouble(os, level + 2, tstart); + storeOnLevelString(os, level + 1, "tend"); + storeOnLevelDouble(os, level + 2, tend); + storeOnLevelString(os, level + 1, "hmin"); + storeOnLevelDouble(os, level + 2, hmin); + storeOnLevelString(os, level + 1, "hmax"); + storeOnLevelDouble(os, level + 2, hmax); + storeOnLevelString(os, level + 1, "hout"); + storeOnLevelDouble(os, level + 2, hout); + storeOnLevelString(os, level + 1, "errorTol"); + storeOnLevelDouble(os, level + 2, errorTol); +} diff --git a/OndselSolver/ASMTSimulationParameters.h b/OndselSolver/ASMTSimulationParameters.h index 620eae1..c6b05ad 100644 --- a/OndselSolver/ASMTSimulationParameters.h +++ b/OndselSolver/ASMTSimulationParameters.h @@ -23,6 +23,7 @@ namespace MbD { void sethout(double hout); void seterrorTol(double errorTol); void setmaxIter(int maxIter); + void storeOnLevel(std::ofstream& os, int level) override; double tstart = 0.0, tend = 1.0, hmin = 1.0e-9, hmax = 1.0e9, hout = 0.1, errorTol = 1.0e-6; double errorTolPosKine = 1.0e-6, errorTolAccKine = 1.0e-6, corAbsTol = 1.0e-6, corRelTol = 1.0e-6; diff --git a/OndselSolver/ASMTSpatialContainer.cpp b/OndselSolver/ASMTSpatialContainer.cpp index 3a4578d..ba604ea 100644 --- a/OndselSolver/ASMTSpatialContainer.cpp +++ b/OndselSolver/ASMTSpatialContainer.cpp @@ -5,7 +5,9 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include +#include + #include "ASMTSpatialContainer.h" #include "Units.h" #include "Part.h" @@ -13,8 +15,7 @@ #include "ASMTRefPoint.h" #include "ASMTRefCurve.h" #include "ASMTRefSurface.h" -#include -//#include "ASMTPrincipalMassMarker.h" + //#include "ASMTPrincipalMassMarker.h" using namespace MbD; @@ -489,3 +490,210 @@ std::shared_ptr>> MbD::ASMTSpatialContai } return markers; } + +void MbD::ASMTSpatialContainer::storeOnLevel(std::ofstream& os, int level) +{ + ASMTSpatialItem::storeOnLevel(os, level); + storeOnLevelVelocity(os, level + 1); + storeOnLevelOmega(os, level + 1); + storeOnLevelRefPoints(os, level + 1); + storeOnLevelRefCurves(os, level + 1); + storeOnLevelRefSurfaces(os, level + 1); +} + +void MbD::ASMTSpatialContainer::setVelocity3D(FColDsptr vec) +{ + velocity3D = vec; +} + +void MbD::ASMTSpatialContainer::setOmega3D(FColDsptr vec) +{ + omega3D = vec; +} + +void MbD::ASMTSpatialContainer::readVelocity3D(std::vector& lines) +{ + assert(lines[0].find("Velocity3D") != std::string::npos); + lines.erase(lines.begin()); + std::istringstream iss(lines[0]); + velocity3D = std::make_shared>(); + double d; + while (iss >> d) { + velocity3D->push_back(d); + } + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::readOmega3D(std::vector& lines) +{ + assert(lines[0].find("Omega3D") != std::string::npos); + lines.erase(lines.begin()); + std::istringstream iss(lines[0]); + omega3D = std::make_shared>(); + double d; + while (iss >> d) { + omega3D->push_back(d); + } + lines.erase(lines.begin()); +} + +void MbD::ASMTSpatialContainer::setVelocity3D(double a, double b, double c) +{ + velocity3D = std::make_shared>(ListD{ a, b, c }); +} + +void MbD::ASMTSpatialContainer::setOmega3D(double a, double b, double c) +{ + omega3D = std::make_shared>(ListD{ a, b, c }); +} + +void MbD::ASMTSpatialContainer::storeOnLevelVelocity(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Velocity3D"); + storeOnLevelArray(os, level + 1, *velocity3D); +} + +void MbD::ASMTSpatialContainer::storeOnLevelOmega(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Omega3D"); + storeOnLevelArray(os, level + 1, *omega3D); +} + +void MbD::ASMTSpatialContainer::storeOnLevelRefPoints(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RefPoints"); + for (auto& refPoint : *refPoints) + { + refPoint->storeOnLevel(os, level + 1); + } +} + +void MbD::ASMTSpatialContainer::storeOnLevelRefCurves(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RefCurves"); + for (auto& refCurve : *refCurves) + { + refCurve->storeOnLevel(os, level); + } +} + +void MbD::ASMTSpatialContainer::storeOnLevelRefSurfaces(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RefSurfaces"); + for (auto& refSurface : *refSurfaces) + { + refSurface->storeOnLevel(os, level); + } +} + +void MbD::ASMTSpatialContainer::storeOnTimeSeries(std::ofstream& os) +{ + os << "X\t"; + for (int i = 0; i < xs->size(); i++) + { + os << xs->at(i) << '\t'; + } + os << std::endl; + os << "Y\t"; + for (int i = 0; i < ys->size(); i++) + { + os << ys->at(i) << '\t'; + } + os << std::endl; + os << "Z\t"; + for (int i = 0; i < zs->size(); i++) + { + os << zs->at(i) << '\t'; + } + os << std::endl; + os << "Bryantx\t"; + for (int i = 0; i < bryxs->size(); i++) + { + os << bryxs->at(i) << '\t'; + } + os << std::endl; + os << "Bryanty\t"; + for (int i = 0; i < bryys->size(); i++) + { + os << bryys->at(i) << '\t'; + } + os << std::endl; + os << "Bryantz\t"; + for (int i = 0; i < bryzs->size(); i++) + { + os << bryzs->at(i) << '\t'; + } + os << std::endl; + os << "VX\t"; + for (int i = 0; i < vxs->size(); i++) + { + os << vxs->at(i) << '\t'; + } + os << std::endl; + os << "VY\t"; + for (int i = 0; i < vys->size(); i++) + { + os << vys->at(i) << '\t'; + } + os << std::endl; + os << "VZ\t"; + for (int i = 0; i < vzs->size(); i++) + { + os << vzs->at(i) << '\t'; + } + os << std::endl; + os << "OmegaX\t"; + for (int i = 0; i < omexs->size(); i++) + { + os << omexs->at(i) << '\t'; + } + os << std::endl; + os << "OmegaY\t"; + for (int i = 0; i < omeys->size(); i++) + { + os << omeys->at(i) << '\t'; + } + os << std::endl; + os << "OmegaZ\t"; + for (int i = 0; i < omezs->size(); i++) + { + os << omezs->at(i) << '\t'; + } + os << std::endl; + os << "AX\t"; + for (int i = 0; i < axs->size(); i++) + { + os << axs->at(i) << '\t'; + } + os << std::endl; + os << "AY\t"; + for (int i = 0; i < ays->size(); i++) + { + os << ays->at(i) << '\t'; + } + os << std::endl; + os << "AZ\t"; + for (int i = 0; i < azs->size(); i++) + { + os << azs->at(i) << '\t'; + } + os << std::endl; + os << "AlphaX\t"; + for (int i = 0; i < alpxs->size(); i++) + { + os << alpxs->at(i) << '\t'; + } + os << std::endl; + os << "AlphaY\t"; + for (int i = 0; i < alpys->size(); i++) + { + os << alpys->at(i) << '\t'; + } + os << std::endl; + os << "AlphaZ\t"; + for (int i = 0; i < alpzs->size(); i++) + { + os << alpzs->at(i) << '\t'; + } + os << std::endl; +} diff --git a/OndselSolver/ASMTSpatialContainer.h b/OndselSolver/ASMTSpatialContainer.h index fbe7323..73d6ddd 100644 --- a/OndselSolver/ASMTSpatialContainer.h +++ b/OndselSolver/ASMTSpatialContainer.h @@ -73,7 +73,22 @@ namespace MbD { void addMarker(std::shared_ptr marker); std::string generateUniqueMarkerName(); std::shared_ptr>> markerList(); + void setVelocity3D(FColDsptr velocity3D); + void setOmega3D(FColDsptr omega3D); + void readVelocity3D(std::vector& lines); + void readOmega3D(std::vector& lines); + void setVelocity3D(double a, double b, double c); + void setOmega3D(double a, double b, double c); + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnLevelVelocity(std::ofstream& os, int level); + void storeOnLevelOmega(std::ofstream& os, int level); + void storeOnLevelRefPoints(std::ofstream& os, int level); + void storeOnLevelRefCurves(std::ofstream& os, int level); + void storeOnLevelRefSurfaces(std::ofstream& os, int level); + void storeOnTimeSeries(std::ofstream& os) override; + FColDsptr velocity3D = std::make_shared>(3); + FColDsptr omega3D = std::make_shared>(3); std::shared_ptr>> refPoints; std::shared_ptr>> refCurves; std::shared_ptr>> refSurfaces; diff --git a/OndselSolver/ASMTSpatialItem.cpp b/OndselSolver/ASMTSpatialItem.cpp index ea01913..6f5874a 100644 --- a/OndselSolver/ASMTSpatialItem.cpp +++ b/OndselSolver/ASMTSpatialItem.cpp @@ -5,7 +5,7 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - + #include "ASMTSpatialItem.h" #include "Units.h" #include "Part.h" @@ -30,16 +30,6 @@ void MbD::ASMTSpatialItem::setRotationMatrix(FMatDsptr mat) rotationMatrix = mat; } -void MbD::ASMTSpatialItem::setVelocity3D(FColDsptr vec) -{ - velocity3D = vec; -} - -void MbD::ASMTSpatialItem::setOmega3D(FColDsptr vec) -{ - omega3D = vec; -} - void MbD::ASMTSpatialItem::readPosition3D(std::vector& lines) { assert(lines[0].find("Position3D") != std::string::npos); @@ -70,32 +60,6 @@ void MbD::ASMTSpatialItem::readRotationMatrix(std::vector& lines) } } -void MbD::ASMTSpatialItem::readVelocity3D(std::vector& lines) -{ - assert(lines[0].find("Velocity3D") != std::string::npos); - lines.erase(lines.begin()); - std::istringstream iss(lines[0]); - velocity3D = std::make_shared>(); - double d; - while (iss >> d) { - velocity3D->push_back(d); - } - lines.erase(lines.begin()); -} - -void MbD::ASMTSpatialItem::readOmega3D(std::vector& lines) -{ - assert(lines[0].find("Omega3D") != std::string::npos); - lines.erase(lines.begin()); - std::istringstream iss(lines[0]); - omega3D = std::make_shared>(); - double d; - while (iss >> d) { - omega3D->push_back(d); - } - lines.erase(lines.begin()); -} - void MbD::ASMTSpatialItem::getPosition3D(double& a, double& b, double& c) { a = position3D->at(0); @@ -118,16 +82,6 @@ void MbD::ASMTSpatialItem::setPosition3D(double a, double b, double c) position3D = std::make_shared>(ListD{ a, b, c }); } -void MbD::ASMTSpatialItem::setVelocity3D(double a, double b, double c) -{ - velocity3D = std::make_shared>(ListD{ a, b, c }); -} - -void MbD::ASMTSpatialItem::setOmega3D(double a, double b, double c) -{ - omega3D = std::make_shared>(ListD{ a, b, c }); -} - void MbD::ASMTSpatialItem::setRotationMatrix(double v11, double v12, double v13, double v21, double v22, double v23, double v31, double v32, double v33) @@ -137,4 +91,25 @@ void MbD::ASMTSpatialItem::setRotationMatrix(double v11, double v12, double v13, { v21, v22, v23 }, { v31, v32, v33 } }); -} \ No newline at end of file +} + +void MbD::ASMTSpatialItem::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelPosition(os, level + 1); + storeOnLevelRotationMatrix(os, level + 1); +} + +void MbD::ASMTSpatialItem::storeOnLevelPosition(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "Position3D"); + storeOnLevelArray(os, level + 1, *position3D); +} + +void MbD::ASMTSpatialItem::storeOnLevelRotationMatrix(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "RotationMatrix"); + for (int i = 0; i < 3; i++) + { + storeOnLevelArray(os, level + 1, *rotationMatrix->at(i)); + } +} diff --git a/OndselSolver/ASMTSpatialItem.h b/OndselSolver/ASMTSpatialItem.h index 39f2a4b..2f5a6e2 100644 --- a/OndselSolver/ASMTSpatialItem.h +++ b/OndselSolver/ASMTSpatialItem.h @@ -17,32 +17,27 @@ namespace MbD { public: void setPosition3D(FColDsptr position3D); void setRotationMatrix(FMatDsptr rotationMatrix); - void setVelocity3D(FColDsptr velocity3D); - void setOmega3D(FColDsptr omega3D); void readPosition3D(std::vector& lines); void readRotationMatrix(std::vector& lines); - void readVelocity3D(std::vector& lines); - void readOmega3D(std::vector& lines); - - FColDsptr position3D = std::make_shared>(3); - FColDsptr velocity3D = std::make_shared>(3); - FColDsptr omega3D = std::make_shared>(3); - FMatDsptr rotationMatrix = std::make_shared>(ListListD{ - { 1, 0, 0 }, - { 0, 1, 0 }, - { 0, 0, 1 } - }); // Overloads to simplify syntax. void getPosition3D(double& a, double& b, double& c); void getQuarternions(double& q0, double& q1, double& q2, double& q3); void setPosition3D(double a, double b, double c); void setQuarternions(double q0, double q1, double q2, double q3); - void setVelocity3D(double a, double b, double c); - void setOmega3D(double a, double b, double c); void setRotationMatrix(double v11, double v12, double v13, double v21, double v22, double v23, double v31, double v32, double v33); + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnLevelPosition(std::ofstream& os, int level); + void storeOnLevelRotationMatrix(std::ofstream& os, int level); + + FColDsptr position3D = std::make_shared>(3); + FMatDsptr rotationMatrix = std::make_shared>(ListListD{ + { 1, 0, 0 }, + { 0, 1, 0 }, + { 0, 0, 1 } + }); }; } diff --git a/OndselSolver/ASMTSphericalJoint.cpp b/OndselSolver/ASMTSphericalJoint.cpp index a5c736d..5232322 100644 --- a/OndselSolver/ASMTSphericalJoint.cpp +++ b/OndselSolver/ASMTSphericalJoint.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTSphericalJoint.h" using namespace MbD; @@ -14,3 +15,17 @@ std::shared_ptr MbD::ASMTSphericalJoint::mbdClassNew() { return CREATE::With(); } + +void MbD::ASMTSphericalJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "SphericalJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTSphericalJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "SphericalJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTSphericalJoint.h b/OndselSolver/ASMTSphericalJoint.h index d975354..9ed9fb8 100644 --- a/OndselSolver/ASMTSphericalJoint.h +++ b/OndselSolver/ASMTSphericalJoint.h @@ -17,6 +17,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; } diff --git a/OndselSolver/ASMTTranslationalJoint.cpp b/OndselSolver/ASMTTranslationalJoint.cpp index 8c6a21b..b03f342 100644 --- a/OndselSolver/ASMTTranslationalJoint.cpp +++ b/OndselSolver/ASMTTranslationalJoint.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTTranslationalJoint.h" using namespace MbD; @@ -14,3 +15,17 @@ std::shared_ptr MbD::ASMTTranslationalJoint::mbdClassNew() { return CREATE::With(); } + +void MbD::ASMTTranslationalJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "TranslationalJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTTranslationalJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "TranslationalJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTTranslationalJoint.h b/OndselSolver/ASMTTranslationalJoint.h index 9752c91..9f673da 100644 --- a/OndselSolver/ASMTTranslationalJoint.h +++ b/OndselSolver/ASMTTranslationalJoint.h @@ -17,6 +17,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; diff --git a/OndselSolver/ASMTTranslationalMotion.cpp b/OndselSolver/ASMTTranslationalMotion.cpp index 9d425cf..323483c 100644 --- a/OndselSolver/ASMTTranslationalMotion.cpp +++ b/OndselSolver/ASMTTranslationalMotion.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTTranslationalMotion.h" #include "ASMTAssembly.h" #include "SymbolicParser.h" @@ -22,21 +23,6 @@ void MbD::ASMTTranslationalMotion::parseASMT(std::vector& lines) readName(lines); readMotionJoint(lines); readTranslationZ(lines); - - //size_t pos = lines[0].find_first_not_of("\t"); - //auto leadingTabs = lines[0].substr(0, pos); - //assert(lines[0] == (leadingTabs + "Name")); - //lines.erase(lines.begin()); - //name = lines[0]; - //lines.erase(lines.begin()); - //assert(lines[0] == (leadingTabs + "MotionJoint")); - //lines.erase(lines.begin()); - //motionJoint = lines[0]; - //lines.erase(lines.begin()); - //assert(lines[0] == (leadingTabs + "TranslationZ")); - //lines.erase(lines.begin()); - //translationZ = lines[0]; - //lines.erase(lines.begin()); } void MbD::ASMTTranslationalMotion::initMarkers() @@ -81,3 +67,17 @@ void MbD::ASMTTranslationalMotion::readTranslationZ(std::vector& li translationZ = readString(lines[0]); lines.erase(lines.begin()); } + +void MbD::ASMTTranslationalMotion::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "TranslationalMotion"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTTranslationalMotion::storeOnTimeSeries(std::ofstream& os) +{ + os << "TranslationalMotionSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTTranslationalMotion.h b/OndselSolver/ASMTTranslationalMotion.h index 5664ce0..f7c1e67 100644 --- a/OndselSolver/ASMTTranslationalMotion.h +++ b/OndselSolver/ASMTTranslationalMotion.h @@ -21,6 +21,8 @@ namespace MbD { std::shared_ptr mbdClassNew() override; void readMotionJoint(std::vector& lines); void readTranslationZ(std::vector& lines); + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; std::string motionJoint, translationZ; diff --git a/OndselSolver/ASMTUniversalJoint.cpp b/OndselSolver/ASMTUniversalJoint.cpp index ffbfb30..bfb03e3 100644 --- a/OndselSolver/ASMTUniversalJoint.cpp +++ b/OndselSolver/ASMTUniversalJoint.cpp @@ -5,7 +5,8 @@ * * * See LICENSE file for details about copyright. * ***************************************************************************/ - +#include + #include "ASMTUniversalJoint.h" #include "UniversalJoint.h" @@ -15,3 +16,17 @@ std::shared_ptr MbD::ASMTUniversalJoint::mbdClassNew() { return CREATE::With(); } + +void MbD::ASMTUniversalJoint::storeOnLevel(std::ofstream& os, int level) +{ + storeOnLevelString(os, level, "UniversalJoint"); + storeOnLevelString(os, level + 1, "Name"); + storeOnLevelString(os, level + 2, name); + ASMTItemIJ::storeOnLevel(os, level); +} + +void MbD::ASMTUniversalJoint::storeOnTimeSeries(std::ofstream& os) +{ + os << "UniversalJointSeries\t" << fullName("") << std::endl; + ASMTItemIJ::storeOnTimeSeries(os); +} diff --git a/OndselSolver/ASMTUniversalJoint.h b/OndselSolver/ASMTUniversalJoint.h index 87de82c..809a964 100644 --- a/OndselSolver/ASMTUniversalJoint.h +++ b/OndselSolver/ASMTUniversalJoint.h @@ -16,6 +16,8 @@ namespace MbD { // public: std::shared_ptr mbdClassNew() override; + void storeOnLevel(std::ofstream& os, int level) override; + void storeOnTimeSeries(std::ofstream& os) override; }; } diff --git a/OndselSolver/MBDynSystem.cpp b/OndselSolver/MBDynSystem.cpp index 6d20e83..0c24a3b 100644 --- a/OndselSolver/MBDynSystem.cpp +++ b/OndselSolver/MBDynSystem.cpp @@ -38,6 +38,7 @@ void MbD::MBDynSystem::runFile(const char* filename) system->setFilename(filename); system->parseMBDyn(statements); system->runKINEMATIC(); + system->outputFiles(); } void MbD::MBDynSystem::parseMBDyn(std::vector& lines) diff --git a/OndselSolver/OndselSolver.cpp b/OndselSolver/OndselSolver.cpp index 080d95c..9b88d4f 100644 --- a/OndselSolver/OndselSolver.cpp +++ b/OndselSolver/OndselSolver.cpp @@ -25,6 +25,7 @@ void runSpMat(); int main() { + ASMTAssembly::readWriteFile("piston.asmt"); MBDynSystem::runFile("MBDynCase.mbd"); //To be completed MBDynSystem::runFile("crank_slider.mbd"); //To be completed //ASMTAssembly::runSinglePendulumSuperSimplified(); //Mass is missing diff --git a/OndselSolver/assembly.asmt b/OndselSolver/assembly.asmt new file mode 100644 index 0000000..367dd3c --- /dev/null +++ b/OndselSolver/assembly.asmt @@ -0,0 +1,439 @@ +OndselSolver +Assembly + Notes + (Text string: 'CAD: Copyright (C) 2000-2004, Aik-Siong Koh, All Rights Reserved.The piston crank is the most common mechanism to convert rotary motion to reciprocating motion or vice versa. A crank connects to the ground with a revolute joint. Its other end is connected to the connecting rod. And the connecting rod is connected to the piston which slides along an axis on the ground. The crank is given rotary motion causing the piston to slides back and forth is a straight line. Units are SI units. Angles are in radians.If the instructions below are too brief, refer to the Notes in projectile.asm and circular.asm.To load the example for a quick look:Click File/Open/Assembly/ to get a dialog. Enter *.asm for a list of assemblies. Select piston.asm. To create the assembly from scratch:To create crank, connection rod and piston:Create an empty assembly and populate it with two rods (Assembly1Part1, Assembly1Part2) and one cylinder (Assembly1Part3). The rods have dimensions (1.0d, 0.2d, 0.1d) and (1.5d, 0.2d, 0.1d). The cylinder has radius (0.5d) and height (1.0d). Arrange them from bottom up away from the origin. To mark joint attachment points:On the ground, create a marker (Assembly1Marker1) at (0.0d, 0.0d, 0.0d) and another (Assembly1Marker2) at (3.0d, 0.0d, 0.0d). On the first rod, create a marker (Assembly1Part1Marker1) at (0.1d, 0.1d, 0.0d) and another (Assembly1Part1Marker2) at (0.9d, 0.1d, 0.0d) relative to the z-face. On the second rod, create a marker (Assembly1Part2Marker1) at (0.1d, 0.1d, -0.1d) and another (Assembly1Part2Marker2) at (1.4d, 0.1d, -0.1d) relative to the z-face. On the cylinder, create a marker (Assembly1Part3Marker1) at (0.0d, 0.0d, 0.0d) and another (Assembly1Part3Marker2) at (0.0d, 0.0d, -1.0d) relative to the z-face. Tilt the cylinder a little to get a good view of (Assembly1Part3Marker2). RightClick/Rotate/ over it to rotate the marker (90.0d) degrees about the x-axis.Tilt the cylinder upright to help the solver assemble the system later.To create the joints:Connect (Assembly1Marker1) to (Assembly1Part1Marker1) with revolute joint (Assembly1Joint1).Connect (Assembly1Part1Marker2) to (Assembly1Part2Marker1) with revolute joint (Assembly1Joint2).Connect (Assembly1Part2Marker2) to (Assembly1Part3Marker2) with revolute joint (Assembly1Joint3).Connect (Assembly1Marker2) to (Assembly1Part3Marker1) with translational joint (Assembly1Joint3).The translational joint keeps the marker z-axes parallel and colinear. Only relative translation along the z-axis is permitted.To apply motion to the crank:Apply rotation motion (Assembly1Motion1) to (Assembly1Joint1). Enter 2.0d*pi*time.The assembly is now ready for simulation, animation and plotting.' runs: (Core.RunArray runs: #(514 63 14 5 12 1 2 37 89 10 4 36 1 43 295 32 848 21 517 29 151) values: #(nil #underline #(#underline #bold) #underline #(#underline #bold) #underline nil #(#bold #large) nil #bold nil #(#bold #large) nil #bold nil #bold nil #bold nil #bold nil))) + Name + Assembly1 + Position3D + 0 0 0 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + Velocity3D + 0 -0 -0 + Omega3D + -2.280759219278673e-49 -5.777789833161707e-33 0 + RefPoints + RefPoint + Position3D + 0 0 0 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + Markers + Marker + Name + Marker1 + Position3D + 0 3 0 + RotationMatrix + 1 0 0 + 0 0 1 + 0 -1 0 + RefPoint + Position3D + 0 0 0 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + Markers + Marker + Name + Marker2 + Position3D + 0 0 0 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + RefCurves + RefSurfaces + Parts + Part + Name + Part1 + Position3D + -0.09999999999999981 -0.1000000000000002 -0.1 + RotationMatrix + 1 -1.532316259975744e-15 0 + 1.532316259975744e-15 1 0 + 0 0 1 + Velocity3D + 0.6283185307179635 -0.6283185307179577 -5.200010849845535e-33 + Omega3D + -5.152488066932315e-48 -5.777789833161708e-33 6.283185307179586 + FeatureOrder + PrincipalMassMarker + Name + MassMarker + Position3D + 0.5 0.1 0.05 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + Mass + 0.2 + MomentOfInertias + 0.00083333333333333 0.016833333333333 0.017333333333333 + Density + 10 + RefPoints + RefPoint + Position3D + 0 0 0.1 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + Markers + Marker + Name + Marker1 + Position3D + 0.1 0.1 0 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + RefPoint + Position3D + 0 0 0.1 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + Markers + Marker + Name + Marker2 + Position3D + 0.9 0.1 0 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + RefCurves + RefSurfaces + Part + Name + Part2 + Position3D + 0.9403611597381507 -0.01728423666122669 -1.387778780781446e-17 + RotationMatrix + -0.6153846153846151 -0.7882269819968931 -2.044836650113954e-17 + 0.7882269819968931 -0.6153846153846151 2.619167663271714e-17 + -3.322859638019256e-17 6.369432708140223e-25 1 + Velocity3D + 1.04429255306657e-16 5.026548245743669 -1.454113460077919e-17 + Omega3D + 2.185438651973779e-34 -1.417654624416976e-32 -6.884782783766256e-16 + FeatureOrder + PrincipalMassMarker + Name + MassMarker + Position3D + 0.75 0.1 0.05 + RotationMatrix + 1 -2.7755575615629e-16 0 + 2.7755575615629e-16 1 0 + 0 0 1 + Mass + 0.3 + MomentOfInertias + 0.00125 0.0565 0.05725 + Density + 10 + RefPoints + RefPoint + Position3D + 0 0 0.1 + RotationMatrix + 1 0 0 + 0 1 0 + 0 0 1 + Markers + Marker + Name + Marker1 + Position3D + 0.1 0.1 -0.1 + RotationMatrix + 1 3.5771870615405e-50 3.0814879110196e-33 + 3.5771870615405e-50 1 1.755680013548e-33 + 3.0814879110196e-33 1.755680013548e-33 1 + RefPoint + Position3D + -7.0256300777061e-17 -1.0408340855861e-17 0.1 + RotationMatrix + 1 1.7347234759768e-18 -6.9388939039072e-18 + 1.7347234759768e-18 1 0 + -6.9388939039072e-18 0 1 + Markers + Marker + Name + Marker2 + Position3D + 1.4 0.1 -0.1 + RotationMatrix + 1 -5.5511151231258e-17 2.1510571102112e-16 + 3.4181598826109e-49 1 4.1633363423443e-17 + -2.2898349882894e-16 -4.1633363423443e-17 1 + RefCurves + RefSurfaces + Part + Name + Part3 + Position3D + -7.041707996051818e-17 1.024695076595962 -5.785307988423487e-17 + RotationMatrix + 1 1.813675575821913e-16 2.220446049250313e-16 + -2.220446049250313e-16 5.739075131385976e-17 1 + 1.813675575821913e-16 -1 5.739075131385978e-17 + Velocity3D + 9.381384558082582e-16 5.026548245743669 3.98141370334613e-33 + Omega3D + -2.015594481729419e-33 -5.048654922470436e-33 -3.27654773676201e-49 + FeatureOrder + PrincipalMassMarker + Name + MassMarker + Position3D + -7.9328390680452e-18 2.9323172983667e-17 0.5 + RotationMatrix + 9.244463733058701e-33 1 -1.0785207688569e-32 + 9.9703461330478e-65 1.0785207688569e-32 1 + 1 -9.244463733058701e-33 0 + Mass + 7.6536686473018 + MomentOfInertias + 0.93243354610288 1.1040224936599 1.1040224936599 + Density + 10 + RefPoints + RefPoint + Position3D + 0 0 0 + RotationMatrix + 1 0 0 + 0 -1 0 + 0 0 -1 + Markers + Marker + Name + Marker1 + Position3D + 0 0 0 + RotationMatrix + 1 9.559235592913599e-33 0 + 0 -2.2204460492503e-16 1 + -9.559235592913599e-33 -1 -2.2204460492503e-16 + RefPoint + Position3D + 1.0408340855861e-17 5.5511151231258e-17 1 + RotationMatrix + 1 -6.9388939039072e-18 6.9388939039072e-18 + -6.9388939039072e-18 1 0 + 6.9388939039072e-18 0 1 + Markers + Marker + Name + Marker2 + Position3D + 0 0 0 + RotationMatrix + 1 -1.3877787807814e-17 1.3877787807814e-17 + -1.3877787807814e-17 1 0 + 1.3877787807814e-17 0 1 + RefCurves + RefSurfaces + KinematicIJs + ConstraintSets + Joints + RevoluteJoint + Name + Joint1 + MarkerI + /Assembly1/Marker2 + MarkerJ + /Assembly1/Part1/Marker1 + RevoluteJoint + Name + Joint2 + MarkerI + /Assembly1/Part1/Marker2 + MarkerJ + /Assembly1/Part2/Marker1 + RevoluteJoint + Name + Joint3 + MarkerI + /Assembly1/Part2/Marker2 + MarkerJ + /Assembly1/Part3/Marker1 + CylindricalJoint + Name + Joint4 + MarkerI + /Assembly1/Part3/Marker2 + MarkerJ + /Assembly1/Marker1 + Motions + RotationalMotion + Name + Motion1 + MarkerI + /Assembly1/Marker2 + MarkerJ + /Assembly1/Part1/Marker1 + MotionJoint + /Assembly1/Joint1 + RotationZ + 2.0d*pi*time + GeneralConstraintSets + ForceTorques + ConstantGravity + 0 -9.81 0 + SimulationParameters + tstart + 0 + tend + 1 + hmin + 1e-09 + hmax + 1 + hout + 0.04 + errorTol + 1e-06 + AnimationParameters + nframe + 26 + icurrent + 1 + istart + 1 + iend + 26 + isForward + true + framesPerSecond + 30 +TimeSeries +Number Input 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 +Time Input 0 0.04 0.08 0.12 0.16 0.2 0.24 0.28 0.32 0.36 0.4 0.44 0.48 0.52 0.5600000000000001 0.6 0.64 0.68 0.72 0.76 0.8 0.84 0.88 0.92 0.96 1 0 0 0.04 0.08 0.12 0.16 0.2 0.24 0.28 0.32 0.36 0.4 0.4399999999999999 0.4799999999999999 0.5199999999999999 0.5599999999999999 0.6 0.64 0.68 0.7200000000000001 0.7600000000000001 0.8000000000000002 0.8400000000000002 0.8800000000000002 0.9200000000000003 0.9600000000000003 1 +AssemblySeries /Assembly1 +X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Bryantx -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 +Bryanty 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Bryantz -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 +VX 0 -0 -0 -0 -0 -0 2.220446049250313e-16 6.661338147750939e-16 4.440892098500626e-16 2.220446049250313e-16 -1.110223024625157e-16 1.110223024625157e-16 -5.551115123125783e-17 -2.775557561562891e-17 2.775557561562891e-17 -0 -0 1.110223024625157e-16 -0 -0 -1.332267629550188e-15 -0 2.220446049250313e-16 -0 -0 -0 0 +VY 0 -0 -4.85722573273506e-17 1.665334536937735e-16 -0 1.110223024625157e-16 -0 -0 -4.440892098500626e-16 -0 -0 -0 0 -0 -0 -0 -0 -0 0 8.881784197001252e-16 -2.220446049250313e-16 -0 -1.110223024625157e-16 -5.551115123125783e-17 -0 1.942890293094024e-16 -0 +VZ 0 0 -0 0 0 0 -0 0 -0 -0 0 -0 -0 0 -0 0 0 0 -0 -0 -0 0 -0 -0 0 0 -0 +OmegaX 0 -6.361697919012616e-34 6.419766481290786e-34 -0 -5.135813185032629e-34 -5.135813185032629e-34 5.135813185032629e-34 -4.81482486096809e-35 6.419766481290786e-35 0 -1.283953296258157e-33 2.567906592516314e-34 1.027162637006526e-33 -1.925929944387236e-34 6.419766481290786e-35 -5.858036914177842e-34 -2.567906592516314e-34 -1.283953296258157e-34 3.081487911019577e-33 1.027162637006526e-33 -2.567906592516314e-34 -1.283953296258157e-34 2.567906592516314e-34 6.419766481290786e-35 -2.567906592516314e-34 -1.283953296258157e-34 -2.280759219278673e-49 +OmegaY 0 0 0 0 0 0 0 3.015215376890914e-36 1.766004266766101e-18 0 0 0 0 0 0 0 0 0 -1.917187899332789e-17 0 -2.412172301512731e-35 0 0 0 0 0 -5.777789833161707e-33 +OmegaZ 0 0 -8.881784197001252e-16 -8.88178419700125e-16 0 0 8.881784197001256e-16 8.881784197001252e-16 0 8.881784197001254e-16 8.881784197001252e-16 0 -1.77635683940025e-15 1.776356839400251e-15 0 -8.881784197001252e-16 -8.881784197001252e-16 -8.881784197001252e-16 -0 0 0 -8.881784197001252e-16 -8.881784197001252e-16 1.77635683940025e-15 8.881784197001252e-16 -8.881784197001254e-16 0 +AX 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +AY 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +AZ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +AlphaX 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +AlphaY 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +AlphaZ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +PartSeries /Assembly1/Part1 +X -0.09999999999999998 -0.09999999999999998 -0.07198932739637764 -0.03945530059421487 -0.004442152149272349 0.03085011305230187 0.06420395219202059 0.09352362088989592 0.1169668565314414 0.1330606344031092 0.1407937232524479 0.1396802246667421 0.129790103857293 0.1117447934878782 0.0866781467750174 0.05616519332035735 0.02212317420824744 -0.01330892530271 -0.04790477609009472 -0.07949059361429649 -0.1060817247957585 -0.1260073510670102 -0.1380154720481013 -0.1413515733350101 -0.1358060354145578 -0.1217273048293483 -0.09999999999999981 +Y -0.1 -0.1 -0.1217273048293486 -0.1358060354145579 -0.14135157333501 -0.1380154720481012 -0.12600735106701 -0.1060817247957584 -0.07949059361429639 -0.04790477609009464 -0.01330892530270988 0.02212317420824741 0.05616519332035723 0.08667814677501727 0.1117447934878781 0.1297901038572929 0.1396802246667421 0.1407937232524479 0.1330606344031091 0.1169668565314413 0.0935236208898958 0.06420395219202057 0.03085011305230168 -0.004442152149272516 -0.03945530059421506 -0.07198932739637789 -0.1000000000000002 +Z -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.09999999999999999 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.09999999999999999 -0.1 -0.1 -0.1 -0.1 -0.09999999999999999 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.09999999999999999 -0.1 +Bryantx -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 +Bryanty 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +Bryantz -0 -0 0.2513274122871835 0.5026548245743669 0.7539822368615502 1.005309649148734 1.256637061435917 1.507964473723101 1.759291886010284 2.010619298297468 2.261946710584651 2.513274122871834 2.764601535159017 3.015928947446201 -3.015928947446203 -2.764601535159019 -2.513274122871834 -2.261946710584651 -2.010619298297467 -1.759291886010284 -1.5079644737231 -1.256637061435917 -1.005309649148733 -0.7539822368615489 -0.5026548245743653 -0.2513274122871814 1.532316259975744e-15 +VX 0.62831853071796 0.6283185307179586 0.7648352131863337 0.8532944863430607 0.8881381287252532 0.8671767861360844 0.7917275368208565 0.6665311345969789 0.4994541298563311 0.3009945852730107 0.083622443916338 -0.1390040031334343 -0.3528963174453695 -0.5446148582703437 -0.7021132445968531 -0.8154952735734553 -0.8776367353296173 -0.8846330532828888 -0.8360446230456091 -0.7349244343853338 -0.587626240649628 -0.4034053290757647 -0.1938369770550512 0.02791086511656515 0.2479049649839263 0.4523222841706624 0.6283185307179635 +VY -0.62831853071796 -0.6283185307179586 -0.4523222841706609 -0.2479049649839249 -0.02791086511656404 0.1938369770550521 0.4034053290757647 0.5876262406496275 0.7349244343853358 0.8360446230456098 0.8846330532828901 0.8776367353296175 0.8154952735734562 0.7021132445968532 0.5446148582703443 0.3528963174453703 0.1390040031334352 -0.083622443916338 -0.3009945852730114 -0.499454129856331 -0.6665311345969782 -0.7917275368208583 -0.8671767861360844 -0.8881381287252532 -0.85329448634306 -0.7648352131863314 -0.6283185307179577 +VZ 0 -3.017870931829451e-33 -1.387778780781446e-17 2.775557561562891e-17 2.775557561562891e-17 5.551115123125783e-17 -2.233466491649814e-17 -2.775557561562891e-17 -1.110223024625157e-16 1.583115290621954e-17 4.317042711097386e-17 1.387778780781446e-17 1.875877488744077e-17 5.789755778960671e-17 -2.42861286636753e-17 -1.420481781239377e-17 2.595041677762626e-17 3.958604911635814e-17 3.380324590738706e-18 -1.110223024625157e-16 0 -8.328274724744728e-18 1.908195823574488e-17 2.775557561562891e-17 -4.336808689942017e-18 3.341757513205361e-35 -5.200010849845535e-33 +OmegaX 0 -6.361697919012615e-34 7.591463691480879e-34 8.904787357271287e-35 -2.373898912810666e-34 -6.822053795685427e-35 -1.428710476264353e-17 0 0 2.090222117213549e-17 -1.136191134057863e-17 1.742019999686053e-34 4.982976297435501e-18 3.52409946535767e-19 1.918336677957794e-34 -1.673814286729189e-18 -6.877847605861998e-18 2.00131729612741e-17 9.62623795101104e-19 0 0 -1.666166896306082e-17 -1.464675473791141e-17 1.029992007540376e-35 -4.178547040511614e-18 -2.832766873546822e-34 -5.152488066932315e-48 +OmegaY 0 0 1.861804551072494e-34 5.29562632980658e-35 -2.44452583868873e-34 -2.180604904031775e-34 -3.054579528615144e-17 0 0 1.106873584132126e-17 5.346509643176714e-18 -5.660166091296401e-35 1.702793760795528e-17 2.154815688559504e-18 1.206915137741857e-35 -3.192971518127856e-19 -2.234748154832902e-18 -1.177096148803234e-17 -2.372278912204797e-17 0 0 -3.685905609489211e-18 -9.295113203074784e-18 2.601462853482028e-35 -7.600748850136941e-18 8.092515091336505e-35 -5.777789833161708e-33 +OmegaZ 6.2831853071796 6.283185307179586 6.283185307179585 6.283185307179585 6.283185307179587 6.283185307179586 6.283185307179584 6.283185307179586 6.283185307179588 6.283185307179586 6.283185307179588 6.283185307179588 6.283185307179586 6.283185307179585 6.283185307179585 6.283185307179585 6.283185307179585 6.283185307179585 6.283185307179584 6.283185307179586 6.283185307179586 6.283185307179586 6.283185307179585 6.283185307179588 6.283185307179587 6.283185307179584 6.283185307179586 +AX 19.7392088021788 3.947841760435743 2.842024730011005 1.557632833563869 0.1753691376110691 -1.217913646220408 -2.534670436486791 -3.692164561362915 -4.617666408017215 -5.253023291666671 -5.558313402632471 -5.514354240464117 -5.123907920991138 -4.411507622427125 -3.421916075555918 -2.217312956730531 -0.8733879101271427 0.5254153109655828 1.891204755728 3.138162850323466 4.18793863167747 4.974570826642302 5.448632441377459 5.580336441152483 5.361407379288071 4.805601373905919 3.94784176043574 +AY 3.947841760435761 3.947841760435743 4.805601373905938 5.361407379288073 5.580336441152484 5.448632441377462 4.974570826642283 4.187938631677472 3.138162850323466 1.891204755727991 0.5254153109655846 -0.8733879101271391 -2.217312956730529 -3.421916075555917 -4.411507622427133 -5.12390792099113 -5.514354240464108 -5.558313402632463 -5.253023291666661 -4.617666408017195 -3.69216456136291 -2.534670436486792 -1.217913646220406 0.1753691376110726 1.557632833563876 2.842024730011016 3.947841760435759 +AZ 0 3.997172689345502e-33 -6.66133814775094e-17 6.661338147750938e-17 -1.110223024625157e-16 -4.440892098500625e-17 2.664535259100375e-16 6.66133814775094e-17 -1.048374749378204e-17 1.776356839400251e-16 -1.848892746611746e-32 4.440892098500628e-17 -6.661338147750941e-17 -1.110223024625157e-16 3.900741356895414e-34 4.440892098500625e-17 -1.110223024625157e-16 1.110223024625157e-16 -7.484488415731522e-17 2.220446049250313e-16 -1.110223024625156e-16 1.232595164407831e-32 1.554312234475219e-16 2.220446049250313e-16 4.440892098500625e-17 -6.661338147750943e-17 7.260584837538701e-33 +AlphaX 0 -3.920699046199156e-65 -1.169806300013878e-33 -3.327340154775405e-34 1.53594088326699e-33 1.37011446937762e-33 1.919248921380622e-16 3.789031390812581e-35 2.219226412272245e-17 -6.954691840724179e-17 -3.35931108347019e-17 3.556387242102966e-34 -1.069896873898753e-16 -1.353910627403714e-17 -7.583271460472264e-35 2.006203172894386e-18 1.404133677169277e-17 7.395913227298154e-17 -9.186625674683388e-17 5.473822126268817e-48 -3.031225112650068e-34 2.315922796919343e-17 5.840291870613044e-17 -1.634547317817177e-34 4.775691349874256e-17 -5.084677192001458e-34 -3.630292418769323e-32 +AlphaY 0 3.997172689345503e-33 -3.297459173524057e-33 5.595042908676548e-34 4.962288511953085e-33 6.025210907184846e-33 -8.97685267267773e-17 6.050487364615537e-34 7.703719777548943e-33 1.313325289561798e-16 -7.138899439660076e-17 -2.132383147777581e-33 3.130896345807087e-17 2.21425699817748e-18 3.985948343014056e-34 -1.051688533332411e-17 -4.321479102217239e-17 1.257464743003211e-16 6.048343685720677e-18 -1.290770637784648e-32 3.22692659446162e-33 -1.046883536217938e-16 -9.202827416710794e-17 -7.420153421325042e-34 -2.625458537030131e-17 -1.664166226226343e-34 -5.732173126314459e-47 +AlphaZ 0 3.872311913353945e-31 3.108624468950438e-15 -7.105427357601002e-15 -2.664535259100376e-15 0 7.105427357601002e-15 5.329070518200751e-15 5.329070518200751e-15 -8.881784197001252e-15 -7.105427357601002e-15 0 -7.993605777301127e-15 -6.439293542825908e-15 2.442490654175344e-15 3.108624468950438e-15 2.664535259100376e-15 -8.881784197001252e-15 -5.329070518200751e-15 1.953992523340276e-14 5.329070518200751e-15 -1.77635683940025e-15 -1.77635683940025e-15 4.440892098500626e-15 0 -4.440892098500626e-16 3.024671060663479e-14 +PartSeries /Assembly1/Part2 +X 0.9403611597381493 0.9403611597381509 0.914766291132654 0.8391854802858385 0.7174079710761005 0.556042586100814 0.3644052538268385 0.154021765992411 -0.06210327235701261 -0.270318937866617 -0.4571798839182563 -0.6102733208965323 -0.7190247089112134 -0.775545824094768 -0.7755458240947679 -0.7190247089112135 -0.6102733208965327 -0.4571798839182558 -0.2703189378666166 -0.06210327235701221 0.1540217659924113 0.364405253826839 0.5560425861008149 0.7174079710761014 0.8391854802858392 0.9147662911326546 0.9403611597381507 +Y -0.0172842366612278 -0.01728423666122769 0.1782623827179662 0.3551159328821772 0.5031238312866151 0.6140291035121795 0.6816864155553899 0.7023600963157265 0.6749657056300636 0.6011535414716734 0.4851991029862507 0.3337166048459443 0.1552691333159549 -0.03998577488253652 -0.2405189485854234 -0.4337301509795298 -0.6067397988220129 -0.7476220854550122 -0.8465697424739582 -0.8966938955358382 -0.8944826691695082 -0.8400040105168556 -0.7368955772910444 -0.5921515381992861 -0.4156899456805661 -0.2196414367457998 -0.01728423666122669 +Z -4.85722573273506e-17 6.938893903907228e-18 -2.081668171172169e-17 -6.938893903907228e-18 0 1.387778780781446e-17 0 -2.081668171172169e-17 -6.938893903907228e-18 0 -1.387778780781446e-17 -6.938893903907228e-18 0 -2.081668171172169e-17 -4.163336342344337e-17 -1.387778780781446e-17 -6.938893903907228e-18 0 -1.387778780781446e-17 0 0 6.938893903907228e-18 -1.387778780781446e-17 0 0 -1.387778780781446e-17 -1.387778780781446e-17 +Bryantx -0 -2.737647592764244e-17 -2.245003982853705e-17 -1.21163464130855e-17 -1.593533568407878e-18 1.091632589510396e-17 1.861263384373932e-17 2.820386111760164e-17 2.883955006042913e-17 2.629293639173309e-17 2.104885501412867e-17 1.515015045559582e-17 6.803545223698929e-18 4.29566864480917e-18 1.37547491417885e-18 3.267956425393566e-18 6.989563988574559e-18 8.950570620072511e-18 1.20712446161005e-17 1.179430127930618e-17 6.759222141647515e-18 2.030541118218165e-18 -5.434884749832413e-18 -1.416610337193271e-17 -2.49481707944768e-17 -2.721568521261597e-17 -2.619167663271713e-17 +Bryanty 0 -2.137336388388802e-17 -1.666533581023199e-17 -7.758760537183257e-18 -7.998491929460336e-19 3.812786327322522e-18 3.605246090794164e-18 1.090620703964344e-18 -3.347866407657844e-18 -7.138625592830996e-18 -8.976036641281893e-18 -8.697055272708893e-18 -4.746518192658685e-18 -3.311454286418882e-18 -1.060329046242655e-18 -2.279901709350672e-18 -4.012410588691088e-18 -3.816865561731789e-18 -3.277385776107684e-18 -1.369152603475808e-18 2.613737027764124e-19 3.933135144209822e-19 -1.898262700006055e-18 -7.110453515535771e-18 -1.597568096506204e-17 -2.020301725568919e-17 -2.044836650113953e-17 +Bryantz 2.233670150445037 2.233670150445032 2.209370488787084 2.140361182509803 2.035990197028543 1.906824026350293 1.762125828749485 1.609446268449569 1.455227662246161 1.305683633874584 1.167708110101882 1.049670759329176 0.9616468233703962 0.9140640289170913 0.9140640289170918 0.9616468233703964 1.049670759329175 1.167708110101882 1.305683633874584 1.455227662246162 1.609446268449569 1.762125828749485 1.906824026350293 2.035990197028544 2.140361182509803 2.209370488787086 2.233670150445032 +VX -3.316411840237801e-34 -4.144919830384479e-17 -1.274828709759882 -2.488550526455364 -3.572739723337833 -4.456494893866715 -5.077035150887552 -5.387601843992237 -5.361413507940203 -4.993002799636938 -4.297993270341443 -3.312269477625019 -2.092036689495353 -0.7158123405996735 0.7158123405996653 2.092036689495346 3.312269477625017 4.297993270341443 4.993002799636939 5.361413507940201 5.387601843992235 5.077035150887554 4.456494893866711 3.572739723337829 2.488550526455356 1.274828709759872 1.04429255306657e-16 +VY 5.0265482457437 5.026548245743669 4.701091334500139 4.099242848567291 3.266656020511151 2.252867530847137 1.114326139268133 -0.08519723520269296 -1.277599545137349 -2.395070620616329 -3.37492069265966 -4.163367624824957 -4.716601779786501 -4.998015700068393 -4.975809122869192 -4.630530948364106 -3.96975828287946 -3.033164182272753 -1.885329681564466 -0.606162891094686 0.7164363867815016 1.992251522692617 3.133850941801124 4.061735930223389 4.710352762048595 5.036168644355818 5.026548245743669 +VZ -3.974830726464196e-33 7.705381834576423e-18 4.279324382588806e-18 1.921584583027033e-17 2.659742912515388e-17 6.45246691989675e-18 2.333257211113835e-17 8.630531901473238e-18 -3.053910038261469e-17 9.521240931480956e-18 -5.023347950920435e-18 9.601278311273218e-18 2.357937107474973e-17 5.320648350292709e-18 -1.310031222049693e-17 2.149177244168219e-17 1.163321049163123e-17 -1.045901945793489e-17 4.341758509857014e-17 -3.036673805027917e-17 2.629359157163507e-18 -6.092571989685439e-18 1.104523791023485e-17 -1.740445996583321e-17 -5.388822421028883e-18 -9.540137396614631e-18 -1.454113460077919e-17 +OmegaX 4.177425103292601e-33 -8.969120650030006e-33 1.081632668291512e-17 1.168081089073292e-17 3.776605853310244e-19 -1.163368230904207e-17 -1.197924635859316e-17 -2.378780772416525e-18 1.310199900732063e-17 2.07367674918833e-17 1.589194637490073e-17 1.341949545869414e-17 4.516641210396458e-18 5.306339757550669e-19 -3.509834153257269e-19 -4.196018118171287e-18 -4.624544168790445e-18 -1.076280136437402e-17 -1.481315597714609e-17 -5.430569894664151e-18 2.752095101650789e-19 2.765345019504176e-18 -2.163182078554213e-18 -9.785435447432254e-18 -1.699181093713169e-17 -1.111889295360563e-17 2.185438651973779e-34 +OmegaY 3.2613995704322e-33 1.915189848417104e-32 -8.876712215776529e-18 -2.017386747557449e-17 4.610037375407426e-18 2.028812161854959e-17 1.732173082890348e-17 5.637545591883054e-17 4.395595133268684e-17 5.283080959219327e-17 4.042524945718039e-17 2.776173341906112e-17 1.858564163629445e-17 3.423482030702383e-18 1.300561314445268e-18 -4.280027269595594e-19 -1.395404751321328e-17 -8.116748416461529e-18 -3.478502857318765e-17 -1.098449586749414e-17 -1.753986438625035e-17 -3.868476961652391e-18 4.546051953118793e-18 1.848859036267753e-17 2.794280037779489e-17 1.237561613817536e-17 -1.417654624416976e-32 +OmegaZ -3.182800078699101e-34 1.168339497344748e-15 -1.19756211345592 -2.211920192303964 -2.961564966115344 -3.458060357205636 -3.745682056037213 -3.861829846388225 -3.823593663518196 -3.625237164830134 -3.238826702955576 -2.620572586749856 -1.735545370123934 -0.6118884148019538 0.6118884148019472 1.735545370123922 2.62057258674985 3.238826702955576 3.625237164830135 3.823593663518191 3.861829846388222 3.745682056037215 3.458060357205632 2.961564966115346 2.21192019230396 1.197562113455914 -6.884782783766256e-16 +AX -1.295177143359768e-65 -32.11546178246253 -31.37544345857777 -29.02279642555415 -24.88626246965602 -19.03662429882354 -11.79401399087025 -3.622230912495755 4.954287402443036 13.40071256071963 21.20015363832115 27.85286312878128 32.83233574939136 35.55474996755233 35.55474996755235 32.83233574939138 27.85286312878127 21.20015363832111 13.40071256071959 4.954287402443068 -3.62223091249577 -11.79401399087026 -19.03662429882359 -24.88626246965606 -29.02279642555419 -31.37544345857777 -32.11546178246254 +AY 1.671011241673164e-65 -4.326154467713573 -11.77559898123401 -18.12633350896699 -23.29840172341832 -27.1559544907543 -29.50402978544076 -30.18636987650221 -29.14912647721922 -26.46153919981208 -22.3063080696354 -16.93484160124645 -10.57615770925685 -3.358852933576924 4.557879441392765 12.67660200482793 20.1928890414493 26.363521639149 30.69228517934528 32.89750758950612 32.85445566782087 30.56990031959193 26.17641421002862 19.94133670491298 12.30386285682661 3.933014169925379 -4.326154467713577 +AZ 1.235699161928302e-66 -5.121774227827065e-16 -3.917057383441297e-16 -2.186297566372609e-16 1.112433885116104e-16 1.699911775391568e-16 5.613737633184854e-16 3.318604217899091e-16 1.661709912707993e-16 1.827586898809985e-16 1.763437910301126e-16 6.889869246834346e-18 -1.611504665529588e-16 -2.85382353083445e-16 -8.278797381008928e-17 -5.046279535466829e-17 -1.993760206880225e-17 2.016961162763366e-16 1.759754575982014e-16 1.989546072609489e-16 2.222545510062945e-16 1.824599904912303e-16 9.158663354417957e-17 -1.903023579887223e-17 -1.949606089130855e-16 -3.149157976249666e-16 -4.360229789372764e-16 +AlphaX 0 3.454484463720294e-15 2.686051515296129e-15 1.239580283868917e-15 -2.087381598954902e-16 -1.27456172868216e-15 -1.866897562605547e-15 -2.093152148728033e-15 -1.916851836299748e-15 -1.639041196493627e-15 -1.149487383655572e-15 -2.534117227360124e-16 7.859401422447845e-16 1.669016521549698e-15 1.745843821047856e-15 1.108189371888991e-15 5.803350313338059e-17 -9.212549251824182e-16 -1.608979510335812e-15 -1.882167418884763e-15 -1.904513274705583e-15 -1.463623982555034e-15 -6.204449904046963e-16 5.448426456622336e-16 1.954195802207584e-15 3.115612293210523e-15 3.436850868272252e-15 +AlphaY 0 2.696985312115368e-15 1.988874474412138e-15 7.965087104286453e-16 -1.127441852151431e-16 -4.294451993289467e-16 -7.345552802511585e-16 -8.017283403359292e-17 1.945095748242397e-16 7.764917807462778e-16 2.347517810374965e-16 1.520697135284443e-16 -6.442535641840416e-16 -1.303372089997312e-15 -1.346668108888457e-15 -7.930942773159443e-16 -6.542606228516937e-17 5.216274057448749e-16 3.913251818354832e-16 2.026045283186248e-16 -7.520248527871214e-17 -3.641323254270712e-16 -3.197963930850258e-16 2.719785169466564e-16 1.17971763162135e-15 2.310498430317133e-15 2.683218410448092e-15 +AlphaZ 0 -30.82159249598807 -28.241394635846 -22.14720024264387 -15.41317361665602 -9.612096703780395 -4.929303691441842 -0.9498967899367488 2.885728149674806 7.150337359348468 12.36177039274133 18.72059407275699 25.44084758946827 30.14458435501739 30.14458435501739 25.44084758946831 18.72059407275699 12.3617703927413 7.150337359348429 2.885728149674829 -0.9498967899367687 -4.929303691441853 -9.612096703780439 -15.41317361665605 -22.14720024264393 -28.24139463584604 -30.82159249598805 +PartSeries /Assembly1/Part3 +X -1.044261215915049e-16 -7.041707813776303e-17 -7.949678397688364e-17 -8.938042158649289e-17 -9.892750573581356e-17 -1.069737016852234e-16 -1.125678651499232e-16 -1.150794954752239e-16 -1.142346488426739e-16 -1.10124833519663e-16 -1.032044223170672e-16 -9.427175849478973e-17 -8.44050555308331e-17 -7.479526273498796e-17 -6.644639291757669e-17 -5.988303497880709e-17 -5.51173953761299e-17 -5.187792971364739e-17 -4.985124386562264e-17 -4.880117345170047e-17 -4.859756025442449e-17 -4.921477459210122e-17 -5.073016346652134e-17 -5.332750817355984e-17 -5.728917991595011e-17 -6.293070871935065e-17 -7.041707996051818e-17 +Y 1.024695076596 1.02469507659596 1.24278228981572 1.480179366506 1.709492681612448 1.902755855947434 2.037123175785611 2.097450521915651 2.077157983301907 1.97844351523561 1.812220788468628 1.597665367178468 1.360675068250384 1.129855528341609 0.9293223546387235 0.7716757839548993 0.6572089635105103 0.5793996000273653 0.5307202312899781 0.5054983821360046 0.5006077564304161 0.5154327497133651 0.5518311751442102 0.6142173121265466 0.7093734879432563 0.844878470351953 1.024695076595962 +Z -2.0284539354805e-17 -5.55127549760977e-17 -4.511305236226578e-17 -3.123259360054837e-17 -1.299122922675906e-17 4.68284780078228e-19 1.294605347403564e-17 1.59381133057e-17 1.923872344977828e-17 1.818882934466386e-17 1.360720316352807e-17 5.121495712256597e-18 -7.2081039443815e-19 -1.191768604424567e-17 -1.31012102382213e-17 -1.304616427546337e-17 -9.553083211689261e-18 -6.006795919038703e-19 4.139410803152944e-19 -1.616488840392927e-20 -4.782311530143049e-19 -1.312272959239267e-17 -2.726985247064476e-17 -4.11349381991122e-17 -4.583341659835943e-17 -5.76278282318125e-17 -5.785307988423487e-17 +Bryantx -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 -1.570796326794897 +Bryanty 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 2.220446049250313e-16 +Bryantz -1.0785207688569e-32 -1.822925609730439e-16 -1.741727677690481e-16 -1.550769148183692e-16 -1.313918448192965e-16 -1.04132939646408e-16 -7.685430130163072e-17 -4.855528262726502e-17 -2.0699464887145e-17 7.22601512374138e-18 3.438305426032599e-17 5.883324689456516e-17 8.02153422523481e-17 9.080779980706066e-17 9.305892244607789e-17 8.268195591533804e-17 6.351789092505877e-17 3.954222528868558e-17 1.108725492809423e-17 -1.872075108975573e-17 -4.938452963404358e-17 -8.006623388967137e-17 -1.098439886923186e-16 -1.377024493132123e-16 -1.632938365229582e-16 -1.777104520478661e-16 -1.813675575821913e-16 +VX -1.6491143091194e-30 -1.320477840074985e-15 2.905703382397549e-15 6.562813796605072e-16 8.538315048488385e-35 1.095668412038743e-15 8.237608145022391e-16 3.552713678800501e-15 2.879893113403146e-15 2.997638475690497e-15 -2.943530431536243e-15 1.159602903685689e-15 7.062954688926255e-15 9.455947528701012e-16 -1.891189505740204e-15 9.792393091328979e-35 5.798014518428439e-15 2.943530431536245e-15 -4.32962871393984e-15 2.423380393929398e-15 -5.401480768378232e-17 -2.785795160365988e-16 1.075603710887482e-15 -5.329070518200756e-15 -3.505240305423234e-15 -5.393112810435475e-15 9.381384558082582e-16 +VY 5.0265482457437 5.026548245743668 5.796580787427193 5.955454157499838 5.391306334062021 4.175696354760463 2.479272359653009 0.5096086177002229 -1.515057223805368 -3.375040880527796 -4.855647108748238 -5.762633159991207 -5.964501784342067 -5.472563204980015 -4.501261617957575 -3.382630943808548 -2.370492747713212 -1.552437766184176 -0.9053594216529985 -0.36870521242667 0.1216305338785856 0.6273053023077393 1.211022117887797 1.937085616672516 2.85414145311605 3.940679191428769 5.026548245743669 +VZ -7.121410028206799e-33 -1.778985230616211e-33 -1.471563161675209e-18 -4.711339614480997e-18 1.041106569481545e-18 5.531492667506762e-18 5.033143538121358e-18 2.462921959035837e-19 -6.18447986821699e-18 -7.965241495199993e-18 -1.610667563645991e-18 -2.838133376313271e-18 -6.520289895500982e-19 9.023190515268243e-19 5.504251646731461e-20 4.941490981265588e-18 -1.482664425907586e-18 1.109050918079139e-17 2.190869861938094e-17 7.017103608389864e-18 5.735627141647336e-19 -5.040519429160835e-18 -2.739430938201885e-18 -1.774066968813188e-18 -1.549963239036809e-18 -2.108336142583963e-18 3.98141370334613e-33 +OmegaX 4.1774251032926e-33 -6.55717218911017e-35 8.374392957380832e-19 3.099931341009523e-18 -8.067420886712803e-19 -5.041259684537232e-18 -5.227193563650155e-18 -2.728849795873088e-19 6.701558616007658e-18 7.797162089414058e-18 1.356032794654991e-18 2.023863142139531e-18 3.977423736575542e-19 -4.824862812479262e-19 -2.658188568878418e-20 -2.217581690170697e-18 6.32862428963898e-19 -4.581718312909793e-18 -8.872505617630469e-18 -2.81302828514439e-18 -2.294808730563963e-19 2.028731332822378e-18 1.118971416672318e-18 7.435995649689649e-19 6.766547190816817e-19 9.782910678490944e-19 -2.015594481729419e-33 +OmegaY 3.2613995704322e-33 1.018237677662503e-33 4.565946356339673e-18 -6.773671831547729e-18 6.96971396967019e-18 1.413464706451426e-18 -1.753677347313919e-17 1.916199595159363e-18 -1.117940910219946e-17 5.17174450228052e-18 6.338452613980227e-18 7.910698934525999e-18 1.268171092958471e-17 2.109247091909012e-18 1.721379896863637e-18 2.4078405949697e-18 -4.795717622317074e-18 6.377925149028722e-18 -1.290446626916604e-17 1.156381195109567e-17 -4.4883814837591e-18 -6.559624637462693e-20 -4.851027796569665e-18 -2.488327363664663e-18 3.511190071193033e-19 -3.920620613010258e-18 -5.048654922470436e-33 +OmegaZ 4.7241180434735e-49 2.263889368321221e-50 2.036602951021264e-34 4.706027263946844e-35 1.31982624464979e-34 -2.270276153707212e-34 -5.884829601504547e-34 3.538368458373107e-35 -1.503447397362483e-34 6.630301879463552e-35 8.849562147206428e-35 8.259112599833069e-35 2.015508774665848e-34 5.993165033085055e-35 2.975599315547412e-35 1.287171822855593e-34 -8.669262582472661e-35 1.645088692676566e-34 -9.478325805901336e-35 1.023735538931261e-34 -5.59389653050746e-35 8.031042076622841e-35 -2.055882092694356e-35 7.976958662975437e-37 6.30140807139875e-35 -1.598556010827311e-35 -3.27654773676201e-49 +AX -6.812126218695586e-66 4.961732038475698e-15 2.521786378228209e-15 -1.015235077023056e-15 -4.592377161599154e-15 -7.490115357686086e-15 -9.40231939159177e-15 -1.023164840500096e-14 -9.954701097749729e-15 -8.578243119109664e-15 -6.152586148870166e-15 -2.855465498280036e-15 8.221399689251702e-16 3.940376031059123e-15 5.533443645509853e-15 5.501244515168577e-15 4.615670632572804e-15 3.641142606574001e-15 2.922702264406403e-15 2.530814217873633e-15 2.453925996935757e-15 2.686232802705524e-15 3.241846436019001e-15 4.108665602620712e-15 5.108170140638827e-15 5.682797979197349e-15 4.961732038475731e-15 +AY 8.725440246809593e-66 24.65727399679046 12.53199028225812 -5.045199795392535 -22.8217689089354 -37.22204770630297 -46.72472508512102 -50.84606669699109 -49.46978003245269 -42.62948691278975 -30.575210689563 -14.1902050803015 4.085615732632046 19.58165630364406 27.49838867861375 27.3383754467169 22.93752556239431 18.09461901922138 14.52433746636758 12.5768540342727 12.19475884733202 13.34920501991167 16.11032099448002 20.41796951939593 25.38499657040116 28.24060343341759 24.65727399679042 +AZ -1.593979605749022e-81 5.660569155178314e-15 4.254312911230354e-15 1.926010087743035e-15 -2.673368456848086e-16 -1.744780565688947e-15 -2.394017782315478e-15 -2.893984469626539e-15 -2.871486964477058e-15 -2.569176724823137e-15 -1.704229432744666e-15 -5.276809236924563e-16 1.212512983392032e-15 2.57512248043019e-15 2.960227552025962e-15 1.788466027929746e-15 7.256008492244876e-17 -1.266314508153187e-15 -2.284171529677635e-15 -2.548432869431573e-15 -2.460564628717781e-15 -1.824907025352505e-15 -8.208404639304818e-16 9.257163024648484e-16 3.083635267643644e-15 5.099767625531277e-15 5.668298917592686e-15 +AlphaX 0 -2.164062565640926e-15 -2.007139092732273e-15 -1.432433382653021e-15 -7.382997739100376e-16 -1.499683573030806e-16 3.142430093684469e-16 7.360460206517098e-16 9.825779455929464e-16 9.388488510828998e-16 5.155759522202211e-16 -3.948328048926396e-18 -6.570468401083904e-16 -9.966164944757403e-16 -9.894456748315872e-16 -4.184142209075707e-16 2.396555402171494e-16 7.023012705668505e-16 1.062787506613491e-15 1.134682180482173e-15 1.093740299667789e-15 8.839413707236886e-16 5.589058978704676e-16 -4.012115687189488e-17 -8.542030382924567e-16 -1.674842853160987e-15 -2.153186268698025e-15 +AlphaY 0 7.808396497655542e-15 6.879363770142131e-15 5.183014695214396e-15 3.6428116436571e-15 2.508152127114834e-15 1.265210965919047e-15 8.224244130785875e-16 -8.03001299064844e-17 -7.201086672080159e-16 -2.486148219567535e-15 -3.771254140972803e-15 -5.670043954263818e-15 -6.944262588111084e-15 -7.076319545172252e-15 -5.915706326475925e-15 -4.150644467278984e-15 -2.38633609329269e-15 -1.236236407395403e-15 -1.209892385163053e-16 8.520084869555558e-16 1.72792359136895e-15 2.79555372195699e-15 4.248805282076728e-15 5.878867122632803e-15 7.340287439719376e-15 7.758112194930539e-15 +AlphaZ 0 4.388126013276726e-31 1.437895629216647e-32 1.640546370058675e-32 1.436768032204479e-32 1.720762361634838e-32 -5.924625631284394e-33 1.356455637106439e-32 -3.118505730165001e-33 -2.693808561091054e-33 -3.727739517026469e-32 -4.912723687908432e-32 -6.126135855163654e-32 -7.669086176771316e-32 -7.056004797441794e-32 -6.578882705209298e-32 -4.870674471921564e-32 -2.347151582941894e-32 -1.19361648511705e-32 5.149006668862072e-33 1.711408459137413e-32 3.325273777707717e-32 4.508891537568124e-32 6.194368123461662e-32 3.896533069511927e-32 4.16511012290667e-32 2.736287607779354e-32 +RevoluteJointSeries /Assembly1/Joint1 +FXonI 0 215.79640691129 135.192109417972 29.32332596108369 -46.13245858613811 -71.02833884969367 -53.62741335769748 -11.93815645784638 34.60345374269296 66.56971455692518 64.78767195548417 14.38851300280725 -81.33414397117119 -182.6102366127404 -230.2349951937224 -207.9281669920005 -151.9345635431405 -97.17494561246622 -54.5234503491493 -21.60435907278509 7.085144670859383 37.17804313947505 74.33526056040101 123.2345330352834 181.3865685253107 226.1904838059294 215.7964069112894 +FYonI 0 -272.4046854467144 -175.8194124400843 -36.81264742162828 103.5110003841369 217.1475833316156 292.1460240336533 324.6784702849353 313.8141112564777 259.8231290892638 164.6950523263571 35.38913538423785 -108.9636858634337 -231.8066552421463 -295.5653945595188 -296.2337077360012 -263.6253048383077 -227.2756292687974 -200.4748343865489 -185.8889201973163 -183.0314499014021 -191.6695033734482 -212.3736423602202 -244.7275253136459 -281.8873658240582 -302.3313776681701 -272.404685446714 +FZonI 0 -0.14263988485617 -0.1044188043812211 -0.04182025941617386 0.03624403642879986 0.1162697599510015 0.1811881460700641 0.2133056352451023 0.2022770168382532 0.1517828105950932 0.0770033519772248 -0.003964548606688195 -0.07574770197463644 -0.126861570313382 -0.1519984997067936 -0.1555121439343863 -0.1479575677588427 -0.1381784889565691 -0.1304368758587203 -0.1260253940908879 -0.1251429978810612 -0.1277917908088876 -0.1339293376211173 -0.1429825200150272 -0.1524572346891496 -0.1558423349521929 -0.1426398848561699 +TXonI 0 -0.1939400995925404 -0.189852252465648 -0.1522875221711972 -0.0674308305660299 0.05202846117974608 0.1670865874404842 0.2288203735774558 0.2072994076879457 0.1132349994653962 -0.01009131137603906 -0.1156798472256993 -0.1766169375717691 -0.1945682041315089 -0.1908116685620426 -0.1833826663101637 -0.1763815982552057 -0.1689385370895859 -0.1618858161044892 -0.1571414844322499 -0.1561172703578285 -0.159113922146063 -0.1652451445287888 -0.1727131156142 -0.1798964843321752 -0.1870367126669543 -0.1939400995925392 +TYonI 0 0.07895683520868288 0.07647626103914917 0.0691904021285121 0.05755705578763555 0.0423071879515727 0.02439900390155532 0.00495774070314847 -0.01479503557693704 -0.03361818535938882 -0.05032898091666958 -0.06387742150590967 -0.07341220877720493 -0.07833423697981325 -0.07833423697981251 -0.07341220877719731 -0.06387742150589962 -0.05032898091666156 -0.03361818535938246 -0.01479503557693563 0.004957740703144926 0.0243990039015509 0.04230718795156393 0.05755705578762187 0.0691904021284972 0.07647626103913525 0.07895683520868273 +TZonI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +RevoluteJointSeries /Assembly1/Joint2 +FXonI 0 212.6381335029414 132.1330589764052 26.55570987594291 -48.43474081764353 -72.72062636775648 -54.60337351375969 -12.13646608597221 35.19525516577045 67.91444197130065 66.80083119215092 16.94360986304375 -78.39765562008252 -179.4768671335472 -227.1016257145291 -204.9916786409118 -149.379466682904 -95.16178637579947 -53.17872293477383 -21.01255764970759 6.886835042733558 36.20208298341284 72.64297304233818 120.932250803778 178.6189524401699 223.1314333643627 212.6381335029408 +FYonI 0 -270.4426854467144 -174.6428430976423 -36.37215723991795 103.3110134627204 216.4429648965765 291.1043275284017 323.4884290077192 312.6737795531414 258.9274378703059 164.2235608409178 35.49474885210306 -108.164323849138 -230.2404918608948 -293.2075579407703 -293.109069750297 -259.8069183061729 -222.8801377833582 -195.655143167591 -180.8245884939801 -177.917408624186 -186.7038068681966 -207.745023925181 -240.6035383922294 -278.4038560057685 -299.5839470106121 -270.442685446714 +FZonI 0 -0.14263988485617 -0.1044188043812211 -0.04182025941617385 0.03624403642879984 0.1162697599510015 0.1811881460700641 0.2133056352451023 0.2022770168382532 0.1517828105950933 0.0770033519772248 -0.003964548606688187 -0.07574770197463644 -0.126861570313382 -0.1519984997067936 -0.1555121439343863 -0.1479575677588428 -0.1381784889565691 -0.1304368758587203 -0.1260253940908878 -0.1251429978810613 -0.1277917908088876 -0.1339293376211173 -0.1429825200150271 -0.1524572346891496 -0.1558423349521929 -0.1426398848561699 +TXonI 0 -0.09584009959253947 -0.1102494647999848 -0.1141453621851786 -0.09727877683246645 -0.0617383047466486 -0.02285437141839738 -0.0009894705225377068 -0.008672485283387224 -0.04141931598310852 -0.08113156759726123 -0.1085349312700326 -0.114341165731936 -0.1035400584109943 -0.08816020839675828 -0.07294903776325398 -0.05503609268343509 -0.0343386473038543 -0.01531950628949354 -0.002959409572266637 -0.0003320519057745455 -0.008058869185737179 -0.02427844661482907 -0.04481638576311162 -0.06447845978160047 -0.08067030994487195 -0.09584009959253954 +TYonI 0 0.1227585977411771 0.1485181466144191 0.1782533082355025 0.1938077797530777 0.1767619261167309 0.1179891847566178 0.02558807943389433 -0.07470745339131638 -0.1525553381317105 -0.1902539698230835 -0.189066354759466 -0.163893880606768 -0.1343137277876787 -0.114362754029989 -0.1045633985714213 -0.09587211510709472 -0.08052431576748616 -0.05642469960048715 -0.02549326351806439 0.008586987027510165 0.04160514362341774 0.06951122166975868 0.08928735027440479 0.1006917718422418 0.108671773976945 0.1227585977411774 +TZonI 0 0 -1.434929627468613e-42 0 1.121038771459854e-44 0 0 -7.006492321624085e-46 0 0 4.484155085839415e-44 0 0 0 0 1.793662034335766e-43 0 0 0 -7.006492321624085e-46 -8.758115402030107e-47 7.006492321624085e-46 0 1.121038771459854e-44 -1.793662034335766e-43 0 0 +RevoluteJointSeries /Assembly1/Joint3 +FXonI 0 207.9007233904185 127.5444833140551 22.40428574823175 -51.88816416490166 -75.25905764485071 -56.067313747853 -12.43393052816094 36.0829573003867 69.93153309286386 69.82057004715105 20.7762551533985 -73.99292309344952 -174.7768129147573 -222.4015714957393 -200.5869461142788 -145.5468213925492 -92.14204752079934 -51.16163181321063 -20.12485551509134 6.589370600544822 34.73814274931954 70.10454176524395 117.4788274565199 174.4675283124588 218.5428577020125 207.9007233904179 +FYonI 0 -263.8010943471958 -170.9981905416406 -36.46820193666136 99.5877677442552 209.8027300880723 282.5330740077561 314.0764570873463 303.5428149932691 251.1894780049507 158.9300420093246 33.52463829185566 -106.3524384677995 -224.9539983434709 -285.5460447108555 -284.3213564547331 -250.6387096736116 -213.5727077023162 -186.2469557191991 -171.3415628338348 -168.417132881262 -177.2528813573324 -198.3855481234503 -231.3548625821951 -269.3708417927738 -291.2267105092625 -263.8010943471954 +FZonI 0 -0.1426398848561692 -0.1044188043812205 -0.04182025941617357 0.03624403642879982 0.1162697599510012 0.1811881460700638 0.2133056352451018 0.2022770168382528 0.1517828105950929 0.07700335197722455 -0.003964548606688269 -0.07574770197463628 -0.1268615703133816 -0.1519984997067931 -0.155512143934386 -0.1479575677588428 -0.1381784889565692 -0.1304368758587207 -0.1260253940908882 -0.1251429978810616 -0.1277917908088879 -0.1339293376211174 -0.142982520015027 -0.1524572346891491 -0.1558423349521921 -0.142639884856169 +TXonI 0 -0.2817572668301228 -0.1834865723349152 -0.06355929315876133 0.04677319425926842 0.1275763132366264 0.1744618666732297 0.1925188897629109 0.1866697301506815 0.1550547144391757 0.09146298069677415 -0.005559623814666585 -0.1241750963697537 -0.2372494643874526 -0.314739895471282 -0.3465314762180661 -0.3466336635262044 -0.3344749056359038 -0.3220851386517106 -0.3143705494517028 -0.3127814382410039 -0.3175072982992682 -0.3278816290976166 -0.3411252209203599 -0.3492225837337867 -0.3358591712860366 -0.2817572668301216 +TYonI 0 -1.882190402651074e-14 -1.348128974845851e-14 -6.070603973798368e-15 -5.195031743013553e-16 1.818583541898495e-15 1.90450229597847e-15 -1.034801927149044e-16 -1.923901042004242e-15 -3.222761875059015e-15 -1.572763601464772e-15 2.363381884674704e-15 9.408415304491986e-15 1.619533396220018e-14 1.8980602623601e-14 1.668238383717541e-14 1.196631394942275e-14 7.350303000723601e-15 3.993958503942747e-15 1.209302641088925e-15 -1.194582816347469e-15 -3.514485922922024e-15 -6.519668070149778e-15 -1.046236599433997e-14 -1.515100955893583e-14 -1.898390063269519e-14 -1.875207259952453e-14 +TZonI 0 -5.136225374322523e-17 -3.19583651446005e-17 -9.856579199593945e-18 6.145616288100504e-18 1.328489652104771e-17 1.340814486234009e-17 9.347809102737256e-18 3.863963529212868e-18 -1.120427703202397e-18 -3.144776621454932e-18 3.270907210029095e-19 9.960748025652861e-18 2.154410310211558e-17 2.928935798132526e-17 2.865190169485016e-17 2.201743948690569e-17 1.322588206485718e-17 3.57104002743756e-18 -5.885252811620492e-18 -1.544656420276222e-17 -2.542161359521387e-17 -3.601582593870387e-17 -4.697377843062765e-17 -5.702589564862664e-17 -5.96856860188879e-17 -5.110162900883678e-17 +CylindricalJointSeries /Assembly1/Joint4 +FXonI 0 207.9007233904185 127.5444833140551 22.40428574823175 -51.8881641649017 -75.25905764485077 -56.06731374785307 -12.43393052816102 36.08295730038662 69.93153309286379 69.82057004715101 20.77625515339848 -73.99292309344951 -174.7768129147573 -222.4015714957393 -200.5869461142788 -145.5468213925492 -92.14204752079932 -51.1616318132106 -20.12485551509132 6.58937060054484 34.73814274931956 70.10454176524398 117.4788274565199 174.4675283124588 218.5428577020126 207.9007233904179 +FYonI 0 -4.182741359097481e-14 -2.565953212209469e-14 -4.505981001360685e-15 1.04394236175519e-14 1.513839124126085e-14 1.127429947141722e-14 2.492701453294084e-15 -7.268849085912543e-15 -1.407772252009199e-14 -1.405256492790627e-14 -4.180620219772424e-15 1.489204053676754e-14 3.517454913547088e-14 4.475844285546407e-14 4.03684791252896e-14 2.929219369196816e-14 1.854475597267372e-14 1.029805936500252e-14 4.052488190895939e-15 -1.323162008064149e-15 -6.986754191269302e-15 -1.41024627359459e-14 -2.363422836662531e-14 -3.510099319980702e-14 -4.396874402022171e-14 -4.182724459223942e-14 +FZonI 0 -0.1426398848561342 -0.1044188043811956 -0.04182025941616431 0.03624403642879494 0.1162697599509873 0.1811881460700467 0.2133056352450825 0.2022770168382345 0.1517828105950768 0.07700335197721347 -0.003964548606692323 -0.0757477019746295 -0.1268615703133657 -0.1519984997067743 -0.1555121439343739 -0.1479575677588413 -0.1381784889565763 -0.1304368758587341 -0.1260253940909034 -0.1251429978810763 -0.1277917908088985 -0.1339293376211216 -0.14298252001502 -0.1524572346891288 -0.1558423349521595 -0.1426398848561339 +TXonI 0 -0.1391173819739731 -0.07906776795370922 -0.02173903374259394 0.01052915783046995 0.01130655328563106 -0.006726279396827259 -0.02078674548218277 -0.01560728668756401 0.003271903844089115 0.01445962871955386 -0.001595075207976673 -0.04842739439512028 -0.1103878940740774 -0.1627413957644958 -0.1910193322836826 -0.1986760957673584 -0.1962964166793265 -0.1916482627929786 -0.1883451553608027 -0.1876384403599307 -0.1897155074903713 -0.193952291476494 -0.1981427009053343 -0.1967653490446467 -0.1800168363338618 -0.1391173819739724 +TYonI 0 -1.171301497058647e-14 -7.317504863596884e-15 -1.282193817367371e-15 2.757783752526191e-15 3.784885130266427e-15 2.503674764158866e-15 5.746663994060313e-16 -1.401765547613745e-15 -2.530645712800723e-15 -2.451940957887227e-15 -7.471972559010266e-16 2.520750722058364e-15 6.280834349749247e-15 7.355447960123426e-15 6.157442764675801e-15 4.000507999868185e-15 2.080429576203863e-15 1.099939662818894e-15 4.063435813071348e-16 -2.169987393657439e-16 -1.015120333956107e-15 -2.412108908271104e-15 -4.758970427176578e-15 -7.746751321583098e-15 -1.150075891063762e-14 -1.193157923644886e-14 +TZonI 0 207.9007233904186 127.544483314055 22.40428574823175 -51.88816416490169 -75.25905764485074 -56.06731374785304 -12.433930528161 36.08295730038662 69.93153309286382 69.82057004715102 20.77625515339849 -73.99292309344952 -174.7768129147573 -222.4015714957393 -200.5869461142788 -145.5468213925492 -92.14204752079928 -51.1616318132106 -20.12485551509132 6.589370600544839 34.73814274931955 70.10454176524397 117.47882745652 174.4675283124589 218.5428577020126 207.9007233904179 +RotationalMotionSeries /Assembly1/Motion1 +FXonI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +FYonI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +FZonI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +TXonI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +TYonI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +TZonI 0 -217.1389483573715 -162.3731621157299 -36.42090560894689 86.20098488884628 141.4802797541637 113.2671462902756 25.89034124953703 -74.3818025720204 -137.0232607415356 -124.4205195919947 -30.3051306872277 104.2726860530056 201.5141259543184 210.7243297544258 158.3804492666361 98.54304826066685 55.49683438943606 28.48484048560518 10.74128214921911 -3.487902858844468 -18.85405438673603 -40.40520455792255 -74.65898164548042 -127.0211832149576 -188.5052924109465 -217.1389483573715