// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "ROICircle.h" #include "JFJochException.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); }