1 #define BIORBD_API_EXPORTS
2 #include "Muscles/MuscleGroup.h"
4 #include "Utils/Error.h"
5 #include "Muscles/IdealizedActuator.h"
6 #include "Muscles/HillType.h"
7 #include "Muscles/HillThelenType.h"
8 #include "Muscles/HillThelenTypeFatigable.h"
9 #include "Muscles/StateDynamicsBuchanan.h"
10 #include "Muscles/StateDynamicsDeGroote.h"
13 m_mus(std::make_shared<std::vector<std::shared_ptr<biorbd::muscles::
Muscle>>>()),
14 m_name(std::make_shared<biorbd::utils::String>()),
15 m_originName(std::make_shared<biorbd::utils::String>()),
16 m_insertName(std::make_shared<biorbd::utils::String>())
24 m_originName(other.m_originName),
25 m_insertName(other.m_insertName)
34 m_mus(std::make_shared<std::vector<std::shared_ptr<biorbd::muscles::
Muscle>>>()),
35 m_name(std::make_shared<biorbd::utils::String>(name)),
36 m_originName(std::make_shared<biorbd::utils::String>(originName)),
37 m_insertName(std::make_shared<biorbd::utils::String>(insertionName))
55 m_mus->resize(other.
m_mus->size());
56 for (
unsigned int i=0; i<other.
m_mus->size(); ++i){
57 if ((*other.
m_mus)[i]->type() == biorbd::muscles::MUSCLE_TYPE::IDEALIZED_ACTUATOR)
58 (*m_mus)[i] = std::make_shared<biorbd::muscles::IdealizedActuator>((*other.
m_mus)[i]);
59 else if ((*other.
m_mus)[i]->type() == biorbd::muscles::MUSCLE_TYPE::HILL)
60 (*m_mus)[i] = std::make_shared<biorbd::muscles::HillType>((*other.
m_mus)[i]);
61 else if ((*other.
m_mus)[i]->type() == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN)
62 (*m_mus)[i] = std::make_shared<biorbd::muscles::HillThelenType>((*other.
m_mus)[i]);
63 else if ((*other.
m_mus)[i]->type() == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN_FATIGABLE)
64 (*m_mus)[i] = std::make_shared<biorbd::muscles::HillThelenTypeFatigable>((*other.
m_mus)[i]);
68 *m_mus = *other.
m_mus;
76 biorbd::muscles::MUSCLE_TYPE type,
79 biorbd::muscles::STATE_TYPE stateType,
80 biorbd::muscles::STATE_FATIGUE_TYPE dynamicFatigueType)
82 std::shared_ptr<biorbd::muscles::Muscle> muscle;
83 std::shared_ptr<biorbd::muscles::StateDynamics> state;
86 if (stateType == biorbd::muscles::STATE_TYPE::SIMPLE_STATE)
87 state = std::make_shared<biorbd::muscles::StateDynamics>();
88 else if (stateType == biorbd::muscles::STATE_TYPE::DYNAMIC)
89 state = std::make_shared<biorbd::muscles::StateDynamics>();
90 else if (stateType == biorbd::muscles::STATE_TYPE::BUCHANAN)
91 state = std::make_shared<biorbd::muscles::StateDynamicsBuchanan>();
92 else if (stateType == biorbd::muscles::STATE_TYPE::DE_GROOTE)
93 state = std::make_shared<biorbd::muscles::StateDynamicsDeGroote>();
95 state = std::make_shared<biorbd::muscles::StateDynamics>();
97 if (type == biorbd::muscles::MUSCLE_TYPE::IDEALIZED_ACTUATOR)
98 muscle = std::make_shared<biorbd::muscles::IdealizedActuator>(name,geometry,characteristics, *state);
99 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL)
100 muscle = std::make_shared<biorbd::muscles::HillType>(name,geometry,characteristics, *state);
101 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN)
102 muscle = std::make_shared<biorbd::muscles::HillThelenType>(name,geometry,characteristics, *state);
103 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN_FATIGABLE)
104 muscle = std::make_shared<biorbd::muscles::HillThelenTypeFatigable>(name,geometry,characteristics, *state, dynamicFatigueType);
112 biorbd::muscles::MUSCLE_TYPE type,
115 biorbd::muscles::STATE_FATIGUE_TYPE dynamicFatigueType)
117 std::shared_ptr<biorbd::muscles::Muscle> muscle;
118 if (type == biorbd::muscles::MUSCLE_TYPE::IDEALIZED_ACTUATOR)
119 muscle = std::make_shared<biorbd::muscles::IdealizedActuator>(name,geometry,characteristics);
120 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL)
121 muscle = std::make_shared<biorbd::muscles::HillType>(name,geometry,characteristics);
122 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN)
123 muscle = std::make_shared<biorbd::muscles::HillThelenType>(name,geometry,characteristics);
124 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN_FATIGABLE)
125 muscle = std::make_shared<biorbd::muscles::HillThelenTypeFatigable>(name,geometry,characteristics, dynamicFatigueType);
133 biorbd::muscles::MUSCLE_TYPE type,
137 biorbd::muscles::STATE_TYPE stateType,
138 biorbd::muscles::STATE_FATIGUE_TYPE dynamicFatigueType)
140 std::shared_ptr<biorbd::muscles::Muscle> muscle;
141 std::shared_ptr<biorbd::muscles::StateDynamics> state;
144 if (stateType == biorbd::muscles::STATE_TYPE::SIMPLE_STATE)
145 state = std::make_shared<biorbd::muscles::StateDynamics>();
146 else if (stateType == biorbd::muscles::STATE_TYPE::BUCHANAN)
147 state = std::make_shared<biorbd::muscles::StateDynamicsBuchanan>();
148 else if (stateType == biorbd::muscles::STATE_TYPE::DE_GROOTE)
149 state = std::make_shared<biorbd::muscles::StateDynamicsDeGroote>();
151 state = std::make_shared<biorbd::muscles::StateDynamics>();
155 if (type == biorbd::muscles::MUSCLE_TYPE::IDEALIZED_ACTUATOR)
156 muscle = std::make_shared<biorbd::muscles::IdealizedActuator>
157 (name,geometry,characteristics,pathModifiers,*state);
158 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL)
159 muscle = std::make_shared<biorbd::muscles::HillType>
160 (name,geometry,characteristics,pathModifiers,*state);
161 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN)
162 muscle = std::make_shared<biorbd::muscles::HillThelenType>
163 (name,geometry,characteristics,pathModifiers,*state);
164 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN_FATIGABLE)
165 muscle = std::make_shared<biorbd::muscles::HillThelenTypeFatigable>(
166 name,geometry,characteristics,pathModifiers,*state,dynamicFatigueType);
174 biorbd::muscles::MUSCLE_TYPE type,
178 biorbd::muscles::STATE_FATIGUE_TYPE dynamicFatigueType)
180 std::shared_ptr<biorbd::muscles::Muscle> muscle;
182 if (type == biorbd::muscles::MUSCLE_TYPE::IDEALIZED_ACTUATOR)
183 muscle = std::make_shared<biorbd::muscles::IdealizedActuator>(name,geometry,characteristics,pathModifiers);
184 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL)
185 muscle = std::make_shared<biorbd::muscles::HillType>(name,geometry,characteristics,pathModifiers);
186 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN)
187 muscle = std::make_shared<biorbd::muscles::HillThelenType>(name,geometry,characteristics,pathModifiers);
188 else if (type == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN_FATIGABLE)
189 muscle = std::make_shared<biorbd::muscles::HillThelenTypeFatigable>(name,geometry,characteristics,pathModifiers,dynamicFatigueType);
201 if (muscle.
type() == biorbd::muscles::MUSCLE_TYPE::IDEALIZED_ACTUATOR)
202 m_mus->push_back(std::make_shared<biorbd::muscles::IdealizedActuator>(muscle));
203 else if (muscle.
type() == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN_FATIGABLE)
204 m_mus->push_back(std::make_shared<biorbd::muscles::HillThelenTypeFatigable>(muscle));
205 else if (muscle.
type() == biorbd::muscles::MUSCLE_TYPE::HILL_THELEN)
206 m_mus->push_back(std::make_shared<biorbd::muscles::HillThelenType>(muscle));
207 else if (muscle.
type() == biorbd::muscles::MUSCLE_TYPE::HILL)
208 m_mus->push_back(std::make_shared<biorbd::muscles::HillType>(muscle));
217 return *(*m_mus)[idx];
222 return *(*m_mus)[idx];
227 return static_cast<unsigned int>(m_mus->size());
241 for (
unsigned int i=0; i<m_mus->size(); ++i){
242 if (!nameToFind.compare( (*m_mus)[i]->name()) )
243 return static_cast<int>(i);
257 *m_originName = name;
260 return *m_originName;
264 *m_insertName = name;
267 return *m_insertName;