#include #include "PartFrame.h" #include "MarkerFrame.h" #include "EndFramec.h" #include "EndFrameqc.h" #include "EulerParameters.h" #include "CREATE.h" using namespace MbD; MarkerFrame::MarkerFrame() { } MarkerFrame::MarkerFrame(const char* str) : CartesianFrame(str) { } void MarkerFrame::initialize() { prOmOpE = std::make_shared>(3, 4); pAOmpE = std::make_shared>>>(4); endFrames = std::make_shared>(); auto endFrm = CREATE::With(); this->addEndFrame(endFrm); } void MarkerFrame::initializeLocally() { pprOmOpEpE = EulerParameters::ppApEpEtimesColumn(rpmp); ppAOmpEpE = EulerParameters::ppApEpEtimesMatrix(aApm); for (int i = 0; i < endFrames->size(); i++) { auto eFrmqc = std::dynamic_pointer_cast(endFrames->at(i)); if (eFrmqc) { if (eFrmqc->endFrameqct) { endFrames->at(i) = eFrmqc->endFrameqct; } } } endFramesDo([](std::shared_ptr endFrame) { endFrame->initializeLocally(); }); } void MarkerFrame::initializeGlobally() { endFramesDo([](std::shared_ptr endFrame) { endFrame->initializeGlobally(); }); } void MbD::MarkerFrame::postInput() { Item::postInput(); endFramesDo([](std::shared_ptr endFrame) { endFrame->postInput(); }); } void MbD::MarkerFrame::calcPostDynCorrectorIteration() { auto rOpO = partFrame->rOpO(); auto aAOp = partFrame->aAOp(); rOmO = rOpO->plusFullColumn(aAOp->timesFullColumn(rpmp)); aAOm = aAOp->timesFullMatrix(aApm); auto pAOppE = partFrame->pAOppE(); for (int i = 0; i < 4; i++) { auto& pAOppEi = pAOppE->at(i); prOmOpE->atijputFullColumn(1, i, pAOppEi->timesFullColumn(rpmp)); pAOmpE->at(i) = pAOppEi->timesFullMatrix(aApm); } } void MbD::MarkerFrame::prePosIC() { Item::prePosIC(); endFramesDo([](std::shared_ptr endFrame) { endFrame->prePosIC(); }); } int MbD::MarkerFrame::iqX() { return partFrame->iqX; } int MbD::MarkerFrame::iqE() { return partFrame->iqE; } void MbD::MarkerFrame::endFramesDo(const std::function)>& f) { std::for_each(endFrames->begin(), endFrames->end(), f); } void MbD::MarkerFrame::fillqsu(FColDsptr col) { endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsu(col); }); } void MbD::MarkerFrame::fillqsuWeights(std::shared_ptr> diagMat) { endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsuWeights(diagMat); }); } void MbD::MarkerFrame::fillqsulam(FColDsptr col) { endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->fillqsulam(col); }); } void MbD::MarkerFrame::setqsu(FColDsptr col) { endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->setqsu(col); }); } void MbD::MarkerFrame::setqsulam(FColDsptr col) { endFramesDo([&](const std::shared_ptr& endFrame) { endFrame->setqsulam(col); }); } void MbD::MarkerFrame::postPosICIteration() { endFramesDo([](std::shared_ptr endFrame) { endFrame->postPosICIteration(); }); } void MbD::MarkerFrame::postPosIC() { endFramesDo([](std::shared_ptr endFrame) { endFrame->postPosIC(); }); } void MbD::MarkerFrame::preDyn() { endFramesDo([](std::shared_ptr endFrame) { endFrame->preDyn(); }); } void MarkerFrame::setPartFrame(PartFrame* partFrm) { partFrame = partFrm; } PartFrame* MarkerFrame::getPartFrame() { return partFrame; } void MarkerFrame::setrpmp(FColDsptr x) { rpmp->copyFrom(x); } void MarkerFrame::setaApm(FMatDsptr x) { aApm->copyFrom(x); } void MarkerFrame::addEndFrame(EndFrmcptr endFrm) { endFrm->setMarkerFrame(this); endFrames->push_back(endFrm); }