Skip to content

Instantly share code, notes, and snippets.

@adamkewley
Last active June 26, 2024 11:13
Show Gist options
  • Save adamkewley/b9d15d1f80f54a532b2f4e59359ba8b0 to your computer and use it in GitHub Desktop.
Save adamkewley/b9d15d1f80f54a532b2f4e59359ba8b0 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="utf-8" ?>
<OpenSimDocument Version="40000">
<ModelWarperConfiguration>
<!-- `OffsetFrameWarpingStrategy`s used to warp specific frames in the model. A `StrategyTarget`
of `*` can be used as a lowest-priority wildcard to specify which strategy the warping engine
should use when it cannot find a more specific one for a given `OpenSim::PhysicalOffsetFrame`
in the model -->
<OffsetFrameWarpingStrategies>
<!-- The `ThinPlateSplineOnlyTranslationOffsetFrameWarpingStrategy` uses the thin-plate
spline algorithm to only warp the the `translation` part of the `OpenSim::OffsetFrame`,
leaving the `orientation` un-warped -->
<ThinPlateSplineOnlyTranslationOffsetFrameWarpingStrategy>
<StrategyTargets>
<StrategyTarget>some_offset_frame</StrategyTarget>
<StrategyTarget>some_other_offset_frame</StrategyTarget>
<StrategyTarget>/bodyset/specific_path_to/another_offset_frame</StrategyTarget>
</StrategyTargets>
<!-- If `MeshSources` isn't specified then the warping engine will try its best to figure out
if there exists a common set of meshes that all of the `StrategyTarget`s are attached to,
followed by using that set as a warp source -->
<PointSources>
<LandmarkedMeshPointSource>pelvis.vtp</LandmarkedMeshPointSource>
</PointSources>
</ThinPlateSplineOnlyTranslationOffsetFrameWarpingStrategy>
<!-- The `ProduceErrorOffsetFrameWarpingStrategy` will make the engine produce an error
if executed (i.e. if any frame has this strategy applied to it) -->
<ProduceErrorOffsetFrameWarpingStrategy>
<StrategyTargets>
<StrategyTarget>*</StrategyTarget> <!-- catch-all -->
</StrategyTargets>
</ProduceErrorOffsetFrameWarpingStrategy>
<!-- The `LeastSquaresOffsetFrameWarpingStrategy` is used to approximate the `translation`
and `orientation` properties of the target `OpenSim::OffsetFrame`by least-squares
fitting `OpenSim::Point`s in the model -->
<LeastSquaresOffsetFrameWarpingStrategy>
<StrategyTargets>
<StrategyTarget>some_annoying_offset_frame</StrategyTarget>
</StrategyTargets>
<PointsToFit>
<PointToFit>p1</PointToFit>
<PointToFit>p2</PointToFit>
<PointToFit>p3</PointToFit>
</PointsToFit>
</LeastSquaresOffsetFrameWarpingStrategy>
</OffsetFrameWarpingStrategies>
<!-- Lists all strategies used to warp stations (incl. muscle points) in the model -->
<StationWarpingStrategies>
<ThinPlateSplineStationWarpingStrategy>
<StrategyTargets>
<StrategyTarget>p4</StrategyTarget>
<StrategyTarget>p5</StrategyTarget>
</StrategyTargets>
<!-- If this isn't specified then the engine will try to figure it out -->
<MeshSources>
<MeshSource>pelvis.vtp</MeshSource>
</MeshSources>
</ThinPlateSplineStationWarpingStrategy>
<!-- This is what the warping engine installs, if not specified -->
<ThinPlateSplineStationWarpingStrategy>
<StrategyTargets>
<StrategyTarget>*</StrategyTarget>
</StrategyTargets>
</ThinPlateSplineStationWarpingStrategy>
</StationWarpingStrategies>
<!-- Lists all strategies used to warp muscle parameters in the model -->
<MuscleParameterWarpingStrategies>
<ModeneseMuscleParameterWarpingStrategy>
<StrategyTargets>
<StrategyTarget>some_muscle</StrategyTarget>
</StrategyTargets>
<some_scaling_param>50</some_scaling_param>
</ModeneseMuscleParameterWarpingStrategy>
<!-- This is what the warping engine installs, if not specified in the configuration file -->
<IdentityMuscleParameterWarpingStrategy>
<StrategyTargets>
<StrategyTarget>*</StrategyTarget>
</StrategyTargets>
</IdentityMuscleParameterWarpingStrategy>
</MuscleParameterWarpingStrategies>
<MeshWarpingStrategies>
<ThinPlateSplineMeshWarpingStrategy>
<StrategyTargets>
<StrategyTarget priority="1">*</StrategyTarget>
</StrategyTargets>
</ThinPlateSplineMeshWarpingStrategy>
</MeshWarpingStrategies>
</ModelWarperConfiguration>
</OpenSimDocument>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment