🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
AxesMacro.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/TypeTraits.hpp"
25#include "AstMath/KinematicRotation.hpp"
26
27AST_NAMESPACE_BEGIN
28
34class KinematicRotation;
35class Rotation;
36
37
40#define _AST_DECL_AXES(NAME) \
41 class AST_CORE_API Axes##NAME : public Axes \
42 { \
43 public: \
44 Axes##NAME() = default; \
45 ~Axes##NAME() override = default; \
46 static Axes##NAME* Instance(); \
47 Axes* getParent() const override; \
48 errc_t getTransform(const TimePoint& tp, Rotation& rotation) const override; \
49 errc_t getTransform(const TimePoint& tp, KinematicRotation& rotation) const override; \
50 };\
51 A_ALWAYS_INLINE Axes* aAxes##NAME()\
52 {\
53 return Axes##NAME::Instance();\
54 }\
55
59#define _AST_IMPL_AXES_BASE(NAME, PARENT)\
60 Axes##NAME* Axes##NAME::Instance() \
61 { \
62 static SharedPtr<Axes##NAME> instance(new Axes##NAME()); \
63 return instance.get(); \
64 }\
65 Axes *Axes##NAME::getParent() const\
66 {\
67 return Axes##PARENT::Instance();\
68 }\
69
74#define _AST_IMPL_AXES_DYNAMIC(NAME, PARENT) \
75 _AST_IMPL_AXES_BASE(NAME, PARENT)\
76 errc_t Axes##NAME::getTransform(const TimePoint &tp, Rotation &rotation) const\
77 {\
78 a##PARENT##To##NAME##Transform(tp, rotation);\
79 return eNoError;\
80 }\
81 errc_t Axes##NAME::getTransform(const TimePoint &tp, KinematicRotation &rotation) const\
82 {\
83 a##PARENT##To##NAME##Transform(tp, rotation);\
84 return eNoError;\
85 }\
86
91#define _AST_IMPL_AXES_STATIC(NAME, PARENT) \
92 _AST_IMPL_AXES_BASE(NAME, PARENT)\
93 errc_t Axes##NAME::getTransform(const TimePoint &tp, Rotation &rotation) const\
94 {\
95 a##PARENT##To##NAME##Transform(rotation);\
96 return eNoError;\
97 }\
98 errc_t Axes##NAME::getTransform(const TimePoint &tp, KinematicRotation &rotation) const\
99 {\
100 a##PARENT##To##NAME##Transform(rotation.getRotation());\
101 rotation.setRotationRate(Vector3d::Zero());\
102 return eNoError;\
103 }\
104
109#define _AST_IMPL_AXES_PSEUDO_STATIC(NAME, PARENT) \
110 _AST_IMPL_AXES_BASE(NAME, PARENT)\
111 errc_t Axes##NAME::getTransform(const TimePoint &tp, Rotation &rotation) const\
112 {\
113 a##PARENT##To##NAME##Transform(tp, rotation);\
114 return eNoError;\
115 }\
116 errc_t Axes##NAME::getTransform(const TimePoint &tp, KinematicRotation &rotation) const\
117 {\
118 a##PARENT##To##NAME##Transform(tp, rotation.getRotation());\
119 rotation.setRotationRate(Vector3d::Zero());\
120 return eNoError;\
121 }\
122
123
126AST_NAMESPACE_END