// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "ROIBox.h" #include "JFJochException.h" #include "../fpga/pcie_driver/jfjoch_fpga.h" ROIBox::ROIBox(const std::string &in_name, int64_t in_x_min, int64_t in_x_max, int64_t in_y_min, int64_t in_y_max) : ROIElement(in_name) { if (in_x_max < in_x_min) { x_min = in_x_max; x_max = in_x_min; } else { x_min = in_x_min; x_max = in_x_max; } if (in_y_max < in_y_min) { y_min = in_y_max; y_max = in_y_min; } else { y_min = in_y_min; y_max = in_y_max; } if (x_min < 0) x_min = 0; if (y_min < 0) y_min = 0; } int64_t ROIBox::GetXMin() const { return x_min; } int64_t ROIBox::GetXMax() const { return x_max; } int64_t ROIBox::GetYMin() const { return y_min; } int64_t ROIBox::GetYMax() const { return y_max; } int64_t ROIBox::GetWidth() const { return x_max - x_min; } int64_t ROIBox::GetHeight() const { return y_max - y_min; } int64_t ROIBox::GetArea() const { return GetWidth() * GetHeight(); } bool ROIBox::CheckROI(int64_t x, int64_t y, float resolution) const { return ((x >= x_min) && (x <= x_max) && (y >= y_min) && (y <= y_max)); } ROIConfig ROIBox::ExportMetadata() const { return ROIConfig{ .type = ROIConfig::ROIType::Box, .name = name, .box = ROIConfigBox{.xmin = x_min, .xmax = x_max, .ymin = y_min, .ymax = y_max} }; }