Source code for formhtr.libs.region

[docs] class Region: """ Class to represent single ROI """ def __init__(self, start_x, start_y, end_x, end_y): self.start_x = start_x self.start_y = start_y self.end_x = end_x self.end_y = end_y def __str__(self): return f'({self.start_x}, {self.start_y}) ({self.end_x}, {self.end_y})' def get_start(self): return (self.start_x, self.start_y) def get_end(self): return (self.end_x, self.end_y) def get_coords(self): return [self.start_x, self.start_y, self.end_x, self.end_y]
[docs] class Residual(Region): def __init__(self, start_x, start_y, end_x, end_y, expected_content): super().__init__(start_x, start_y, end_x, end_y) self.expected_content = expected_content def __str__(self): return f'Residual {self.expected_content}: {super().__str__()}' def update_expected_content(self, expected_content): self.expected_content = expected_content def point_is_inside(self, x, y): return self.start_x <= x <= self.end_x and self.start_y <= y <= self.end_y
[docs] class ROI(Region): def __init__(self, start_x, start_y, end_x, end_y, varname=None, content_type=None): super().__init__(start_x, start_y, end_x, end_y) self.varname = varname self.content_type = content_type def __str__(self): return f'Region {self.varname}: {super().__str__()} - {self.content_type}' def update_content_type(self, content_type): self.content_type = content_type def update_varname(self, varname): self.varname = varname def exceeding_rectangle(self, rectangle): return rectangle.end_x > self.end_x
[docs] class Rectangle(Region): def __init__(self, start_x, start_y, end_x, end_y, content): super().__init__(start_x, start_y, end_x, end_y) self.content = content self.center_x, self.center_y = self.compute_center() self.height = end_y - start_y def __lt__(self, other): return self.center_x < other.center_x def __str__(self): return f'"{self.content}": {super().__str__()}' def __repr__(self): return str(self) def compute_center(self): return (self.start_x + self.end_x)/2, (self.start_y + self.end_y)/2 def is_y_aligned(self, other): return other.start_y <= self.center_y <= other.end_y def to_residual(self): return Residual(*self.get_coords(), self.content)