// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include #include "ROICircle.h" #include "JFJochException.h" #include "spdlog/fmt/bundled/format.h" ROICircle::ROICircle(const std::string &name, float in_x, float in_y, float in_r_pxl) : ROIElement(name), center_x(in_x), center_y(in_y), r_pxl(in_r_pxl), r_pxl_2(in_r_pxl * in_r_pxl) { if (r_pxl <= 0.0) throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "ROIRectangle::MarkROI mismatch in input array size"); } float ROICircle::GetX() const { return center_x; } float ROICircle::GetY() const { return center_y; } float ROICircle::GetRadius_pxl() const { return r_pxl; } ROIConfig ROICircle::ExportMetadata() const { return ROIConfig{ .type = ROIConfig::ROIType::Circle, .name = name, .circle = ROIConfigCircle{.r = r_pxl, .x = center_x, .y = center_y} }; } bool ROICircle::CheckROI(int64_t x, int64_t y, float resolution) const { float x_fl = static_cast(x) - center_x; float y_fl = static_cast(y) - center_y; float dist_from_center_sq = x_fl * x_fl + y_fl * y_fl; return (dist_from_center_sq <= r_pxl_2); } std::string ROICircle::toString() const { return fmt::format("Circle x: {:.1f} y: {:.1f} r: {:.01f} pxl", center_x, center_y, r_pxl); }