JLC2KiCadLib 1.0.32__py3-none-any.whl → 1.0.36__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of JLC2KiCadLib might be problematic. Click here for more details.
- JLC2KiCadLib/__version__.py +1 -1
- JLC2KiCadLib/footprint/footprint.py +1 -1
- JLC2KiCadLib/footprint/footprint_handlers.py +129 -117
- JLC2KiCadLib/footprint/model3d.py +7 -11
- JLC2KiCadLib/symbol/symbol.py +1 -2
- JLC2KiCadLib/symbol/symbol_handlers.py +5 -0
- {JLC2KiCadLib-1.0.32.dist-info → JLC2KiCadLib-1.0.36.dist-info}/METADATA +11 -2
- JLC2KiCadLib-1.0.36.dist-info/RECORD +17 -0
- {JLC2KiCadLib-1.0.32.dist-info → JLC2KiCadLib-1.0.36.dist-info}/WHEEL +1 -1
- JLC2KiCadLib-1.0.32.dist-info/RECORD +0 -17
- {JLC2KiCadLib-1.0.32.dist-info → JLC2KiCadLib-1.0.36.dist-info}/LICENSE +0 -0
- {JLC2KiCadLib-1.0.32.dist-info → JLC2KiCadLib-1.0.36.dist-info}/entry_points.txt +0 -0
- {JLC2KiCadLib-1.0.32.dist-info → JLC2KiCadLib-1.0.36.dist-info}/top_level.txt +0 -0
JLC2KiCadLib/__version__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.0.
|
|
1
|
+
__version__ = "1.0.36"
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
|
-
from math import pow, acos, pi
|
|
3
|
+
from math import pow, acos, pi, sqrt
|
|
4
4
|
import re
|
|
5
5
|
|
|
6
|
-
from KicadModTree import
|
|
6
|
+
from KicadModTree import (
|
|
7
|
+
Line,
|
|
8
|
+
Pad,
|
|
9
|
+
Polygon,
|
|
10
|
+
Vector2D,
|
|
11
|
+
Arc,
|
|
12
|
+
Circle,
|
|
13
|
+
RectFill,
|
|
14
|
+
Text,
|
|
15
|
+
RectLine,
|
|
16
|
+
)
|
|
7
17
|
from .model3d import get_WrlModel, get_StepModel
|
|
8
18
|
|
|
9
19
|
__all__ = [
|
|
@@ -79,106 +89,113 @@ def h_PAD(data, kicad_mod, footprint_info):
|
|
|
79
89
|
"""
|
|
80
90
|
Append a pad to the footprint
|
|
81
91
|
|
|
82
|
-
data :
|
|
92
|
+
data : [
|
|
83
93
|
0 : shape type
|
|
84
94
|
1 : pad position x
|
|
85
|
-
|
|
95
|
+
2 : pad position y
|
|
86
96
|
3 : pad size x
|
|
87
97
|
4 : pad size y
|
|
88
|
-
5 :
|
|
98
|
+
5 : layer
|
|
89
99
|
6 : pad number
|
|
90
100
|
7 : drill size
|
|
91
|
-
8 :
|
|
92
|
-
|
|
101
|
+
8 : Polygon nodes "skipped for some shapes"
|
|
102
|
+
9 : rotation
|
|
103
|
+
10 :
|
|
104
|
+
11 : drill offset
|
|
105
|
+
12 :
|
|
106
|
+
13 :
|
|
107
|
+
14 :
|
|
108
|
+
15 :
|
|
109
|
+
16 :
|
|
110
|
+
17 : ? position
|
|
111
|
+
]
|
|
93
112
|
"""
|
|
94
|
-
# pylint: disable=unused-argument
|
|
95
|
-
|
|
96
|
-
shape_correspondance = {
|
|
97
|
-
"OVAL": "SHAPE_OVAL",
|
|
98
|
-
"RECT": "SHAPE_RECT",
|
|
99
|
-
"ELLIPSE": "SHAPE_CIRCLE",
|
|
100
|
-
"POLYGON": "SHAPE_CUSTOM",
|
|
101
|
-
}
|
|
102
113
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
data[7] = mil2mm(data[7])
|
|
114
|
+
# PAD layer definition
|
|
115
|
+
TOPLAYER = "1"
|
|
116
|
+
BOTTOMLAYER = "2"
|
|
117
|
+
MULTILAYER = "11"
|
|
108
118
|
|
|
109
|
-
|
|
110
|
-
|
|
119
|
+
shape_type = data[0]
|
|
120
|
+
at = [mil2mm(data[1]), mil2mm(data[2])]
|
|
121
|
+
size = [mil2mm(data[3]), mil2mm(data[4])]
|
|
122
|
+
layer = data[5]
|
|
111
123
|
pad_number = data[6]
|
|
124
|
+
drill_diameter = float(mil2mm(data[7])) * 2
|
|
125
|
+
drill_size = drill_diameter
|
|
126
|
+
|
|
127
|
+
# Some shape do not have coordinates, insert empty data to realign later index
|
|
128
|
+
if shape_type in ["ELLIPSE"]:
|
|
129
|
+
data.insert(8, "")
|
|
130
|
+
|
|
131
|
+
rotation = float(data[9])
|
|
132
|
+
drill_offset = float(mil2mm(data[11]))
|
|
133
|
+
|
|
112
134
|
primitives = ""
|
|
113
135
|
|
|
114
|
-
if
|
|
136
|
+
if layer == MULTILAYER:
|
|
137
|
+
pad_type = Pad.TYPE_THT
|
|
138
|
+
pad_layer = Pad.LAYERS_THT
|
|
139
|
+
elif layer == TOPLAYER:
|
|
115
140
|
pad_type = Pad.TYPE_SMT
|
|
116
141
|
pad_layer = Pad.LAYERS_SMT
|
|
117
|
-
|
|
142
|
+
elif layer == BOTTOMLAYER:
|
|
143
|
+
pad_type = Pad.TYPE_SMT
|
|
144
|
+
pad_layer = ["B.Cu", "B.Mask", "B.Paste"]
|
|
118
145
|
else:
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
146
|
+
logging.warning(
|
|
147
|
+
f"footprint, h_PAD: Unrecognized pad layer. Using default SMT layer for pad {pad_number}"
|
|
148
|
+
)
|
|
149
|
+
pad_type = Pad.TYPE_SMT
|
|
150
|
+
pad_layer = Pad.LAYERS_SMT
|
|
122
151
|
|
|
123
152
|
if data[0] == "OVAL":
|
|
124
|
-
shape =
|
|
125
|
-
rotation = float(data[9])
|
|
126
|
-
data[11] = mil2mm(data[11])
|
|
153
|
+
shape = Pad.SHAPE_OVAL
|
|
127
154
|
|
|
128
|
-
if
|
|
129
|
-
drill_size =
|
|
130
|
-
elif (
|
|
155
|
+
if drill_offset == 0:
|
|
156
|
+
drill_size = drill_diameter
|
|
157
|
+
elif (drill_diameter < drill_offset) ^ (
|
|
131
158
|
size[0] > size[1]
|
|
132
159
|
): # invert the orientation of the drill hole if not in the same orientation as the pad shape
|
|
133
|
-
drill_size = [
|
|
160
|
+
drill_size = [drill_diameter, drill_offset]
|
|
134
161
|
else:
|
|
135
|
-
drill_size = [
|
|
162
|
+
drill_size = [drill_offset, drill_diameter]
|
|
136
163
|
|
|
137
164
|
elif data[0] == "RECT":
|
|
138
|
-
shape =
|
|
139
|
-
rotation = float(data[9])
|
|
140
|
-
data[11] = mil2mm(data[11])
|
|
165
|
+
shape = Pad.SHAPE_RECT
|
|
141
166
|
|
|
142
|
-
if
|
|
143
|
-
drill_size =
|
|
144
|
-
elif float(data[11]) == 0: # Check if the hole is oval
|
|
145
|
-
pass
|
|
167
|
+
if drill_offset == 0:
|
|
168
|
+
drill_size = drill_diameter
|
|
146
169
|
else:
|
|
147
|
-
drill_size = [
|
|
170
|
+
drill_size = [drill_diameter, drill_offset]
|
|
148
171
|
|
|
149
172
|
elif data[0] == "ELLIPSE":
|
|
150
|
-
shape =
|
|
151
|
-
# if pad is a circle, no rotation is specified
|
|
152
|
-
rotation = 0
|
|
173
|
+
shape = Pad.SHAPE_CIRCLE
|
|
153
174
|
|
|
154
175
|
elif data[0] == "POLYGON":
|
|
155
|
-
shape =
|
|
156
|
-
data[11] = mil2mm(data[11])
|
|
157
|
-
rotation = float(data[9])
|
|
176
|
+
shape = Pad.SHAPE_CUSTOM
|
|
158
177
|
points = []
|
|
159
178
|
for i, coord in enumerate(data[8].split(" ")):
|
|
160
179
|
points.append(mil2mm(coord) - at[i % 2])
|
|
161
180
|
primitives = [Polygon(nodes=zip(points[::2], points[1::2]))]
|
|
162
181
|
size = [0.1, 0.1]
|
|
163
|
-
rotation = 0
|
|
164
182
|
|
|
165
|
-
if
|
|
183
|
+
if drill_offset == 0: # Check if the hole is oval
|
|
166
184
|
drill_size = 1
|
|
167
185
|
else:
|
|
168
|
-
drill_size = [
|
|
186
|
+
drill_size = [drill_diameter, drill_offset]
|
|
169
187
|
|
|
170
188
|
else:
|
|
171
189
|
logging.error(
|
|
172
|
-
"footprint handler, pad : no correspondance found, using default SHAPE_OVAL"
|
|
190
|
+
f"footprint handler, pad : no correspondance found, using default SHAPE_OVAL for pad {pad_number}"
|
|
173
191
|
)
|
|
174
|
-
shape =
|
|
175
|
-
rotation = float(data[9])
|
|
192
|
+
shape = Pad.SHAPE_OVAL
|
|
176
193
|
|
|
177
194
|
# update footprint borders
|
|
178
|
-
footprint_info.max_X = max(footprint_info.max_X,
|
|
179
|
-
footprint_info.min_X = min(footprint_info.min_X,
|
|
180
|
-
footprint_info.max_Y = max(footprint_info.max_Y,
|
|
181
|
-
footprint_info.min_Y = min(footprint_info.min_Y,
|
|
195
|
+
footprint_info.max_X = max(footprint_info.max_X, at[0])
|
|
196
|
+
footprint_info.min_X = min(footprint_info.min_X, at[0])
|
|
197
|
+
footprint_info.max_Y = max(footprint_info.max_Y, at[1])
|
|
198
|
+
footprint_info.min_Y = min(footprint_info.min_Y, at[1])
|
|
182
199
|
|
|
183
200
|
kicad_mod.append(
|
|
184
201
|
Pad(
|
|
@@ -196,49 +213,50 @@ def h_PAD(data, kicad_mod, footprint_info):
|
|
|
196
213
|
|
|
197
214
|
|
|
198
215
|
def h_ARC(data, kicad_mod, footprint_info):
|
|
199
|
-
|
|
216
|
+
"""
|
|
217
|
+
append an Arc to the footprint
|
|
218
|
+
"""
|
|
219
|
+
# pylint: disable=unused-argument
|
|
220
|
+
|
|
200
221
|
try:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
for val in data[2]
|
|
206
|
-
.replace("M", "")
|
|
207
|
-
.replace("A", "")
|
|
208
|
-
.replace(",", " ")
|
|
209
|
-
.split(" ")
|
|
210
|
-
if val
|
|
211
|
-
]
|
|
212
|
-
elif data[3][0] == "M":
|
|
213
|
-
startX, startY, midX, midY, _, reversed, direction, endX, endY = [
|
|
214
|
-
val
|
|
215
|
-
for val in data[3]
|
|
216
|
-
.replace("M", "")
|
|
217
|
-
.replace("A", "")
|
|
218
|
-
.replace(",", " ")
|
|
219
|
-
.split(" ")
|
|
220
|
-
if val
|
|
221
|
-
]
|
|
222
|
+
|
|
223
|
+
# "S$xx" is sometimes inserted at index 2 ?
|
|
224
|
+
if "$" in data[2]:
|
|
225
|
+
svg_path = data[3]
|
|
222
226
|
else:
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
227
|
+
svg_path = data[2]
|
|
228
|
+
|
|
229
|
+
# Regular expression to match ARC pattern
|
|
230
|
+
# coordinates can sometime be separated by a "," instead of a space, therefore we match it using [\s,*?]
|
|
231
|
+
pattern = r"M\s*([\d\.\-]+)[\s,*?]([\d\.\-]+)\s?A\s*([\d\.\-]+)[\s,*?]([\d\.\-]+) ([\d\.\-]+) (\d) (\d) ([\d\.\-]+)[\s,*?]([\d\.\-]+)"
|
|
232
|
+
|
|
233
|
+
match = re.search(pattern, svg_path)
|
|
234
|
+
|
|
235
|
+
if not match:
|
|
236
|
+
logging.error("footprint handler, h_ARC: Failed to parse ARC")
|
|
237
|
+
return
|
|
238
|
+
|
|
239
|
+
# Extract values
|
|
240
|
+
start_x, start_y = float(match.group(1)), float(match.group(2))
|
|
241
|
+
rx, ry = float(match.group(3)), float(match.group(4))
|
|
242
|
+
_ = float(match.group(5)) # rotation ?
|
|
243
|
+
large_arc_flag = int(match.group(6))
|
|
244
|
+
sweep_flag = int(match.group(7))
|
|
245
|
+
end_x, end_y = float(match.group(8)), float(match.group(9))
|
|
246
|
+
|
|
226
247
|
width = data[0]
|
|
227
248
|
|
|
228
249
|
width = mil2mm(width)
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
start = [startX, startY]
|
|
240
|
-
end = [endX, endY]
|
|
241
|
-
if direction == "0":
|
|
250
|
+
start_x = mil2mm(start_x)
|
|
251
|
+
start_y = mil2mm(start_y)
|
|
252
|
+
mid_x = mil2mm(rx)
|
|
253
|
+
mid_y = mil2mm(ry)
|
|
254
|
+
end_x = mil2mm(end_x)
|
|
255
|
+
end_y = mil2mm(end_y)
|
|
256
|
+
|
|
257
|
+
start = [start_x, start_y]
|
|
258
|
+
end = [end_x, end_y]
|
|
259
|
+
if sweep_flag == 0:
|
|
242
260
|
start, end = end, start
|
|
243
261
|
|
|
244
262
|
# find the midpoint of start and end
|
|
@@ -247,12 +265,12 @@ def h_ARC(data, kicad_mod, footprint_info):
|
|
|
247
265
|
vec1 = Vector2D(mid[0] - start[0], mid[1] - start[1])
|
|
248
266
|
|
|
249
267
|
# create vector that's normal to vec1:
|
|
250
|
-
length_squared =
|
|
268
|
+
length_squared = mid_x * mid_y - pow(vec1.distance_to((0, 0)), 2)
|
|
251
269
|
if length_squared < 0:
|
|
252
270
|
length_squared = 0
|
|
253
|
-
|
|
271
|
+
large_arc_flag = 1
|
|
254
272
|
|
|
255
|
-
if
|
|
273
|
+
if large_arc_flag == 1:
|
|
256
274
|
vec2 = vec1.rotate(-90)
|
|
257
275
|
else:
|
|
258
276
|
vec2 = vec1.rotate(90)
|
|
@@ -285,25 +303,19 @@ def h_ARC(data, kicad_mod, footprint_info):
|
|
|
285
303
|
try:
|
|
286
304
|
layer = layer_correspondance[data[1]]
|
|
287
305
|
except KeyError:
|
|
288
|
-
logging.warning(
|
|
289
|
-
|
|
290
|
-
if reversed == "1":
|
|
291
|
-
kicad_mod.append(
|
|
292
|
-
Arc(
|
|
293
|
-
start=start,
|
|
294
|
-
end=end,
|
|
295
|
-
width=width,
|
|
296
|
-
angle=360 - angle,
|
|
297
|
-
center=cen,
|
|
298
|
-
layer=layer,
|
|
299
|
-
)
|
|
300
|
-
)
|
|
301
|
-
else:
|
|
302
|
-
kicad_mod.append(
|
|
303
|
-
Arc(start=start, end=end, width=width, center=cen, layer=layer)
|
|
306
|
+
logging.warning(
|
|
307
|
+
"footprint handler, h_ARC : layer correspondance not found. Adding arc on default F.Silks layer"
|
|
304
308
|
)
|
|
309
|
+
layer = "F.SilkS"
|
|
305
310
|
|
|
306
|
-
|
|
311
|
+
if large_arc_flag == 1:
|
|
312
|
+
angle = 360 - angle
|
|
313
|
+
|
|
314
|
+
kicad_mod.append(
|
|
315
|
+
Arc(start=start, end=end, width=width, center=cen, layer=layer)
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
except Exception:
|
|
307
319
|
logging.exception("footprint handler, h_ARC: failed to add ARC")
|
|
308
320
|
|
|
309
321
|
|
|
@@ -2,7 +2,7 @@ import requests
|
|
|
2
2
|
import logging
|
|
3
3
|
import os
|
|
4
4
|
import re
|
|
5
|
-
from KicadModTree import
|
|
5
|
+
from KicadModTree import Model
|
|
6
6
|
|
|
7
7
|
wrl_header = """#VRML V2.0 utf8
|
|
8
8
|
#created by JLC2KiCad_lib using the JLCPCB library
|
|
@@ -46,11 +46,11 @@ def get_StepModel(
|
|
|
46
46
|
|
|
47
47
|
if footprint_info.model_base_variable:
|
|
48
48
|
if footprint_info.model_base_variable.startswith("$"):
|
|
49
|
-
path_name = f'"{footprint_info.model_base_variable}/{footprint_info.footprint_name}.step"'
|
|
49
|
+
path_name = f'"{footprint_info.model_base_variable}/{footprint_info.model_dir}/{footprint_info.footprint_name}.step"'
|
|
50
50
|
else:
|
|
51
|
-
path_name = f'"$({footprint_info.model_base_variable})/{footprint_info.footprint_name}.step"'
|
|
51
|
+
path_name = f'"$({footprint_info.model_base_variable})/{footprint_info.model_dir}/{footprint_info.footprint_name}.step"'
|
|
52
52
|
else:
|
|
53
|
-
path_name =
|
|
53
|
+
path_name = f"{footprint_info.model_dir}/{footprint_info.footprint_name}.step"
|
|
54
54
|
|
|
55
55
|
translationX = (translationX - footprint_info.origin[0]) / 100
|
|
56
56
|
translationY = -(translationY - footprint_info.origin[1]) / 100
|
|
@@ -182,15 +182,11 @@ Shape{{
|
|
|
182
182
|
|
|
183
183
|
if footprint_info.model_base_variable:
|
|
184
184
|
if footprint_info.model_base_variable.startswith("$"):
|
|
185
|
-
path_name = f'"{footprint_info.model_base_variable}/{footprint_info.footprint_name}.wrl"'
|
|
185
|
+
path_name = f'"{footprint_info.model_base_variable}/{footprint_info.model_dir}/{footprint_info.footprint_name}.wrl"'
|
|
186
186
|
else:
|
|
187
|
-
path_name = f'"$({footprint_info.model_base_variable})/{footprint_info.footprint_name}.wrl"'
|
|
187
|
+
path_name = f'"$({footprint_info.model_base_variable})/{footprint_info.model_dir}/{footprint_info.footprint_name}.wrl"'
|
|
188
188
|
else:
|
|
189
|
-
|
|
190
|
-
if os.path.isabs(filename):
|
|
191
|
-
path_name = filename
|
|
192
|
-
else:
|
|
193
|
-
path_name = f"{dirname}/{filename}"
|
|
189
|
+
path_name = f"{footprint_info.model_dir}/{footprint_info.footprint_name}.wrl"
|
|
194
190
|
|
|
195
191
|
translationX = (translationX - footprint_info.origin[0]) / 100
|
|
196
192
|
translationY = -(translationY - footprint_info.origin[1]) / 100
|
JLC2KiCadLib/symbol/symbol.py
CHANGED
|
@@ -4,7 +4,6 @@ import re
|
|
|
4
4
|
import os
|
|
5
5
|
import logging
|
|
6
6
|
|
|
7
|
-
from KicadModTree import *
|
|
8
7
|
from .symbol_handlers import *
|
|
9
8
|
|
|
10
9
|
|
|
@@ -91,7 +90,7 @@ def create_symbol(
|
|
|
91
90
|
|
|
92
91
|
filename = f"{output_dir}/{symbol_path}/{library_name}.kicad_sym"
|
|
93
92
|
|
|
94
|
-
logging.info(f"
|
|
93
|
+
logging.info(f"Creating symbol {component_title} in {library_name}")
|
|
95
94
|
|
|
96
95
|
kicad_symbol.drawing += f'''\n (symbol "{component_title}_1"'''
|
|
97
96
|
|
|
@@ -109,6 +109,11 @@ def h_P(data, translation, kicad_symbol):
|
|
|
109
109
|
length = round(mil2mm(abs(float(data[8].split("h")[-1]))), 3)
|
|
110
110
|
elif rotation == 90 or rotation == 270:
|
|
111
111
|
length = mil2mm(abs(float(data[8].split("v")[-1])))
|
|
112
|
+
else:
|
|
113
|
+
length = 2.54
|
|
114
|
+
logging.warning(
|
|
115
|
+
f'symbol : pin number {pinNumber} : "{pinName}" failed to find length. Using Default length'
|
|
116
|
+
)
|
|
112
117
|
|
|
113
118
|
try:
|
|
114
119
|
# If on pin name/number is not hidden, show set the synmbol hide property to 0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: JLC2KiCadLib
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.36
|
|
4
4
|
Summary: JLC2KiCad_lib is a python script that generate a component library (symbol, footprint and 3D model) for KiCad from the JLCPCB/easyEDA library.
|
|
5
5
|
Home-page: https://github.com/TousstNicolas/JLC2KiCad_lib
|
|
6
6
|
Author: TousstNicolas
|
|
@@ -14,6 +14,15 @@ Description-Content-Type: text/markdown
|
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: KicadModTree
|
|
16
16
|
Requires-Dist: requests
|
|
17
|
+
Dynamic: author
|
|
18
|
+
Dynamic: classifier
|
|
19
|
+
Dynamic: description
|
|
20
|
+
Dynamic: description-content-type
|
|
21
|
+
Dynamic: home-page
|
|
22
|
+
Dynamic: license
|
|
23
|
+
Dynamic: requires-dist
|
|
24
|
+
Dynamic: requires-python
|
|
25
|
+
Dynamic: summary
|
|
17
26
|
|
|
18
27
|
# JLC2KiCadLib
|
|
19
28
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
JLC2KiCadLib/JLC2KiCadLib.py,sha256=BJbOo8U58wzEqbohHTtcbFyhL17NyPzX3NQVKly6RMM,5940
|
|
2
|
+
JLC2KiCadLib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
JLC2KiCadLib/__version__.py,sha256=30Mv0NpdYTBwynjmVeKzvZ1SRCEvxNQ3Gj-ocoLSUU8,23
|
|
4
|
+
JLC2KiCadLib/helper.py,sha256=OWRXLBovsgD0bUWTCNBDV0_XsIY0NOIlvN7mUH8bXCo,573
|
|
5
|
+
JLC2KiCadLib/footprint/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
JLC2KiCadLib/footprint/footprint.py,sha256=Z4KY0nl-CJf3zx_IYclrmD5kmGEwioNLzidopwxfZmE,5847
|
|
7
|
+
JLC2KiCadLib/footprint/footprint_handlers.py,sha256=g5XdiLsvKdujKO2xQYq6lC2T0YnCirJcGYSYj_JRKy8,13966
|
|
8
|
+
JLC2KiCadLib/footprint/model3d.py,sha256=kmh0trZWxsg0KM7dGfTJ2Ig44AMTN135R0Ajag2soIo,7399
|
|
9
|
+
JLC2KiCadLib/symbol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
JLC2KiCadLib/symbol/symbol.py,sha256=jq3h2-S9q6Xdck3yAaUhXrCmxgTEw-2erXLwGMY7d9w,7312
|
|
11
|
+
JLC2KiCadLib/symbol/symbol_handlers.py,sha256=HOwQfXMU11VSLNhIxS4e48tyOcSySll5N6jxutg1hyo,9833
|
|
12
|
+
JLC2KiCadLib-1.0.36.dist-info/LICENSE,sha256=tyXpHLah0G-ROQan655i3SKSrKXSD9ccfDnwVQa8q8U,1089
|
|
13
|
+
JLC2KiCadLib-1.0.36.dist-info/METADATA,sha256=QYIROdilFf-j5YL-PD2LRwumoHmq2fqKtKu2QOsJrGA,7064
|
|
14
|
+
JLC2KiCadLib-1.0.36.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
15
|
+
JLC2KiCadLib-1.0.36.dist-info/entry_points.txt,sha256=WF-HbrktGM05drU8Vtkl4hXIQugiO65a96LOCTip19s,64
|
|
16
|
+
JLC2KiCadLib-1.0.36.dist-info/top_level.txt,sha256=wLbJ381HZrM-GLIGgVe-YbUEFpUcOdDYhqwt3atu3OA,13
|
|
17
|
+
JLC2KiCadLib-1.0.36.dist-info/RECORD,,
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
JLC2KiCadLib/JLC2KiCadLib.py,sha256=BJbOo8U58wzEqbohHTtcbFyhL17NyPzX3NQVKly6RMM,5940
|
|
2
|
-
JLC2KiCadLib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
JLC2KiCadLib/__version__.py,sha256=7lgO4vs96Xws620NcdYBBIZ3UQmxnPtokpac8IkROK8,23
|
|
4
|
-
JLC2KiCadLib/helper.py,sha256=OWRXLBovsgD0bUWTCNBDV0_XsIY0NOIlvN7mUH8bXCo,573
|
|
5
|
-
JLC2KiCadLib/footprint/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
JLC2KiCadLib/footprint/footprint.py,sha256=Mmx7GshuxTv7Mk3BPkGFwbH6zabPgKzco5BfI5s91SM,5847
|
|
7
|
-
JLC2KiCadLib/footprint/footprint_handlers.py,sha256=sdXisssOqjMe04N21Ee5icjSjbtYJK6nCM3ztD4YLz8,13726
|
|
8
|
-
JLC2KiCadLib/footprint/model3d.py,sha256=ux1_E98JIGdexdG3F4kSwwEiK-T_kKABxwJ6jImmV9Y,7349
|
|
9
|
-
JLC2KiCadLib/symbol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
JLC2KiCadLib/symbol/symbol.py,sha256=KBx67-qKv2RKX6mr69iCYQSDocXlEUqelUoYVoe6H8Y,7339
|
|
11
|
-
JLC2KiCadLib/symbol/symbol_handlers.py,sha256=q3Ltv-h4nscomofZ00GNOosJwRw20_3v8uxcxhhoqEs,9661
|
|
12
|
-
JLC2KiCadLib-1.0.32.dist-info/LICENSE,sha256=tyXpHLah0G-ROQan655i3SKSrKXSD9ccfDnwVQa8q8U,1089
|
|
13
|
-
JLC2KiCadLib-1.0.32.dist-info/METADATA,sha256=1enGejA8tq6gSP5wYhGkAhReadryTt_RKAJASaR2-QI,6872
|
|
14
|
-
JLC2KiCadLib-1.0.32.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
|
|
15
|
-
JLC2KiCadLib-1.0.32.dist-info/entry_points.txt,sha256=WF-HbrktGM05drU8Vtkl4hXIQugiO65a96LOCTip19s,64
|
|
16
|
-
JLC2KiCadLib-1.0.32.dist-info/top_level.txt,sha256=wLbJ381HZrM-GLIGgVe-YbUEFpUcOdDYhqwt3atu3OA,13
|
|
17
|
-
JLC2KiCadLib-1.0.32.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|