/*************************************************************************** * Copyright (c) 2023 Ondsel, Inc. * * * * This file is part of OndselSolver. * * * * See LICENSE file for details about copyright. * ***************************************************************************/ //This header file causes weird problems in Visual Studio when included in subclasses of std::vector or std::map. Why? #pragma once #include #include "EndFrameqct.h" #include "AtPointConstraintIqctJqc.h" #include "DirectionCosineConstraintIqctJqc.h" #include "TranslationConstraintIqctJqc.h" #include "DispCompIeqctJeqcKeqct.h" #include "DispCompIeqctJeqcO.h" namespace MbD { template class CREATE { public: static std::shared_ptr With(const std::string& name) { auto inst = std::make_shared(name); inst->initialize(); return inst; } static std::shared_ptr With(const std::string& expr, double unit) { auto inst = std::make_shared(expr, unit); inst->initialize(); return inst; } static std::shared_ptr With() { auto inst = std::make_shared(); inst->initialize(); return inst; } static std::shared_ptr With(size_t n) { auto inst = std::make_shared(n); inst->initialize(); return inst; } static std::shared_ptr With(size_t m, size_t n) { auto inst = std::make_shared(m, n); inst->initialize(); return inst; } static std::shared_ptr With(std::initializer_list listD) { auto inst = std::make_shared(listD); inst->initialize(); return inst; } static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj) { auto inst = std::make_shared(frmi, frmj); inst->initialize(); return inst; } static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj, size_t axis) { auto inst = std::make_shared(frmi, frmj, axis); inst->initialize(); return inst; } static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj, std::shared_ptr frmk, size_t axisk) { auto inst = std::make_shared(frmi, frmj, frmk, axisk); inst->initialize(); return inst; } static std::shared_ptr ConstraintWith(std::shared_ptr frmi, std::shared_ptr frmj, size_t axis) { std::shared_ptr inst; std::string str = typeid(T).name(); if (str.find("AtPointConstraintIqcJqc") != std::string::npos) { if (std::dynamic_pointer_cast(frmi)) { inst = std::make_shared(frmi, frmj, axis); } else { inst = std::make_shared(frmi, frmj, axis); } } else if(str.find("TranslationConstraintIqcJqc") != std::string::npos) { if (std::dynamic_pointer_cast(frmi)) { inst = std::make_shared(frmi, frmj, axis); } else { inst = std::make_shared(frmi, frmj, axis); } } inst->initialize(); return inst; } static std::shared_ptr With(std::shared_ptr frmi, std::shared_ptr frmj, size_t axisi, size_t axisj) { auto inst = std::make_shared(frmi, frmj, axisi, axisj); inst->initialize(); return inst; } static std::shared_ptr ConstraintWith(std::shared_ptr frmi, std::shared_ptr frmj, size_t axisi, size_t axisj) { std::shared_ptr inst; std::string str = typeid(T).name(); if (str.find("DirectionCosineConstraintIqcJqc") != std::string::npos) { if (std::dynamic_pointer_cast(frmi)) { inst = std::make_shared(frmi, frmj, axisi, axisj); } else { inst = std::make_shared(frmi, frmj, axisi, axisj); } } inst->initialize(); return inst; } }; }