This commit is contained in:
2025-08-07 02:23:58 +03:00
parent 2fee216924
commit f0ab4ae770
9 changed files with 153 additions and 55 deletions

View File

@@ -27,7 +27,8 @@ static_assert(traits::mcc_celestial_point_c<MccCelestialPoint>, "MccCelestialPoi
/* COMMON SLEW-AND-GUIDING POINT CLASS DEFINITION */
struct MccSlewAndGuidingPoint : MccCelestialPoint {
template <typename coord_t>
struct MccSimpleSlewAndGuidingModelParams {
// ******* default constants *******
static constexpr size_t defaultWithinToleranceCycleNumber = 10;
@@ -74,6 +75,11 @@ struct MccSlewAndGuidingPoint : MccCelestialPoint {
bool dualAxisGuiding{true}; // mount must be of an equatorial type: false means guiding along only HA-axis
};
struct MccSlewAndGuidingPoint : MccCelestialPoint,
MccSimpleSlewAndGuidingModelParams<typename MccCelestialPoint::coord_t> {
typedef MccSimpleSlewAndGuidingModelParams<typename MccCelestialPoint::coord_t> slew_guiding_params_t;
};
/* CHECK FOR CURRENT MOUNT POSITION IN PROHIBITED ZONES */
@@ -100,24 +106,32 @@ template <traits::mcc_mount_telemetry_data_c TelemetryDataT,
std::ranges::output_range<bool> ResT>
auto mccCheckInZonePZRange(const TelemetryDataT& telemetry_data, const RT& pzones, ResT& result)
{
bool in_zone = false;
auto Npz = std::ranges::distance(pzones);
if (!Npz) {
return;
return in_zone;
}
auto res_sz = std::ranges::distance(result);
bool ok;
size_t i = 1;
auto res_iter = result.begin();
for (auto& el : pzones) {
ok = el.inZone(telemetry_data);
in_zone |= ok;
if (i > res_sz) {
std::back_inserter(result) = el.inZone(telemetry_data);
std::back_inserter(result) = ok;
} else {
std::ranges::advance(res_iter, 1);
*res_iter = el.inZone(telemetry_data);
*res_iter = ok;
}
++i;
}
return in_zone;
}
} // namespace mcc