This commit is contained in:
2025-11-03 18:27:43 +03:00
parent 6fc0b8bb4e
commit 15cf04f164
4 changed files with 69 additions and 22 deletions

View File

@@ -35,7 +35,10 @@ struct MccJulianDay {
MccJulianDay(double jd) : mjd(jd - MJD0) {}
constexpr operator double() const { return MccJulianDay::MJD0 + mjd; }
constexpr operator double() const
{
return MccJulianDay::MJD0 + mjd;
}
MccJulianDay& operator=(double jd)
{
@@ -44,11 +47,17 @@ struct MccJulianDay {
return *this;
}
double MJD() const { return mjd; }
double MJD() const
{
return mjd;
}
constexpr auto operator<=>(const MccJulianDay&) const = default;
constexpr auto operator<=>(double v) const { return v <=> (MccJulianDay::MJD0 + mjd); };
constexpr auto operator<=>(double v) const
{
return v <=> (MccJulianDay::MJD0 + mjd);
};
protected:
double mjd{51544.5}; // J2000.0
@@ -220,7 +229,10 @@ public:
return _MJD;
}
double MJD() const { return _MJD; }
double MJD() const
{
return _MJD;
}
template <typename DT>
std::chrono::sys_time<DT> UTC() const
@@ -228,7 +240,10 @@ public:
return std::chrono::time_point_cast<DT>(_UTC);
}
std::chrono::system_clock::time_point UTC() const { return _UTC; }
std::chrono::system_clock::time_point UTC() const
{
return _UTC;
}
template <traits::mcc_output_char_range R>
@@ -253,11 +268,20 @@ public:
return r;
}
std::string JEpoch(uint8_t prec = 0) const { return JEpoch<std::string>(prec); }
std::string JEpoch(uint8_t prec = 0) const
{
return JEpoch<std::string>(prec);
}
auto operator<=>(const MccCelestialCoordEpoch& rhs) const { return _UTC <=> rhs._UTC; }
auto operator<=>(const MccCelestialCoordEpoch& rhs) const
{
return _UTC <=> rhs._UTC;
}
auto operator==(const MccCelestialCoordEpoch& rhs) const { return _UTC == rhs._UTC; }
auto operator==(const MccCelestialCoordEpoch& rhs) const
{
return _UTC == rhs._UTC;
}
protected:
std::chrono::system_clock::time_point _UTC;
@@ -611,9 +635,15 @@ public:
virtual ~MccCoordinateSerializer() = default;
void setFormat(SerializedCoordFormat fmt) { _currentFormat = fmt; }
void setFormat(SerializedCoordFormat fmt)
{
_currentFormat = fmt;
}
void setPrecision(SexagesimalCoordPrec prec) { _currentPrec = std::move(prec); }
void setPrecision(SexagesimalCoordPrec prec)
{
_currentPrec = std::move(prec);
}
template <traits::mcc_input_char_range R>
void setDelimiter(R&& delim)
@@ -675,7 +705,7 @@ protected:
std::format_to(std::back_inserter(bytes), "{}", MccAngle(angle).sexagesimal(false, _currentPrec.deg_prec));
if constexpr (sizeof...(Ts)) {
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
toSexagesimalHour(bytes, angles...);
toSexagesimalDeg(bytes, angles...);
}
}
};
@@ -1004,7 +1034,7 @@ public:
static MccEqtHrzCoordsSerializer eqhrz_ser;
static MccPointingTargetSerializer pt_ser;
// output format: <mount data>, speedX, speedY, pcmX, pcmY, refCorr, <target data>
// output format: <mount data>, speedX, speedY, pcmX, pcmY, refCorr (in arcsecs), <target data>
eqhrz_ser.setFormat(_currentFormat);
eqhrz_ser.setPrecision(_currentPrec);
@@ -1013,7 +1043,8 @@ public:
// MccEqtHrzCoordsSerializer{}(value, bytes);
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
toDegrees(bytes, value.speedX, value.speedY, value.pcmX, value.pcmY, value.refCorr);
// '*3600.0' to express refraction correction in arcseconds!
toDegrees(bytes, value.speedX, value.speedY, value.pcmX, value.pcmY, value.refCorr * 3600.0);
std::format_to(std::back_inserter(bytes), "{}", _delimiter);
pt_ser.setFormat(_currentFormat);