9#include <OpenSim/Common/Component.h>
10#include <OpenSim/Common/Property.h>
24 public OpenSim::Component,
28 OpenSim_DECLARE_LIST_PROPERTY(scaling_parameter_overrides,
ScalingParameterOverride,
"A sequence of `ScalingParameterOverride`s that should be used in place of the default values used by the `ScalingStep`s.");
32 constructProperty_scaling_parameter_overrides();
37 if (getNumImmediateSubcomponents() == 0) {
40 const auto lst = getComponentList<ScalingStep>();
41 return lst.begin() != lst.end();
46 return getComponentList<ScalingStep>();
51 addComponent(step.release());
53 finalizeConnections(*
this);
54 finalizeFromProperties();
59 if (not step.hasOwner()) {
62 if (&step.getOwner() !=
this) {
66 removeComponent(&step);
68 finalizeConnections(*
this);
69 finalizeFromProperties();
98 std::stringstream msg;
99 msg << step.getAbsolutePath() <<
": declares a scaling parameter (" << decl.
name() <<
") that has the same name as another scaling parameter, but they differ: the engine cannot figure out how to rectify this difference. The parameter should have a different name, or a disambiguating prefix added to it";
100 throw std::runtime_error{std::move(msg).str()};
108 for (
int i = 0; i < overrides.size(); ++i) {
119 mutateScalingParammeterOverridesWithNewOverride(scalingParamName, newValue);
120 finalizeFromProperties();
124 void saveTo(
const std::filesystem::path& p)
const
130 void mutateScalingParammeterOverridesWithNewOverride(
const std::string& scalingParamName,
ScalingParameterValue newValue)
134 for (
int i = 0; i < overrides.size(); ++i) {
136 if (o.get_parameter_name() == scalingParamName) {
137 updProperty_scaling_parameter_overrides().updValue(i).set_parameter_value(newValue);
143 int idx = updProperty_scaling_parameter_overrides().appendValue(ScalingParameterOverride{scalingParamName, newValue});
144 updProperty_scaling_parameter_overrides().updValue(idx).set_parameter_name(scalingParamName);
145 updProperty_scaling_parameter_overrides().updValue(idx).set_parameter_value(newValue);
160 throw std::runtime_error{
"component updating not implemented for this IComponentAccessor" };
Definition open_sim_helpers.h:55
Definition model_warper_v3_document.h:25
bool removeScalingStep(ScalingStep &step)
Definition model_warper_v3_document.h:57
const OpenSim::Component & implGetComponent() const final
Definition model_warper_v3_document.h:148
bool hasScalingSteps() const
Definition model_warper_v3_document.h:35
void addScalingStep(std::unique_ptr< ScalingStep > step)
Definition model_warper_v3_document.h:49
auto iterateScalingSteps() const
Definition model_warper_v3_document.h:44
bool implCanUpdComponent() const final
Definition model_warper_v3_document.h:153
ModelWarperV3Document()
Definition model_warper_v3_document.h:30
bool hasScalingParameters() const
Definition model_warper_v3_document.h:73
ScalingParameters getEffectiveScalingParameters() const
Definition model_warper_v3_document.h:88
bool setScalingParameterOverride(const std::string &scalingParamName, ScalingParameterValue newValue)
Definition model_warper_v3_document.h:117
void saveTo(const std::filesystem::path &p) const
Definition model_warper_v3_document.h:124
OpenSim::Component & implUpdComponent() final
Definition model_warper_v3_document.h:158
Definition scaling_parameter_declaration.h:16
const ScalingParameterValue & default_value() const
Definition scaling_parameter_declaration.h:24
const std::string & name() const
Definition scaling_parameter_declaration.h:23
Definition scaling_parameter_override.h:14
Definition scaling_parameters.h:14
auto insert_or_assign(const std::string &name, const ScalingParameterValue &value)
Definition scaling_parameters.h:34
auto try_emplace(const std::string &name, const ScalingParameterValue &value)
Definition scaling_parameters.h:29
Definition scaling_step.h:25
Definition versioned_component_accessor.h:8
Definition component_registry.h:14
double ScalingParameterValue
Definition scaling_parameter_value.h:9