Класс URect: координаты и размеры прямоугольной области
Класс URect описывает координаты и размеры прямоугольной области в целочисленных значениях. Инструкция импорта:
from unicross_image.uhelper import URect
Форматы конструктора класса:
URect(x, y, width, height)
URect( (x, y, width, height) )
URect(urect)
В первом конструкторе указываются координаты левого верхнего угла и размеры области через запятую. Если значения не могут быть приведены к целому числу или размеры меньше или равны 0, то будет сгенерировано исключение. Пример:
r = URect(10, 20, 200, 100)
print(r) # URect(x=10, y=20, width=200, height=100)
print(repr(r)) # (10, 20, 200, 100)
Во втором конструкторе можно передать значения в виде кортежа или списка:
r = URect( (10, 20, 200, 100) )
print(r) # URect(x=10, y=20, width=200, height=100)
r = URect( [10, 20, 200, 100] )
print(r) # URect(x=10, y=20, width=200, height=100)
Третий конструктор создает объект на основе другого объекта:
r1 = URect( (10, 20, 200, 100) )
r2 = URect(r1)
print(r2) # URect(x=10, y=20, width=200, height=100)
Создать объект на основе координат позволяет статический метод coordinates(x, y, x + width, y + height):
r = URect.coordinates(10, 20, 210, 120)
print(r) # URect(x=10, y=20, width=200, height=100)
Сравнить два объекта URect можно с помощью операторов == и !=:
r1 = URect(10, 20, 200, 100)
r2 = URect(10, 20, 200, 100)
r3 = URect(0, 0, 200, 100)
print(r1 == r2) # True
print(r1 == r3) # False
print(r1 != r2) # False
print(r1 != r3) # True
Класс URect поддерживает итерации, поэтому объект можно преобразовать в кортеж или список, а также перебрать поэлементно с помощью циклов:
r = URect(1, 2, 3, 4)
print(tuple(r)) # (1, 2, 3, 4)
print(list(r)) # [1, 2, 3, 4]
for i in r:
print(i, end=", ")
# 1, 2, 3, 4,
Пример распаковки объекта:
r = URect(10, 20, 200, 100)
x, y, width, height = r
print(x, y, width, height) # 10 20 200 100
Перечислим методы класса URect:
get_x() и get_y() — возвращают координаты левого верхнего угла по осям X и Y соответственно. Пример:
r = URect(10, 20, 200, 100)
print(r.get_x()) # 10
print(r.get_y()) # 20
get_point() — возвращает координаты левого верхнего угла в виде кортежа. Пример:
r = URect(10, 20, 200, 100)
print(r.get_point()) # (10, 20)
get_upoint() — возвращает объект UPoint с координатами левого верхнего угла. Пример:
r = URect(10, 20, 200, 100)
print(r.get_upoint()) # UPoint(x=10, y=20)
get_point_max() — возвращает координаты (x + width, y + height) в виде кортежа. Обратите внимание, точка находится вне прямоугольника на 1 px правее по диагонали. Пример:
r = URect(10, 20, 200, 100)
print(r.get_point_max()) # (210, 120)
get_upoint_max() — возвращает объект UPoint с координатами (x + width, y + height). Обратите внимание, точка находится вне прямоугольника на 1 px правее по диагонали. Пример:
r = URect(10, 20, 200, 100)
print(r.get_upoint_max()) # UPoint(x=210, y=120)
get_point_bottom_right() — возвращает координаты правого нижнего угла в виде кортежа . Пример:
r = URect(10, 20, 200, 100)
print(r.get_point_bottom_right()) # (209, 119)
print(r.get_point_max()) # (210, 120)
get_upoint_bottom_right() — возвращает объект UPoint с координатами правого нижнего угла. Пример:
from unicross_image.uhelper import URect, UPoint
r = URect(10, 20, 200, 100)
print(r.get_upoint_bottom_right()) # UPoint(x=209, y=119)
print(r.get_upoint_max()) # UPoint(x=210, y=120)
print(r.contains_point(UPoint(209, 119))) # True
print(r.contains_point(UPoint(210, 120))) # False
get_width() и get_height() — возвращают ширину и высоту соответственно. Пример:
r = URect(10, 20, 200, 100)
print(r.get_width()) # 200
print(r.get_height()) # 100
get_size() — возвращает размеры в виде кортежа. Пример:
r = URect(10, 20, 200, 100)
print(r.get_size()) # (200, 100)
get_usize() — возвращает объект USize с размерами области. Пример:
r = URect(10, 20, 200, 100)
print(r.get_usize()) # USize(width=200, height=100)
get_rect() — возвращает координаты левого верхнего угла и размеры в виде кортежа. Пример:
r = URect(10, 20, 200, 100)
print(r.get_rect()) # (10, 20, 200, 100)
Можно также преобразовать объект в кортеж с помощью функции tuple() или выполнить распаковку:
r = URect(10, 20, 200, 100)
print(tuple(r)) # (10, 20, 200, 100)
x, y, width, height = r
print(x, y, width, height) # 10 20 200 100
get_urect() — возвращает объект URect с координатами левого верхнего угла и размерами области. Пример:
r = URect(10, 20, 200, 100)
print(r.get_urect()) # URect(x=10, y=20, width=200, height=100)
intersects(urect) — возвращает значение True, если прямоугольные области пересекаются, и False — в противном случае. Пример:
r1 = URect(0, 0, 100, 200)
r2 = URect(100, 0, 10, 20)
print(r1.intersects(r2)) # False
r3 = URect(99, 0, 10, 20)
print(r1.intersects(r3)) # True
intersection(urect) — возвращает объект с областью пересечения двух областей, и None — если области не пересекаются. Пример:
r1 = URect(0, 0, 100, 200)
r2 = URect(100, 0, 10, 20)
print(r1.intersection(r2)) # None
r3 = URect(99, 0, 10, 20)
print(r1.intersection(r3)) # URect(x=99, y=0, width=1, height=20)
Можно также воспользоваться оператором &:
r1 = URect(0, 0, 100, 200)
r2 = URect(100, 0, 10, 20)
print(r1 & r2) # None
r3 = URect(99, 0, 10, 20)
print(r1 & r3) # URect(x=99, y=0, width=1, height=20)
contains_point(upoint) — возвращает значение True, если указанная точка (объект класса UPoint) находится внутри прямоугольника, и False — в противном случае. Пример:
from unicross_image.uhelper import URect, UPoint
r = URect(0, 0, 100, 200)
print(r.contains_point(UPoint(0, 0))) # True
print(r.contains_point(UPoint(30, 20))) # True
print(r.contains_point(UPoint(99, 0))) # True
print(r.contains_point(UPoint(0, 199))) # True
print(r.contains_point(UPoint(100, 0))) # False
print(r.contains_point(UPoint(0, 200))) # False
print(r.contains_point(UPoint(-1, -1))) # False
contains_rect(urect) — возвращает значение True, если указанный прямоугольник (объект класса URect) находится внутри текущего прямоугольника, и False — в противном случае. Пример:
r1 = URect(1, 1, 5, 3)
r2 = URect(1, 1, 5, 3)
print(r1.contains_rect(r2)) # True
r2 = URect(1, 1, 3, 3)
print(r1.contains_rect(r2)) # True
r2 = URect(3, 2, 3, 2)
print(r1.contains_rect(r2)) # True
r2 = URect(3, 1, 3, 2)
print(r1.contains_rect(r2)) # True
r2 = URect(1, 2, 5, 2)
print(r1.contains_rect(r2)) # True
r2 = URect(0, 0, 6, 4)
print(r1.contains_rect(r2)) # False
r2 = URect(2, 2, 5, 3)
print(r1.contains_rect(r2)) # False
union(urect) — возвращает прямоугольник (объект класса URect), описывающий область, в которую входит текущий прямоугольник и указанный прямоугольник (объект класса URect). Пример:
r1 = URect(1, 1, 5, 3)
r2 = URect(1, 1, 5, 3)
print(r1.union(r2)) # URect(x=1, y=1, width=5, height=3)
r2 = URect(0, 0, 5, 3)
print(r1.union(r2)) # URect(x=0, y=0, width=6, height=4)
r2 = URect(2, 2, 5, 3)
print(r1.union(r2)) # URect(x=1, y=1, width=6, height=4)
r2 = URect(6, 4, 5, 3)
print(r1.union(r2)) # URect(x=1, y=1, width=10, height=6)
area() — возвращает площадь прямоугольника. Пример:
r = URect(0, 0, 200, 100)
print(r.area()) # 20000
is_square() — возвращает True, если объект содержит квадрат, и False — в противном случае. Пример:
r = URect(0, 0, 5, 3)
print(r.is_square()) # False
r = URect(0, 0, 5, 5)
print(r.is_square()) # True
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage
|