Source code for plotpy.tools.annotation
# -*- coding: utf-8 -*-# -*- coding: utf-8 -*-
#
# Licensed under the terms of the BSD 3-Clause
# (see plotpy/LICENSE for details)
from __future__ import annotations
from plotpy.items import (
AnnotatedCircle,
AnnotatedEllipse,
AnnotatedObliqueRectangle,
AnnotatedPoint,
AnnotatedPolygon,
AnnotatedRectangle,
AnnotatedSegment,
)
from plotpy.tools.shape import (
CircleTool,
EllipseTool,
ObliqueRectangleTool,
PointTool,
PolygonTool,
RectangleTool,
SegmentTool,
)
[docs]
class AnnotatedPolygonTool(PolygonTool):
"""
Tool for creating annotated polygon shapes.
This tool extends the PolygonTool to create AnnotatedPolygon objects.
"""
[docs]
def create_shape(self) -> AnnotatedPolygon:
"""
Create an annotated polygon shape.
Returns:
A tuple containing the AnnotatedPolygon object and its handle indices.
"""
annotation = AnnotatedPolygon()
self.set_shape_style(annotation)
return annotation
[docs]
class AnnotatedRectangleTool(RectangleTool):
"""
Tool for creating annotated rectangle shapes.
This tool extends the RectangleTool to create AnnotatedRectangle objects.
"""
[docs]
def create_shape(self) -> tuple[AnnotatedRectangle, int, int]:
"""
Create an annotated rectangle shape.
Returns:
A tuple containing the AnnotatedRectangle object and its handle indices.
"""
annotation = AnnotatedRectangle(0, 0, 1, 1)
self.set_shape_style(annotation)
return annotation, 0, 2
class AnnotatedObliqueRectangleTool(ObliqueRectangleTool):
"""
Tool for creating annotated oblique rectangle shapes.
This tool extends the ObliqueRectangleTool to create
AnnotatedObliqueRectangle objects.
"""
AVOID_NULL_SHAPE: bool = True
def create_shape(self) -> tuple[AnnotatedObliqueRectangle, int, int]:
"""
Create an annotated oblique rectangle shape.
Returns:
A tuple containing the AnnotatedObliqueRectangle object
and its handle indices.
"""
annotation = AnnotatedObliqueRectangle(0, 0, 1, 0, 1, 1, 0, 1)
self.set_shape_style(annotation)
return annotation, 0, 2
[docs]
class AnnotatedCircleTool(CircleTool):
"""
Tool for creating annotated circle shapes.
This tool extends the CircleTool to create AnnotatedCircle objects.
"""
[docs]
def create_shape(self) -> tuple[AnnotatedCircle, int, int]:
"""
Create an annotated circle shape.
Returns:
A tuple containing the AnnotatedCircle object and its handle indices.
"""
annotation = AnnotatedCircle(0, 0, 1, 1)
self.set_shape_style(annotation)
return annotation, 0, 1
[docs]
class AnnotatedEllipseTool(EllipseTool):
"""
Tool for creating annotated ellipse shapes.
This tool extends the EllipseTool to create AnnotatedEllipse objects.
"""
[docs]
def create_shape(self) -> tuple[AnnotatedEllipse, int, int]:
"""
Create an annotated ellipse shape.
Returns:
A tuple containing the AnnotatedEllipse object and its handle indices.
"""
annotation = AnnotatedEllipse(0, 0, 1, 1)
annotation.shape.switch_to_circle()
self.set_shape_style(annotation)
return annotation, 0, 1
[docs]
class AnnotatedPointTool(PointTool):
"""
Tool for creating annotated point shapes.
This tool extends the PointTool to create AnnotatedPoint objects.
"""
[docs]
def create_shape(self) -> tuple[AnnotatedPoint, int, int]:
"""
Create an annotated point shape.
Returns:
A tuple containing the AnnotatedPoint object and its handle indices.
"""
annotation = AnnotatedPoint(0, 0)
self.set_shape_style(annotation)
return annotation, 0, 0
[docs]
class AnnotatedSegmentTool(SegmentTool):
"""
Tool for creating annotated segment shapes.
This tool extends the SegmentTool to create AnnotatedSegment objects.
"""
[docs]
def create_shape(self) -> tuple[AnnotatedSegment, int, int]:
"""
Create an annotated segment shape.
Returns:
A tuple containing the AnnotatedSegment object and its handle indices.
"""
annotation = AnnotatedSegment(0, 0, 1, 1)
self.set_shape_style(annotation)
return annotation, 0, 1