Vulcan
Aerospace Engineering Utilities Built on Janus
Loading...
Searching...
No Matches
TransformChain.hpp
Go to the documentation of this file.
1// Vulcan Transform Chain
2// Executes a pre-resolved frame path using transform providers
3#pragma once
4
8
9#include <memory>
10#include <vector>
11
12namespace vulcan {
13
14template <typename Scalar> class TransformChain {
15 public:
17 const std::vector<std::shared_ptr<TransformProvider<Scalar>>>
18 &ascending_providers,
19 const std::vector<std::shared_ptr<TransformProvider<Scalar>>>
20 &descending_providers)
21 : path_(path), ascending_(ascending_providers),
22 descending_(descending_providers) {}
23
24 [[nodiscard]] Vec3<Scalar> transform_vector(const Vec3<Scalar> &v) const {
25 Vec3<Scalar> result = v;
26
27 for (const auto &provider : ascending_) {
28 result = provider->to_parent(result);
29 }
30 for (const auto &provider : descending_) {
31 result = provider->from_parent(result);
32 }
33
34 return result;
35 }
36
37 [[nodiscard]] Vec3<Scalar>
38 transform_position(const Vec3<Scalar> &pos) const {
39 Vec3<Scalar> result = pos;
40
41 for (const auto &provider : ascending_) {
42 result = provider->position_to_parent(result);
43 }
44 for (const auto &provider : descending_) {
45 result = provider->position_from_parent(result);
46 }
47
48 return result;
49 }
50
51 [[nodiscard]] int length() const {
52 return static_cast<int>(ascending_.size() + descending_.size());
53 }
54
55 [[nodiscard]] const FramePath &path() const { return path_; }
56
57 private:
58 FramePath path_;
59 std::vector<std::shared_ptr<TransformProvider<Scalar>>> ascending_;
60 std::vector<std::shared_ptr<TransformProvider<Scalar>>> descending_;
61};
62
63} // namespace vulcan
int length() const
Definition TransformChain.hpp:51
Vec3< Scalar > transform_vector(const Vec3< Scalar > &v) const
Definition TransformChain.hpp:24
const FramePath & path() const
Definition TransformChain.hpp:55
TransformChain(const FramePath &path, const std::vector< std::shared_ptr< TransformProvider< Scalar > > > &ascending_providers, const std::vector< std::shared_ptr< TransformProvider< Scalar > > > &descending_providers)
Definition TransformChain.hpp:16
Vec3< Scalar > transform_position(const Vec3< Scalar > &pos) const
Definition TransformChain.hpp:38
Definition Aerodynamics.hpp:11
Ordered path between frames from source to target.
Definition FrameRegistry.hpp:15
Interface for a frame edge transform (child <-> parent).
Definition TransformProvider.hpp:16