/*****************************************************************//** * \file System.h * \brief Multibody system of parts, joints, forces. * * \author askoh * \date May 2023 *********************************************************************/ #pragma once #include #include #include #include "Item.h" #include "PrescribedMotion.h" #include "ExternalSystem.h" //using namespace CAD; namespace MbD { class Part; class Joint; class SystemSolver; class Time; class Constraint; class ForceTorqueItem; //class CAD::CADSystem; class System : public Item { //ToDo: Needed members admSystem namedItems mbdTime parts jointsMotions forcesTorques sensors variables hasChanged mbdSystemSolver public: System(); System(const char* str); System* root() override; void initialize() override; void initializeLocally() override; void initializeGlobally() override; void clear(); void runKINEMATIC(std::shared_ptr self); std::shared_ptr> discontinuitiesAtIC(); void jointsMotionsDo(const std::function )>& f); void partsJointsMotionsDo(const std::function )>& f); void partsJointsMotionsForcesTorquesDo(const std::function )>& f); void logString(std::string& str) override; double mbdTimeValue(); void mbdTimeValue(double t); std::shared_ptr>> essentialConstraints2(); std::shared_ptr>> displacementConstraints(); std::shared_ptr>> perpendicularConstraints(); std::shared_ptr>> allRedundantConstraints(); std::shared_ptr>> allConstraints(); void addPart(std::shared_ptr part); void addJoint(std::shared_ptr joint); void addMotion(std::shared_ptr motion); void addForceTorque(std::shared_ptr forTor); double maximumMass(); double maximumMomentOfInertia(); double translationLimit(); double rotationLimit(); void outputFor(AnalysisType type); std::shared_ptr externalSystem; std::shared_ptr>> parts; std::shared_ptr>> jointsMotions; std::shared_ptr>> forcesTorques; bool hasChanged = false; std::shared_ptr systemSolver; std::shared_ptr