/*************************************************************************** * Copyright (c) 2023 Ondsel, Inc. * * * * This file is part of OndselSolver. * * * * See LICENSE file for details about copyright. * ***************************************************************************/ #pragma once #include #include "ASMTSpatialContainer.h" //Required for initialization #include "ASMTConstantGravity.h" #include "ASMTSimulationParameters.h" #include "ASMTAnimationParameters.h" #include "ASMTTime.h" #include "Units.h" namespace MbD { class ASMTPart; class ASMTKinematicIJ; class ASMTConstraintSet; class ASMTForceTorque; class ASMTJoint; class ASMTMotion; class ASMTLimit; class SystemSolver; class ASMTItemIJ; class ASMTAssembly : public ASMTSpatialContainer { // public: ASMTAssembly(); static std::shared_ptr With(); static void runSinglePendulumSuperSimplified(); static void runSinglePendulumSuperSimplified2(); static void runSinglePendulumSimplified(); static void runSinglePendulum(); static std::shared_ptr assemblyFromFile(const char* chars); static void runFile(const char* chars); static void runDraggingLogTest(); static void runDraggingTest(); static void runDraggingTest2(); static void runDraggingTest3(); static void readWriteFile(const char* chars); void initialize() override; ASMTAssembly* root() override; void setNotes(std::string str); void parseASMT(std::vector& lines) override; void readNotes(std::vector& lines); void readParts(std::vector& lines); void readPart(std::vector& lines); void readKinematicIJs(std::vector& lines); void readKinematicIJ(std::vector& lines); void readConstraintSets(std::vector& lines); void readJoints(std::vector& lines); void readMotions(std::vector& lines); void readLimits(std::vector& lines); void readGeneralConstraintSets(std::vector& lines) const; void readForcesTorques(std::vector& lines); void readConstantGravity(std::vector& lines); void readSimulationParameters(std::vector& lines); void readAnimationParameters(std::vector& lines); void readTimeSeries(std::vector& lines); void readTimes(std::vector& lines); void readAssemblySeries(std::vector& lines); void readPartSeriesMany(std::vector& lines); void readPartSeries(std::vector& lines); void readJointSeriesMany(std::vector& lines); void readJointSeries(std::vector& lines); void readMotionSeriesMany(std::vector& lines); void readMotionSeries(std::vector& lines); void runDraggingLog(const char* chars); void outputFor(AnalysisType type); void preMbDrun(std::shared_ptr mbdSys); void postMbDrun(); void calcCharacteristicDimensions(); double calcCharacteristicTime() const; double calcCharacteristicMass() const; double calcCharacteristicLength() const; std::shared_ptr>> connectorList() const; std::shared_ptr>>markerMap() const; void deleteMbD() override; void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; void outputFile(std::string filename); void storeOnLevel(std::ofstream& os, size_t level) override; /* This function performs a one shot solve of the assembly.*/ void solve(); void runPreDrag(); void runDragStep(std::shared_ptr>> dragParts); void runPostDrag(); void runKINEMATIC(); void initprincipalMassMarker(); std::shared_ptr spatialContainerAt(std::shared_ptr self, std::string& longname) const; std::shared_ptr partAt(std::string& longname) const; std::shared_ptr markerAt(std::string& longname) const; std::shared_ptr jointAt(std::string& longname) const; std::shared_ptr motionAt(std::string& longname) const; std::shared_ptr forceTorqueAt(std::string& longname) const; FColDsptr vOcmO() override; FColDsptr omeOpO() override; std::shared_ptr geoTime() const; void updateFromMbD() override; void compareResults(AnalysisType type) override; void outputResults(AnalysisType type) override; void addPart(std::shared_ptr part); void addJoint(std::shared_ptr joint); void addMotion(std::shared_ptr motion); void addLimit(std::shared_ptr limit); void setConstantGravity(std::shared_ptr constantGravity); void setSimulationParameters(std::shared_ptr simulationParameters); std::shared_ptr partNamed(std::string partName) const; std::shared_ptr partPartialNamed(std::string partialName) const; void storeOnLevelNotes(std::ofstream& os, size_t level); void storeOnLevelParts(std::ofstream& os, size_t level); void storeOnLevelKinematicIJs(std::ofstream& os, size_t level); void storeOnLevelConstraintSets(std::ofstream& os, size_t level); void storeOnLevelForceTorques(std::ofstream& os, size_t level); void storeOnLevelJoints(std::ofstream& os, size_t level); void storeOnLevelMotions(std::ofstream& os, size_t level); void storeOnLevelLimits(std::ofstream& os, size_t level); void storeOnLevelGeneralConstraintSets(std::ofstream& os, size_t level); void storeOnTimeSeries(std::ofstream& os) override; void setFilename(std::string filename); void setDebug(bool todebug); std::string filename = ""; std::string notes = "(Text string: '' runs: (Core.RunArray runs: #() values: #()))"; std::shared_ptr>> parts = std::make_shared>>(); std::shared_ptr>> kinematicIJs = std::make_shared>>(); std::shared_ptr>> constraintSets = std::make_shared>>(); std::shared_ptr>> joints = std::make_shared>>(); std::shared_ptr>> motions = std::make_shared>>(); std::shared_ptr>> limits = std::make_shared>>(); std::shared_ptr>> forcesTorques = std::make_shared>>(); std::shared_ptr constantGravity = ASMTConstantGravity::With(); std::shared_ptr simulationParameters = ASMTSimulationParameters::With(); std::shared_ptr animationParameters = ASMTAnimationParameters::With(); std::shared_ptr> times = std::make_shared>(); std::shared_ptr asmtTime = ASMTTime::With(); std::shared_ptr mbdUnits = std::make_shared(); std::shared_ptr mbdSystem; bool debug = false; }; }