🛰️航天仿真算法库 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
38#define _AST_DECL_AXES(NAME) \
39 class AST_CORE_API Axes##NAME : public Axes \
40 { \
41 public: \
42 Axes##NAME() = default; \
43 ~Axes##NAME() override = default; \
44 static Axes##NAME* Instance(); \
45 Axes* getParent() const override; \
46 errc_t getTransform(const TimePoint& tp, Rotation& rotation) const override; \
47 errc_t getTransform(const TimePoint& tp, KinematicRotation& rotation) const override; \
48 };\
49 A_ALWAYS_INLINE Axes* aAxes##NAME()\
50 {\
51 return Axes##NAME::Instance();\
52 }\
53
54#define _AST_IMPL_AXES_BASE(NAME, PARENT)\
55 Axes##NAME* Axes##NAME::Instance() \
56 { \
57 static SharedPtr<Axes##NAME> instance(new Axes##NAME()); \
58 return instance.get(); \
59 }\
60 Axes *Axes##NAME::getParent() const\
61 {\
62 return Axes##PARENT::Instance();\
63 }\
64
65#define _AST_IMPL_AXES_DYNAMIC(NAME, PARENT) \
66 _AST_IMPL_AXES_BASE(NAME, PARENT)\
67 errc_t Axes##NAME::getTransform(const TimePoint &tp, Rotation &rotation) const\
68 {\
69 a##PARENT##To##NAME##Transform(tp, rotation);\
70 return eNoError;\
71 }\
72 errc_t Axes##NAME::getTransform(const TimePoint &tp, KinematicRotation &rotation) const\
73 {\
74 a##PARENT##To##NAME##Transform(tp, rotation);\
75 return eNoError;\
76 }\
77
78#define _AST_IMPL_AXES_INERTIAL(NAME, PARENT) \
79 _AST_IMPL_AXES_BASE(NAME, PARENT)\
80 errc_t Axes##NAME::getTransform(const TimePoint &tp, Rotation &rotation) const\
81 {\
82 a##PARENT##To##NAME##Transform(rotation);\
83 return eNoError;\
84 }\
85 errc_t Axes##NAME::getTransform(const TimePoint &tp, KinematicRotation &rotation) const\
86 {\
87 a##PARENT##To##NAME##Transform(rotation.getRotation());\
88 rotation.setRotationRate(Vector3d::Zero());\
89 return eNoError;\
90 }\
91
92#define _AST_IMPL_AXES_PSEUDO_INERTIAL(NAME, PARENT) \
93 _AST_IMPL_AXES_BASE(NAME, PARENT)\
94 errc_t Axes##NAME::getTransform(const TimePoint &tp, Rotation &rotation) const\
95 {\
96 a##PARENT##To##NAME##Transform(tp, rotation);\
97 return eNoError;\
98 }\
99 errc_t Axes##NAME::getTransform(const TimePoint &tp, KinematicRotation &rotation) const\
100 {\
101 a##PARENT##To##NAME##Transform(tp, rotation.getRotation());\
102 rotation.setRotationRate(Vector3d::Zero());\
103 return eNoError;\
104 }\
105
106
109AST_NAMESPACE_END