mirror of
https://github.com/atomic14/kicad-coil-plugins.git
synced 2024-10-18 09:06:57 +00:00
140 lines
3.5 KiB
Python
140 lines
3.5 KiB
Python
import json
|
|
import pandas as pd
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
def create_track(points):
|
|
return [{"x": x, "y": y} for x, y in points]
|
|
|
|
|
|
def dump_json(
|
|
filename,
|
|
stator_radius,
|
|
stator_hole_radius,
|
|
track_width,
|
|
pad_diam,
|
|
pad_drill,
|
|
via_diam,
|
|
via_drill,
|
|
vias,
|
|
pads,
|
|
silk,
|
|
tracks_f,
|
|
tracks_b,
|
|
):
|
|
# dump out the results to json
|
|
json_result = {
|
|
"parameters": {
|
|
"trackWidth": track_width,
|
|
"statorHoleRadius": stator_hole_radius,
|
|
"statorRadius": stator_radius,
|
|
"viaDiameter": via_diam,
|
|
"viaDrillDiameter": via_drill,
|
|
"padDiameter": pad_diam,
|
|
"padDrillDiameter": pad_drill,
|
|
},
|
|
"vias": vias,
|
|
"pads": pads,
|
|
"silk": silk,
|
|
"tracks": {
|
|
"f": [create_track(points) for points in tracks_f],
|
|
"b": [create_track(points) for points in tracks_b],
|
|
},
|
|
}
|
|
json.dump(json_result, open(filename, "w"))
|
|
return json_result
|
|
|
|
|
|
def plot_json(json_result):
|
|
stator_radius = json_result["parameters"]["statorRadius"]
|
|
stator_hole_radius = json_result["parameters"]["statorHoleRadius"]
|
|
pad_diam = json_result["parameters"]["padDiameter"]
|
|
pad_drill = json_result["parameters"]["padDrillDiameter"]
|
|
# track_width = json_result["parameters"]["trackWidth"]
|
|
via_dim = json_result["parameters"]["viaDiameter"]
|
|
via_drill = json_result["parameters"]["viaDrillDiameter"]
|
|
# plot the back tracks
|
|
ax = None
|
|
for track in json_result["tracks"]["b"]:
|
|
df = pd.DataFrame(track, columns=["x", "y"])
|
|
ax = df.plot.line(x="x", y="y", color="blue", ax=ax)
|
|
ax.axis("equal")
|
|
|
|
# plot the front tracks
|
|
for track in json_result["tracks"]["f"]:
|
|
df = pd.DataFrame(track, columns=["x", "y"])
|
|
ax = df.plot.line(x="x", y="y", color="red", ax=ax)
|
|
ax.axis("equal")
|
|
|
|
# hide the legend
|
|
ax.legend().set_visible(False)
|
|
# make the plot bigger
|
|
ax.figure.set_size_inches(10, 10)
|
|
|
|
# plot the vias
|
|
for via in json_result["vias"]:
|
|
ax.add_patch(
|
|
plt.Circle(
|
|
(via["x"], via["y"]),
|
|
radius=via_dim / 2,
|
|
fill=True,
|
|
color="black",
|
|
)
|
|
)
|
|
ax.add_patch(
|
|
plt.Circle(
|
|
(via["x"], via["y"]),
|
|
radius=via_drill / 2,
|
|
fill=True,
|
|
color="white",
|
|
)
|
|
)
|
|
|
|
# plot the edge cuts
|
|
ax.add_patch(
|
|
plt.Circle(
|
|
(0, 0),
|
|
radius=stator_radius,
|
|
fill=False,
|
|
color="yellow",
|
|
)
|
|
)
|
|
ax.add_patch(
|
|
plt.Circle(
|
|
(0, 0),
|
|
radius=stator_hole_radius,
|
|
fill=False,
|
|
color="yellow",
|
|
)
|
|
)
|
|
|
|
# plot the pads
|
|
for pad in json_result["pads"]:
|
|
ax.add_patch(
|
|
plt.Circle(
|
|
(pad["x"], pad["y"]),
|
|
radius=pad_diam / 2,
|
|
fill=True,
|
|
color="yellow",
|
|
)
|
|
)
|
|
ax.add_patch(
|
|
plt.Circle(
|
|
(pad["x"], pad["y"]),
|
|
radius=pad_drill / 2,
|
|
fill=True,
|
|
color="white",
|
|
)
|
|
)
|
|
|
|
# plot the silk
|
|
for silk in json_result["silk"]:
|
|
ax.text(
|
|
silk["x"],
|
|
silk["y"],
|
|
silk["text"],
|
|
horizontalalignment="center",
|
|
verticalalignment="center",
|
|
color="black",
|
|
fontsize=50,
|
|
)
|