-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpcb_structure.py
145 lines (110 loc) · 1.98 KB
/
pcb_structure.py
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
from dataclasses import dataclass
from typing import Tuple, List, Union
from enum import Enum
Coords = List[str]
FpFigure = Union['FpArc', 'FpPoly', 'FpLine', 'FpCircle']
class TextType(Enum):
reference = 0
value = 1
user = 2
simple = 3
class PadType(Enum):
circle = 0
rect = 1
oval = 2
custom = 3
@dataclass
class Layer:
name: str
layer_type: str
@dataclass
class FpText:
text_type: TextType
text: str
layer: Layer
coords: List[str]
angle: float
@dataclass
class FpLine:
start: Coords
end: Coords
layer: Layer
width: float
@dataclass
class FpPoly:
layer: Layer
width: str
points: List[Coords]
@dataclass
class FpCircle:
center: Coords
end: Coords
layer: Layer
width: float
@dataclass
class FpArc:
start: Coords
end: Coords
angle: float
layer: Layer
width: float
@dataclass
class FpPos:
pos: Coords
rot: int
@dataclass
class FpPad:
pad_id: str
smd: bool
drill: float
pad_type: PadType
center: FpPos
size: Coords
layers: List[Layer]
net_id: int
net_name: str
extra_points: List[Coords]
@dataclass
class Module:
footprint: str
layer: Layer
coords: Coords
smd: bool
texts: List[FpText]
figures: List[FpFigure]
pads: List[FpPad]
extrapads: List[str]
@dataclass
class NetGroup:
name: str
clearance: float
trace_width: float
via_dia: float
via_drill: float
@dataclass
class Segment:
start: Coords
end: Coords
layers: List[Layer]
width: str
@dataclass
class Via:
center: Coords
layers: List[Layer]
size: str
@dataclass
class Net:
net_id: int
net_name: str
contacts: List[Tuple[str, str]]
segments: List[Segment]
vias: List[Via]
group: str = ""
@dataclass
class PCB:
layers: List[Layer]
modules: List[Module]
edge: List[Union[FpLine, FpArc]]
texts: List[FpText]
nets: List[Net]
net_groups: List[NetGroup]