TVM  0.9.4
Plane.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <tvm/api.h>
6 #include <tvm/defs.h>
7 
9 
10 namespace tvm
11 {
12 
13 namespace geometry
14 {
15 
36 class TVM_DLLAPI Plane : public graph::abstract::Node<Plane>
37 {
38 public:
39  SET_OUTPUTS(Plane, Position, Velocity, Acceleration)
40 
41 
48  Plane(const Eigen::Vector3d & normal, double offset);
49 
57  Plane(const Eigen::Vector3d & normal, const Eigen::Vector3d & point);
58 
63  template<typename S, typename EnumO>
64  void setIntegrator(std::shared_ptr<S> integrator, EnumO oPosition, EnumO oVelocity, EnumO oAcceleration)
65  {
66  addDirectDependency(Output::Position, integrator, oPosition);
67  addDirectDependency(Output::Velocity, integrator, oVelocity);
68  addDirectDependency(Output::Acceleration, integrator, oAcceleration);
69  }
70 
77  template<typename S,
78  typename EnumO,
79  typename std::enable_if<std::is_base_of<tvm::graph::abstract::Outputs, S>::value, int>::type = 0>
80  void setIntegrator(S & integrator, EnumO oPosition, EnumO oVelocity, EnumO oAcceleration)
81  {
82  addDirectDependency(Output::Position, integrator, oPosition);
83  addDirectDependency(Output::Velocity, integrator, oVelocity);
84  addDirectDependency(Output::Acceleration, integrator, oAcceleration);
85  }
86 
91  void position(const Eigen::Vector3d & normal, const Eigen::Vector3d & point);
92 
94  void position(const Eigen::Vector3d & normal, double offset);
95 
97  void velocity(const Eigen::Vector3d & nDot, const Eigen::Vector3d & speed);
98 
100  void acceleration(const Eigen::Vector3d & nDotDot, const Eigen::Vector3d & accel);
101 
103  const Eigen::Vector3d & normal() const { return normal_; }
104 
106  double offset() const { return offset_; }
107 
109  const Eigen::Vector3d & point() const { return point_; }
110 
112  const Eigen::Vector3d & normalDot() const { return normalDot_; }
113 
115  const Eigen::Vector3d & speed() const { return speed_; }
116 
118  const Eigen::Vector3d & normalDotDot() const { return normalDotDot_; }
119 
121  const Eigen::Vector3d & acceleration() const { return accel_; }
122 
123 private:
124  Eigen::Vector3d normal_;
125  double offset_;
126  Eigen::Vector3d point_ = Eigen::Vector3d::Zero();
127  Eigen::Vector3d normalDot_ = Eigen::Vector3d::Zero();
128  Eigen::Vector3d speed_ = Eigen::Vector3d::Zero();
129  Eigen::Vector3d normalDotDot_ = Eigen::Vector3d::Zero();
130  Eigen::Vector3d accel_ = Eigen::Vector3d::Zero();
131 };
132 
133 using PlanePtr = std::shared_ptr<Plane>;
134 
135 } // namespace geometry
136 
137 } // namespace tvm
#define SET_OUTPUTS(SelfT,...)
Definition: Outputs.h:113
#define TVM_DLLAPI
Definition: api.h:35
Definition: Plane.h:37
const Eigen::Vector3d & acceleration() const
Definition: Plane.h:121
void velocity(const Eigen::Vector3d &nDot, const Eigen::Vector3d &speed)
const Eigen::Vector3d & point() const
Definition: Plane.h:109
void position(const Eigen::Vector3d &normal, const Eigen::Vector3d &point)
const Eigen::Vector3d & normalDotDot() const
Definition: Plane.h:118
void position(const Eigen::Vector3d &normal, double offset)
const Eigen::Vector3d & speed() const
Definition: Plane.h:115
const Eigen::Vector3d & normal() const
Definition: Plane.h:103
void acceleration(const Eigen::Vector3d &nDotDot, const Eigen::Vector3d &accel)
const Eigen::Vector3d & normalDot() const
Definition: Plane.h:112
double offset() const
Definition: Plane.h:106
void setIntegrator(S &integrator, EnumO oPosition, EnumO oVelocity, EnumO oAcceleration)
Definition: Plane.h:80
Definition: Node.h:27
Definition: AffineExprDetail.h:95
Definition: probe.h:44
std::shared_ptr< Plane > PlanePtr
Definition: Plane.h:133
Definition: Clock.h:12