summaryrefslogtreecommitdiff
path: root/lib/elements/validation.py
blob: 41098922d622a8afa634153afa4b873fbc94c613 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from shapely.geometry import Point as ShapelyPoint

from ..utils import Point as InkstitchPoint


class ValidationMessage(object):
    '''Holds information about a problem with an element.

    Attributes:
      name - A short descriptor for the problem, such as "dangling rung"
      description - A detailed description of the problem, such as
        "One or more rungs does not intersect both rails."
      position - An optional position where the problem occurs,
        to aid the user in correcting it.  type: Point or tuple of (x, y)
      steps_to_solve - A list of operations necessary to solve the problem
    '''

    # Subclasses will fill these in.
    name = None
    description = None
    steps_to_solve = []

    def __init__(self, position=None):
        if isinstance(position, ShapelyPoint):
            position = (position.x, position.y)

        self.position = InkstitchPoint(*position)


class ValidationError(ValidationMessage):
    """A problem that will prevent the shape from being embroidered."""
    pass


class ValidationWarning(ValidationMessage):
    """A problem that won't prevent a shape from being embroidered.

    The user will almost certainly want to fix the warning, but if they
    don't, Ink/Stitch will do its best to process the object.
    """
    pass