SkeletonRepresentation.h
Go to the documentation of this file.
// This file is a part of the OpenSurgSim project.
// Copyright 2013, SimQuest Solutions Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SURGSIM_GRAPHICS_SKELETONREPRESENTATION_H
#define SURGSIM_GRAPHICS_SKELETONREPRESENTATION_H
#include <string>
#include "SurgSim/Framework/FrameworkConvert.h"
#include "SurgSim/Graphics/Model.h"
#include "SurgSim/Graphics/Representation.h"
#include "SurgSim/Math/MathConvert.h"
#include "SurgSim/Math/RigidTransform.h"
namespace SurgSim
{
namespace Graphics
{
class SkeletonRepresentation : public virtual Representation
{
public:
explicit SkeletonRepresentation(const std::string& name): Representation(name)
{
SURGSIM_ADD_SERIALIZABLE_PROPERTY(SkeletonRepresentation, std::shared_ptr<SurgSim::Framework::Asset>,
Model, getModel, setModel);
// Enables the alternative use of the model file instead of the actual mesh object
DecoderType decoder = std::bind(&SkeletonRepresentation::loadModel,
this,
std::bind(&YAML::Node::as<std::string>, std::placeholders::_1));
setDecoder("ModelFileName", decoder);
SetterType setter = std::bind(&SkeletonRepresentation::loadModel,
this,
std::bind(SurgSim::Framework::convert<std::string>, std::placeholders::_1));
setSetter("ModelFileName", setter);
typedef std::map<std::string, SurgSim::Math::RigidTransform3d> PoseMap;
SURGSIM_ADD_SERIALIZABLE_PROPERTY(SkeletonRepresentation, PoseMap,
NeutralPoses, getNeutralBonePoses, setNeutralBonePoses);
}
virtual void loadModel(const std::string& fileName) = 0;
virtual void setModel(std::shared_ptr<SurgSim::Framework::Asset> model) = 0;
virtual std::shared_ptr<Model> getModel() const = 0;
virtual void setBonePose(const std::string& name, const SurgSim::Math::RigidTransform3d& pose) = 0;
virtual SurgSim::Math::RigidTransform3d getBonePose(const std::string& name) const = 0;
virtual void setNeutralBonePose(const std::string& name, const SurgSim::Math::RigidTransform3d& pose) = 0;
virtual SurgSim::Math::RigidTransform3d getNeutralBonePose(const std::string& name) const = 0;
protected:
virtual void setNeutralBonePoses(const std::map<std::string, SurgSim::Math::RigidTransform3d>& poses) = 0;
virtual std::map<std::string, SurgSim::Math::RigidTransform3d> getNeutralBonePoses() const = 0;
};
}; // namespace Graphics
}; // namespace SurgSim
#endif // SURGSIM_GRAPHICS_SKELETONREPRESENTATION_H
SurgSim::Framework::Accessible::SetterType
std::function< void(boost::any)> SetterType
Definition: Accessible.h:48
SurgSim
Definition: CompoundShapeToGraphics.cpp:29
SurgSim::Graphics::SkeletonRepresentation::getNeutralBonePoses
virtual std::map< std::string, SurgSim::Math::RigidTransform3d > getNeutralBonePoses() const =0
Get all the neutral poses.
SurgSim::Graphics::SkeletonRepresentation::setBonePose
virtual void setBonePose(const std::string &name, const SurgSim::Math::RigidTransform3d &pose)=0
Set the pose for a given bone.
Model.h
SurgSim::Graphics::SkeletonRepresentation::SkeletonRepresentation
SkeletonRepresentation(const std::string &name)
Constructor.
Definition: SkeletonRepresentation.h:42
MathConvert.h
This contains a series of functions to encode and decode Eigen data structures to and from YAML nodes...
Representation.h
SurgSim::Graphics::SkeletonRepresentation
Skeleton representation is used to move a mesh based on the movements of pre-selected control points ...
Definition: SkeletonRepresentation.h:36
SurgSim::Framework::Accessible::DecoderType
std::function< void(const YAML::Node *)> DecoderType
Definition: Accessible.h:51
SURGSIM_ADD_SERIALIZABLE_PROPERTY
#define SURGSIM_ADD_SERIALIZABLE_PROPERTY(class, type, property, getter, setter)
A macro to register a serializable property, this needs to support reading, writing and all the conve...
Definition: Accessible.h:225
SurgSim::Graphics::SkeletonRepresentation::setModel
virtual void setModel(std::shared_ptr< SurgSim::Framework::Asset > model)=0
Set the current model to the model passed.
SurgSim::Graphics::SkeletonRepresentation::getModel
virtual std::shared_ptr< Model > getModel() const =0
SurgSim::Graphics::Model
Definition: Model.h:27
SurgSim::Framework::Accessible::setSetter
void setSetter(const std::string &name, SetterType func)
Sets a setter for a given property.
Definition: Accessible.cpp:80
SurgSim::Graphics::Representation
Base graphics representation class, which defines the interface that all graphics representations mus...
Definition: Representation.h:39
RigidTransform.h
Definitions of 2x2 and 3x3 rigid (isometric) transforms.
SurgSim::Math::RigidTransform3d
Eigen::Transform< double, 3, Eigen::Isometry > RigidTransform3d
A 3D rigid (isometric) transform, represented as doubles.
Definition: RigidTransform.h:46
SurgSim::Graphics::SkeletonRepresentation::loadModel
virtual void loadModel(const std::string &fileName)=0
Convenience function to trigger the load of the model with the given filename, if successful...
SurgSim::Graphics::SkeletonRepresentation::getBonePose
virtual SurgSim::Math::RigidTransform3d getBonePose(const std::string &name) const =0
Get the pose for a given bone.
SurgSim::Framework::Accessible::setDecoder
void setDecoder(const std::string &name, DecoderType decoder)
Sets the functions used to convert data from a YAML::Node.
Definition: Accessible.cpp:125
FrameworkConvert.h
SurgSim::Graphics::SkeletonRepresentation::setNeutralBonePoses
virtual void setNeutralBonePoses(const std::map< std::string, SurgSim::Math::RigidTransform3d > &poses)=0
Set neutral poses for a set of bones.
SurgSim::Graphics::SkeletonRepresentation::setNeutralBonePose
virtual void setNeutralBonePose(const std::string &name, const SurgSim::Math::RigidTransform3d &pose)=0
Set the neutral pose for a given bone.
SurgSim::Graphics::SkeletonRepresentation::getNeutralBonePose
virtual SurgSim::Math::RigidTransform3d getNeutralBonePose(const std::string &name) const =0
Get the neutral pose for a given bone.