11#include <OpenSim/Simulation/Model/Geometry.h>
27 OpenSim_DECLARE_LIST_PROPERTY(meshes, std::string,
"Component path(s), relative to the model, that locates mesh(es) that should be scaled by this scaling step (e.g. `/bodyset/torso/torso_geom_4`)");
33 setDescription(
"Warps mesh(es) in the source model by applying a Thin-Plate Spline (TPS) warp to each vertex in the souce mesh(es).");
34 constructProperty_meshes();
40 const OpenSim::Model& sourceModel)
const final
46 if (getProperty_meshes().
empty()) {
51 for (
int i = 0; i < getProperty_meshes().size(); ++i) {
52 const auto* mesh = FindComponent<OpenSim::Mesh>(sourceModel, get_meshes(i));
54 std::stringstream msg;
55 msg << get_meshes(i) <<
": Cannot find entry in 'meshes' in the source model (or it isn't a Mesh).";
66 const OpenSim::Model& sourceModel,
67 OpenSim::Model& resultModel)
const final
72 for (
int i = 0; i < getProperty_meshes().size(); ++i) {
73 const auto* sourceMesh = FindComponent<OpenSim::Mesh>(sourceModel, get_meshes(i));
77 const auto* resultMesh = FindComponent<OpenSim::Mesh>(resultModel, get_meshes(i));
80 std::unique_ptr<InMemoryMesh> warpedMesh = scalingCache.lookupTPSMeshWarp(
85 *commonParams.sourceLandmarksFrame,
86 *commonParams.resultLandmarksFrame,
87 commonParams.tpsInputs,
88 commonParams.compensateForFrameChanges
93 auto* resultMeshMut = FindComponentMut<OpenSim::Mesh>(resultModel, get_meshes(i));
94 OSC_ASSERT_ALWAYS(resultMesh &&
"could not find a corresponding mesh in the result model");
96 OSC_ASSERT_ALWAYS(FindComponent<InMemoryMesh>(resultModel, get_meshes(i)) !=
nullptr);
#define OSC_ASSERT_ALWAYS(expr)
Definition assertions.h:20
Definition scaling_cache.h:30
Definition scaling_parameters.h:14
virtual std::vector< ScalingStepValidationMessage > implValidate(ScalingCache &, const ScalingParameters &, const OpenSim::Model &) const
Definition scaling_step.h:92
Definition thin_plate_spline_meshes_scaling_step.h:24
ThinPlateSplineMeshesScalingStep()
Definition thin_plate_spline_meshes_scaling_step.h:30
void implApplyScalingStep(ScalingCache &scalingCache, const ScalingParameters ¶meters, const OpenSim::Model &sourceModel, OpenSim::Model &resultModel) const final
Definition thin_plate_spline_meshes_scaling_step.h:63
std::vector< ScalingStepValidationMessage > implValidate(ScalingCache &cache, const ScalingParameters ¶ms, const OpenSim::Model &sourceModel) const final
Definition thin_plate_spline_meshes_scaling_step.h:37
Definition toggleable_thin_plate_spline_scaling_step.h:14
CommonParameters calcTPSScalingStepCommonParams(const ScalingParameters ¶meters, const OpenSim::Model &sourceModel, const OpenSim::Model &resultModel) const
Definition toggleable_thin_plate_spline_scaling_step.h:32
Definition component_registry.h:14
void InitializeModel(OpenSim::Model &)
bool empty(const OpenSim::Set< T, C > &s)
Definition open_sim_helpers.h:149
SimTK::State & InitializeState(OpenSim::Model &)
void OverwriteGeometry(OpenSim::Model &, OpenSim::Geometry &oldGeometry, std::unique_ptr< OpenSim::Geometry > newGeometry)