22 scalingDocument->finalizeConnections(*scalingDocument);
23 scalingDocument->finalizeFromProperties();
34 scalingDocument->clearConnections();
35 scalingDocument->finalizeConnections(*scalingDocument);
36 scalingDocument->finalizeFromProperties();
54 *sourceModel = *other.sourceModel;
55 *scalingDocument = *other.scalingDocument;
56 scalingDocument->clearConnections();
57 scalingDocument->finalizeConnections(*scalingDocument);
58 scalingDocument->finalizeFromProperties();
70 sourceModel = std::make_shared<BasicModelStatePair>(path);
74 sourceModel = std::make_shared<BasicModelStatePair>();
84 scalingDocument->addScalingStep(std::move(step));
88 return scalingDocument->removeScalingStep(step);
92 if (
auto* scalingStep = findScalingComponentMut<ScalingStep>(path)) {
109 edit.
apply(*property);
110 scalingDocument->clearConnections();
111 scalingDocument->finalizeConnections(*scalingDocument);
112 scalingDocument->finalizeFromProperties();
116 if (
auto* scalingStep = findScalingComponentMut<ScalingStep>(path)) {
117 scalingStep->set_enabled(
false);
118 scalingDocument->clearConnections();
119 scalingDocument->finalizeConnections(*scalingDocument);
120 scalingDocument->finalizeFromProperties();
129 std::vector<ScalingDocumentValidationMessage> rv;
137 for (
const auto& scalingStep : scalingDocument->getComponentList<
ScalingStep>()) {
138 if (not scalingStep.get_enabled()) {
142 auto stepMessages = scalingStep.validate(scalingCache, scalingParameters, *sourceModel);
143 rv.reserve(rv.size() + stepMessages.size());
144 for (
auto& stepMessage : stepMessages) {
147 .payload = std::move(stepMessage),
159 scalingDocument = std::make_shared<ModelWarperV3Document>();
160 scalingDocument->finalizeConnections(*scalingDocument);
161 scalingDocument->finalizeFromProperties();
165 const auto ptr = std::shared_ptr<OpenSim::Object>{OpenSim::Object::makeObjectFromFile(path.string())};
166 if (
auto downcasted = std::dynamic_pointer_cast<ModelWarperV3Document>(ptr)) {
167 scalingDocument = std::move(downcasted);
168 scalingDocument->finalizeConnections(*scalingDocument);
169 scalingDocument->finalizeFromProperties();
172 std::stringstream ss;
173 ss << path.string() <<
": is a valid object file, but doesn't contain a ModelWarperV3Document";
174 throw std::runtime_error{std::move(ss).str()};
179 if (
const auto filename = scalingDocument->getDocumentFileName(); not filename.empty()) {
180 return std::filesystem::path{filename};
191 return scalingDocument->setScalingParameterOverride(scalingParamName, newValue);
205 OpenSim::Model resultModel = sourceModel->getModel();
206 resultModel.clearConnections();
212 return std::make_unique<BasicModelStatePair>(std::move(resultModel));
219 for (
auto& step : scalingDocument->updComponentList<
ScalingStep>()) {
220 step.applyScalingStep(scalingCache, scalingParams, *sourceModel, resultModel);
224 return std::make_unique<BasicModelStatePair>(std::move(resultModel));
228 template<
typename T = OpenSim::Component>
229 T* findScalingComponentMut(
const OpenSim::ComponentPath& p) {
return FindComponentMut<T>(*scalingDocument, p); }
231 std::shared_ptr<BasicModelStatePair> sourceModel = std::make_shared<BasicModelStatePair>();
232 std::shared_ptr<ModelWarperV3Document> scalingDocument = std::make_shared<ModelWarperV3Document>();
Definition basic_model_state_pair.h:22
Definition model_state_pair.h:19
Definition model_warper_v3_document.h:25
Definition scaling_cache.h:30
Definition scaling_parameters.h:14
Definition scaling_state.h:18
void applyScalingObjectPropertyEdit(osc::ObjectPropertyEdit edit)
Definition scaling_state.h:99
std::unique_ptr< BasicModelStatePair > tryGenerateScaledModel(ScalingCache &scalingCache) const
Definition scaling_state.h:198
void resetScalingDocument()
Definition scaling_state.h:157
bool eraseScalingStep(const OpenSim::ComponentPath &path)
Definition scaling_state.h:90
void addScalingStep(std::unique_ptr< ScalingStep > step)
Definition scaling_state.h:82
const ModelStatePair & getSourceModel() const
Definition scaling_state.h:66
void loadSourceModelFromOsim(const std::filesystem::path &path)
Definition scaling_state.h:68
std::shared_ptr< const ModelWarperV3Document > getScalingDocumentPtr() const
Definition scaling_state.h:79
auto iterateScalingSteps() const
Definition scaling_state.h:81
bool hasScalingParameterDeclarations() const
Definition scaling_state.h:187
std::shared_ptr< ModelStatePair > getSourceModelPtr()
Definition scaling_state.h:67
std::vector< ScalingDocumentValidationMessage > getEnabledScalingStepValidationMessages(ScalingCache &scalingCache) const
Definition scaling_state.h:127
ScalingState()
Definition scaling_state.h:20
bool hasScalingStepValidationIssues(ScalingCache &scalingCache) const
Definition scaling_state.h:153
ScalingState(const ScalingState &other)
Definition scaling_state.h:26
void loadScalingDocument(const std::filesystem::path &path)
Definition scaling_state.h:163
bool hasScalingSteps() const
Definition scaling_state.h:80
~ScalingState() noexcept=default
ScalingState & operator=(ScalingState &&tmp) noexcept
Definition scaling_state.h:62
bool eraseScalingStep(ScalingStep &step)
Definition scaling_state.h:86
std::optional< std::filesystem::path > scalingDocumentFilesystemLocation() const
Definition scaling_state.h:177
ScalingState(ScalingState &&tmp) noexcept
Definition scaling_state.h:39
ScalingParameters getEffectiveScalingParameters() const
Definition scaling_state.h:188
bool setScalingParameterOverride(const std::string &scalingParamName, ScalingParameterValue newValue)
Definition scaling_state.h:189
void resetSourceModel()
Definition scaling_state.h:72
bool disableScalingStep(const OpenSim::ComponentPath &path)
Definition scaling_state.h:114
Definition scaling_step.h:25
Definition object_property_edit.h:15
void apply(OpenSim::AbstractProperty &)
const std::string & getPropertyName() const
const std::string & getComponentAbsPath() const
Definition component_registry.h:14
void InitializeModel(OpenSim::Model &)
double ScalingParameterValue
Definition scaling_parameter_value.h:9
OpenSim::AbstractProperty * FindPropertyMut(OpenSim::Component &, const std::string &)
SimTK::State & InitializeState(OpenSim::Model &)
Definition scaling_document_validation_message.h:12
OpenSim::ComponentPath sourceScalingStepAbsPath
Definition scaling_document_validation_message.h:13