Source code for pygerber.tokens.add

# -*- coding: utf-8 -*-
from __future__ import annotations

from typing import TYPE_CHECKING

from pygerber.validators.coordinate import UnitFloat
from pygerber.validators.struct_validator import StructValidator

if TYPE_CHECKING:
    from pygerber.renderer import Renderer

import re

from pygerber.validators.basic import Float, Int, String

from .token import Token


[docs]class ADD_Token(Token): FLOAT_PATTERN = r"[-+]?[0-9]*\.?[0-9]*" CIRCLE_PATTERN = re.compile( r"(?P<DIAMETER>{0})(X(?P<HOLE_DIAMETER>{0}))?".format(FLOAT_PATTERN) ) RECTANGLE_PATTERN = re.compile( r"(?P<X>{0})X(?P<Y>{0})(X(?P<HOLE_DIAMETER>{0}))?".format(FLOAT_PATTERN) ) POLYGON_PATTERN = re.compile( ( r"(?P<DIAMETER>{0})X(?P<VERTICES>{0})(X(?P<ROTATION>{0}))?(X(?P<HOLE_DIAMETER>{0}))?" ).format(FLOAT_PATTERN) ) BASIC_APERTURE = r"(?P<TYPE>[CROP]),(?P<ARGS>({0}X?)+)".format(FLOAT_PATTERN) NAMED_APERTURE = r"(?P<NAME>[a-zA-Z0-9]+)" regex = re.compile( r"%ADD(?P<ID>[0-9]+)({0}|{1})\*%".format( BASIC_APERTURE, NAMED_APERTURE, ) ) ID = Int() TYPE = String() NAME = String()
[docs] class ARGS_dispatcher(StructValidator): DIAMETER = UnitFloat() X = UnitFloat() Y = UnitFloat() VERTICES = Int() ROTATION = Float(0.0) HOLE_DIAMETER = UnitFloat(0)
[docs] @ARGS_dispatcher def ARGS(self: Token, __: str) -> re.Pattern: if self.TYPE == "C": return self.CIRCLE_PATTERN elif self.TYPE == "R" or self.TYPE == "O": return self.RECTANGLE_PATTERN elif self.TYPE == "P": return self.POLYGON_PATTERN
[docs] def pre_render(self, renderer: Renderer): renderer.define_aperture(self.TYPE, self.NAME, self.ID, self.ARGS)