Skip to content

Commit

Permalink
Rename ModelWarpDocument --> WarpableModel
Browse files Browse the repository at this point in the history
  • Loading branch information
adamkewley committed Jun 26, 2024
1 parent eff04ec commit 59bf26a
Show file tree
Hide file tree
Showing 20 changed files with 143 additions and 121 deletions.
4 changes: 2 additions & 2 deletions src/OpenSimCreator/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,6 @@ add_library(OpenSimCreator STATIC
Documents/ModelWarper/MaybePairedLandmark.h
Documents/ModelWarper/ModelWarpConfiguration.cpp
Documents/ModelWarper/ModelWarpConfiguration.h
Documents/ModelWarper/ModelWarpDocument.cpp
Documents/ModelWarper/ModelWarpDocument.h
Documents/ModelWarper/PointWarperFactories.cpp
Documents/ModelWarper/PointWarperFactories.h
Documents/ModelWarper/StationDefinedFrameWarperFactory.cpp
Expand All @@ -131,6 +129,8 @@ add_library(OpenSimCreator STATIC
Documents/ModelWarper/TPSLandmarkPairWarperFactory.h
Documents/ModelWarper/ValidationCheckResult.h
Documents/ModelWarper/ValidationCheckState.h
Documents/ModelWarper/WarpableModel.cpp
Documents/ModelWarper/WarpableModel.h
Documents/ModelWarper/WarpableOpenSimComponent.h
Documents/ModelWarper/WarpDetail.h

Expand Down
15 changes: 8 additions & 7 deletions src/OpenSimCreator/Documents/ModelWarper/CachedModelWarper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
#include <OpenSim/Simulation/Model/Model.h>
#include <OpenSimCreator/Documents/CustomComponents/InMemoryMesh.h>
#include <OpenSimCreator/Documents/Model/BasicModelStatePair.h>
#include <OpenSimCreator/Documents/ModelWarper/ModelWarpDocument.h>
#include <OpenSimCreator/Documents/ModelWarper/IPointWarperFactory.h>
#include <OpenSimCreator/Documents/ModelWarper/WarpableModel.h>
#include <OpenSimCreator/Utils/SimTKHelpers.h>
#include <oscar/Formats/OBJ.h>
#include <oscar/Platform/Log.h>
Expand All @@ -25,7 +26,7 @@ using namespace osc::mow;
namespace
{
std::unique_ptr<OpenSim::Geometry> WarpMesh(
const ModelWarpDocument& document,
const WarpableModel& document,
const OpenSim::Model& model,
const SimTK::State& state,
const OpenSim::Mesh& inputMesh,
Expand Down Expand Up @@ -88,7 +89,7 @@ namespace

class osc::mow::CachedModelWarper::Impl final {
public:
std::shared_ptr<const IConstModelStatePair> warp(const ModelWarpDocument& document)
std::shared_ptr<const IConstModelStatePair> warp(const WarpableModel& document)
{
if (document != m_PreviousDocument) {
m_PreviousResult = createWarpedModel(document);
Expand All @@ -97,7 +98,7 @@ class osc::mow::CachedModelWarper::Impl final {
return m_PreviousResult;
}

std::shared_ptr<const IConstModelStatePair> createWarpedModel(const ModelWarpDocument& document)
std::shared_ptr<const IConstModelStatePair> createWarpedModel(const WarpableModel& document)
{
// copy the model into an editable "warped" version
OpenSim::Model warpedModel{document.model()};
Expand Down Expand Up @@ -130,7 +131,7 @@ class osc::mow::CachedModelWarper::Impl final {
// iterate over each `PathPoint` in the model (incl. muscle points) and warp them by
// figuring out how each relates to a mesh in the model
//
// TODO: the `osc::mow::ModelWarpDocument` should handle figuring out each point's warper, because
// TODO: the `osc::mow::WarpableModel` should handle figuring out each point's warper, because
// there are situations where there isn't a 1:1 relationship between meshes and bodies
for (auto& pp : warpedModel.updComponentList<OpenSim::PathPoint>()) {
auto baseFramePath = pp.getParentFrame().findBaseFrame().getAbsolutePath();
Expand Down Expand Up @@ -199,7 +200,7 @@ class osc::mow::CachedModelWarper::Impl final {
);
}
private:
std::optional<ModelWarpDocument> m_PreviousDocument;
std::optional<WarpableModel> m_PreviousDocument;
std::shared_ptr<const IConstModelStatePair> m_PreviousResult;
};

Expand All @@ -210,7 +211,7 @@ osc::mow::CachedModelWarper::CachedModelWarper(CachedModelWarper&&) noexcept = d
CachedModelWarper& osc::mow::CachedModelWarper::operator=(CachedModelWarper&&) noexcept = default;
osc::mow::CachedModelWarper::~CachedModelWarper() noexcept = default;

std::shared_ptr<const IConstModelStatePair> osc::mow::CachedModelWarper::warp(const ModelWarpDocument& document)
std::shared_ptr<const IConstModelStatePair> osc::mow::CachedModelWarper::warp(const WarpableModel& document)
{
return m_Impl->warp(document);
}
4 changes: 2 additions & 2 deletions src/OpenSimCreator/Documents/ModelWarper/CachedModelWarper.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <memory>

namespace OpenSim { class Model; }
namespace osc::mow { class ModelWarpDocument; }
namespace osc::mow { class WarpableModel; }

namespace osc::mow
{
Expand All @@ -21,7 +21,7 @@ namespace osc::mow
CachedModelWarper& operator=(CachedModelWarper&&) noexcept;
~CachedModelWarper() noexcept;

std::shared_ptr<const IConstModelStatePair> warp(const ModelWarpDocument&);
std::shared_ptr<const IConstModelStatePair> warp(const WarpableModel&);
private:
class Impl;
std::unique_ptr<Impl> m_Impl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <OpenSimCreator/Documents/ModelWarper/IFrameWarper.h>
#include <OpenSimCreator/Documents/ModelWarper/IValidateable.h>

namespace osc::mow { class ModelWarpDocument; }
namespace osc::mow { class WarpableModel; }

namespace osc::mow
{
Expand All @@ -22,11 +22,11 @@ namespace osc::mow
public:
virtual ~IFrameWarperFactory() noexcept = default;

std::unique_ptr<IFrameWarper> tryCreateFrameWarper(const ModelWarpDocument& document) const
std::unique_ptr<IFrameWarper> tryCreateFrameWarper(const WarpableModel& document) const
{
return implTryCreateFrameWarper(document);
}
private:
virtual std::unique_ptr<IFrameWarper> implTryCreateFrameWarper(const ModelWarpDocument& document) const = 0;
virtual std::unique_ptr<IFrameWarper> implTryCreateFrameWarper(const WarpableModel& document) const = 0;
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <memory>
#include <span>

namespace osc::mow { class ModelWarpDocument; }
namespace osc::mow { class WarpableModel; }

namespace osc::mow
{
Expand All @@ -28,8 +28,8 @@ namespace osc::mow
public:
virtual ~IPointWarperFactory() = default;

std::unique_ptr<IPointWarper> tryCreatePointWarper(const ModelWarpDocument& document) const { return implTryCreatePointWarper(document); }
std::unique_ptr<IPointWarper> tryCreatePointWarper(const WarpableModel& document) const { return implTryCreatePointWarper(document); }
private:
virtual std::unique_ptr<IPointWarper> implTryCreatePointWarper(const ModelWarpDocument&) const = 0;
virtual std::unique_ptr<IPointWarper> implTryCreatePointWarper(const WarpableModel&) const = 0;
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ std::vector<ValidationCheckResult> osc::mow::IdentityFrameWarperFactory::implVal
};
}

std::unique_ptr<IFrameWarper> osc::mow::IdentityFrameWarperFactory::implTryCreateFrameWarper(const ModelWarpDocument&) const
std::unique_ptr<IFrameWarper> osc::mow::IdentityFrameWarperFactory::implTryCreateFrameWarper(const WarpableModel&) const
{
class IdentityFrameWarper final : public IFrameWarper {
private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <memory>
#include <vector>

namespace osc::mow { class ModelWarpDocument; }
namespace osc::mow { class WarpableModel; }

namespace osc::mow
{
Expand All @@ -21,6 +21,6 @@ namespace osc::mow
std::unique_ptr<IFrameWarperFactory> implClone() const override;
std::vector<WarpDetail> implWarpDetails() const override;
std::vector<ValidationCheckResult> implValidate() const override;
std::unique_ptr<IFrameWarper> implTryCreateFrameWarper(const ModelWarpDocument&) const override;
std::unique_ptr<IFrameWarper> implTryCreateFrameWarper(const WarpableModel&) const override;
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#pragma once

namespace osc
{
enum class OffsetFrameFallbackStrategy {
Error,
Ignore,
WarpPosition,
NUM_OPTIONS,
Default = Error,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ std::vector<ValidationCheckResult> osc::mow::StationDefinedFrameWarperFactory::i
};
}

std::unique_ptr<IFrameWarper> osc::mow::StationDefinedFrameWarperFactory::implTryCreateFrameWarper(const ModelWarpDocument&) const
std::unique_ptr<IFrameWarper> osc::mow::StationDefinedFrameWarperFactory::implTryCreateFrameWarper(const WarpableModel&) const
{
class IdentityFrameWarper final : public IFrameWarper {
private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <memory>
#include <vector>

namespace osc::mow { class ModelWarpDocument; }
namespace osc::mow { class WarpableModel; }

namespace osc::mow
{
Expand All @@ -25,6 +25,6 @@ namespace osc::mow
std::unique_ptr<IFrameWarperFactory> implClone() const override;
std::vector<WarpDetail> implWarpDetails() const override;
std::vector<ValidationCheckResult> implValidate() const override;
std::unique_ptr<IFrameWarper> implTryCreateFrameWarper(const ModelWarpDocument&) const override;
std::unique_ptr<IFrameWarper> implTryCreateFrameWarper(const WarpableModel&) const override;
};
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#include "TPSLandmarkPairWarperFactory.h"

#include <OpenSimCreator/Documents/Landmarks/LandmarkHelpers.h>
#include <OpenSimCreator/Documents/ModelWarper/ModelWarpDocument.h>
#include <OpenSimCreator/Documents/ModelWarper/ValidationCheckState.h>
#include <OpenSimCreator/Documents/ModelWarper/WarpableModel.h>
#include <OpenSimCreator/Utils/TPS3D.h>

#include <oscar/Maths/Vec2.h>
Expand Down Expand Up @@ -319,7 +319,7 @@ std::vector<ValidationCheckResult> osc::mow::TPSLandmarkPairWarperFactory::implV
return rv;
}

std::unique_ptr<IPointWarper> osc::mow::TPSLandmarkPairWarperFactory::implTryCreatePointWarper(const ModelWarpDocument& document) const
std::unique_ptr<IPointWarper> osc::mow::TPSLandmarkPairWarperFactory::implTryCreatePointWarper(const WarpableModel& document) const
{
class TPSWarper : public IPointWarper {
public:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ namespace osc::mow
std::unique_ptr<IPointWarperFactory> implClone() const override;
std::vector<WarpDetail> implWarpDetails() const override;
std::vector<ValidationCheckResult> implValidate() const override;
std::unique_ptr<IPointWarper> implTryCreatePointWarper(const ModelWarpDocument&) const override;
std::unique_ptr<IPointWarper> implTryCreatePointWarper(const WarpableModel&) const override;

std::filesystem::path m_SourceMeshAbsoluteFilepath;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include "ModelWarpDocument.h"
#include "WarpableModel.h"

#include <OpenSimCreator/Documents/ModelWarper/ValidationCheckState.h>
#include <OpenSimCreator/Utils/OpenSimHelpers.h>
Expand All @@ -16,37 +16,37 @@
using namespace osc;
using namespace osc::mow;

osc::mow::ModelWarpDocument::ModelWarpDocument() :
osc::mow::WarpableModel::WarpableModel() :
m_ModelState{make_cow<BasicModelStatePair>()},
m_ModelWarpConfig{make_cow<ModelWarpConfiguration>()},
m_MeshWarpLookup{make_cow<PointWarperFactories>()},
m_FrameWarpLookup{make_cow<FrameWarperFactories>()}
{}

osc::mow::ModelWarpDocument::ModelWarpDocument(const std::filesystem::path& osimFileLocation) :
osc::mow::WarpableModel::WarpableModel(const std::filesystem::path& osimFileLocation) :
m_ModelState{make_cow<BasicModelStatePair>(osimFileLocation)},
m_ModelWarpConfig{make_cow<ModelWarpConfiguration>(osimFileLocation, m_ModelState->getModel())},
m_MeshWarpLookup{make_cow<PointWarperFactories>(osimFileLocation, m_ModelState->getModel(), *m_ModelWarpConfig)},
m_FrameWarpLookup{make_cow<FrameWarperFactories>(osimFileLocation, m_ModelState->getModel(), *m_ModelWarpConfig)}
{}

osc::mow::ModelWarpDocument::ModelWarpDocument(const ModelWarpDocument&) = default;
osc::mow::ModelWarpDocument::ModelWarpDocument(ModelWarpDocument&&) noexcept = default;
osc::mow::ModelWarpDocument& osc::mow::ModelWarpDocument::operator=(const ModelWarpDocument&) = default;
osc::mow::ModelWarpDocument& osc::mow::ModelWarpDocument::operator=(ModelWarpDocument&&) noexcept = default;
osc::mow::ModelWarpDocument::~ModelWarpDocument() noexcept = default;
osc::mow::WarpableModel::WarpableModel(const WarpableModel&) = default;
osc::mow::WarpableModel::WarpableModel(WarpableModel&&) noexcept = default;
osc::mow::WarpableModel& osc::mow::WarpableModel::operator=(const WarpableModel&) = default;
osc::mow::WarpableModel& osc::mow::WarpableModel::operator=(WarpableModel&&) noexcept = default;
osc::mow::WarpableModel::~WarpableModel() noexcept = default;

const OpenSim::Model& osc::mow::ModelWarpDocument::model() const
const OpenSim::Model& osc::mow::WarpableModel::model() const
{
return m_ModelState->getModel();
}

const IConstModelStatePair& osc::mow::ModelWarpDocument::modelstate() const
const IConstModelStatePair& osc::mow::WarpableModel::modelstate() const
{
return *m_ModelState;
}

std::vector<WarpDetail> osc::mow::ModelWarpDocument::details(const OpenSim::Mesh& mesh) const
std::vector<WarpDetail> osc::mow::WarpableModel::details(const OpenSim::Mesh& mesh) const
{
std::vector<WarpDetail> rv;
rv.emplace_back("OpenSim::Mesh path in the OpenSim::Model", GetAbsolutePathString(mesh));
Expand All @@ -59,7 +59,7 @@ std::vector<WarpDetail> osc::mow::ModelWarpDocument::details(const OpenSim::Mesh
return rv;
}

std::vector<ValidationCheckResult> osc::mow::ModelWarpDocument::validate(const OpenSim::Mesh& mesh) const
std::vector<ValidationCheckResult> osc::mow::WarpableModel::validate(const OpenSim::Mesh& mesh) const
{
if (const IPointWarperFactory* p = m_MeshWarpLookup->find(GetAbsolutePathString(mesh))) {
return p->validate();
Expand All @@ -69,26 +69,26 @@ std::vector<ValidationCheckResult> osc::mow::ModelWarpDocument::validate(const O
}
}

ValidationCheckState osc::mow::ModelWarpDocument::state(const OpenSim::Mesh& mesh) const
ValidationCheckState osc::mow::WarpableModel::state(const OpenSim::Mesh& mesh) const
{
const IPointWarperFactory* p = m_MeshWarpLookup->find(GetAbsolutePathString(mesh));
return p ? p->state() : ValidationCheckState::Error;
}

const IPointWarperFactory* osc::mow::ModelWarpDocument::findMeshWarp(const OpenSim::Mesh& mesh) const
const IPointWarperFactory* osc::mow::WarpableModel::findMeshWarp(const OpenSim::Mesh& mesh) const
{
return m_MeshWarpLookup->find(GetAbsolutePathString(mesh));
}

std::vector<WarpDetail> osc::mow::ModelWarpDocument::details(const OpenSim::PhysicalOffsetFrame& pof) const
std::vector<WarpDetail> osc::mow::WarpableModel::details(const OpenSim::PhysicalOffsetFrame& pof) const
{
if (const IFrameWarperFactory* p = m_FrameWarpLookup->find(GetAbsolutePathString(pof))) {
return p->details();
}
return {};
}

std::vector<ValidationCheckResult> osc::mow::ModelWarpDocument::validate(const OpenSim::PhysicalOffsetFrame& pof) const
std::vector<ValidationCheckResult> osc::mow::WarpableModel::validate(const OpenSim::PhysicalOffsetFrame& pof) const
{
if (const IFrameWarperFactory* p = m_FrameWarpLookup->find(GetAbsolutePathString(pof))) {
return p->validate();
Expand All @@ -98,14 +98,14 @@ std::vector<ValidationCheckResult> osc::mow::ModelWarpDocument::validate(const O
}
}

ValidationCheckState osc::mow::ModelWarpDocument::state(
ValidationCheckState osc::mow::WarpableModel::state(
const OpenSim::PhysicalOffsetFrame& pof) const
{
const IFrameWarperFactory* p = m_FrameWarpLookup->find(GetAbsolutePathString(pof));
return p ? p->state() : ValidationCheckState::Error;
}

ValidationCheckState osc::mow::ModelWarpDocument::state() const
ValidationCheckState osc::mow::WarpableModel::state() const
{
ValidationCheckState rv = ValidationCheckState::Ok;
for (const auto& mesh : model().getComponentList<OpenSim::Mesh>()) {
Expand All @@ -117,27 +117,27 @@ ValidationCheckState osc::mow::ModelWarpDocument::state() const
return rv;
}

float osc::mow::ModelWarpDocument::getWarpBlendingFactor() const
float osc::mow::WarpableModel::getWarpBlendingFactor() const
{
return m_ModelWarpConfig->getWarpBlendingFactor();
}

void osc::mow::ModelWarpDocument::setWarpBlendingFactor(float v)
void osc::mow::WarpableModel::setWarpBlendingFactor(float v)
{
m_ModelWarpConfig.upd()->setWarpBlendingFactor(v);
}

bool osc::mow::ModelWarpDocument::getShouldWriteWarpedMeshesToDisk() const
bool osc::mow::WarpableModel::getShouldWriteWarpedMeshesToDisk() const
{
return m_ModelWarpConfig->getShouldWriteWarpedMeshesToDisk();
}

void osc::mow::ModelWarpDocument::setShouldWriteWarpedMeshesToDisk(bool v)
void osc::mow::WarpableModel::setShouldWriteWarpedMeshesToDisk(bool v)
{
m_ModelWarpConfig.upd()->setShouldWriteWarpedMeshesToDisk(v);
}

std::optional<std::filesystem::path> osc::mow::ModelWarpDocument::getWarpedMeshesOutputDirectory() const
std::optional<std::filesystem::path> osc::mow::WarpableModel::getWarpedMeshesOutputDirectory() const
{
const auto osimFileLocation = getOsimFileLocation();
if (not osimFileLocation) {
Expand All @@ -146,12 +146,12 @@ std::optional<std::filesystem::path> osc::mow::ModelWarpDocument::getWarpedMeshe
return std::filesystem::weakly_canonical(osimFileLocation->parent_path() / m_ModelWarpConfig->getWarpedMeshesOutputDirectory());
}

std::optional<std::filesystem::path> osc::mow::ModelWarpDocument::getOsimFileLocation() const
std::optional<std::filesystem::path> osc::mow::WarpableModel::getOsimFileLocation() const
{
return TryFindInputFile(m_ModelState->getModel());
}

std::vector<ValidationCheckResult> osc::mow::ModelWarpDocument::implValidate() const
std::vector<ValidationCheckResult> osc::mow::WarpableModel::implValidate() const
{
std::vector<ValidationCheckResult> rv;
for (const auto& mesh : model().getComponentList<OpenSim::Mesh>()) {
Expand Down
Loading

0 comments on commit 59bf26a

Please sign in to comment.