# -*- coding: utf-8 -*-
from __future__ import annotations
import re
from typing import TYPE_CHECKING
from pygerber.mathclasses import Vector2D
from pygerber.validators.basic import Int
from pygerber.validators.coordinate import Coordinate
if TYPE_CHECKING:
from pygerber.renderer import Renderer
from .token import Deprecated, Token
CO_PATTERN = r"[-+]?[0-9]+"
[docs]class D01_Token(Token):
regex = re.compile(
r"(X(?P<X>{0}))?(Y(?P<Y>{0}))?(I(?P<I>{0}))?(J(?P<J>{0}))?D01\*".format(
CO_PATTERN
)
)
X = Coordinate()
Y = Coordinate()
I = Coordinate()
J = Coordinate()
@property
def end(self):
return Vector2D(self.X, self.Y)
@property
def offset(self):
return Vector2D(self.I, self.J)
[docs] def render(self, renderer: Renderer):
renderer.draw_interpolated(self.end, self.offset)
[docs] def post_render(self, renderer: Renderer):
renderer.move_pointer(self.end)
[docs] def bbox(self, renderer: Renderer):
return renderer.bbox_interpolated(self.end, self.offset)
[docs]class D02_Token(Token):
regex = re.compile(
r"(X(?P<X>{0}))?(Y(?P<Y>{0}))?D02\*".format(CO_PATTERN),
)
X = Coordinate()
Y = Coordinate()
@property
def point(self):
return Vector2D(self.X, self.Y)
[docs] def post_render(self, renderer: Renderer):
renderer.move_pointer(self.point)
[docs]class D03_Token(D02_Token):
regex = re.compile(
r"(X(?P<X>{0}))?(Y(?P<Y>{0}))?D03\*".format(CO_PATTERN),
)
[docs] def render(self, renderer: Renderer):
renderer.draw_flash(self.point)
[docs] def post_render(self, renderer: Renderer):
renderer.move_pointer(self.point)
[docs] def bbox(self, renderer: Renderer):
return renderer.bbox_flash(self.point)
[docs]class DNN_Loader_Token(Token):
regex = re.compile(r"D(?P<ID>[1-9][0-9]*)\*")
ID = Int()
[docs] def pre_render(self, renderer: Renderer):
renderer.select_aperture(self.ID)
[docs]@Deprecated("G54 command is deprecated since 2012")
class G54DNN_Loader_Token(DNN_Loader_Token):
regex = re.compile(r"G54D(?P<ID>[1-9][0-9]*)\*")