49 lines
3.1 KiB
Python
49 lines
3.1 KiB
Python
import sys, time
|
||
sys.path.insert(0,'.')
|
||
from gerb import *
|
||
import matplotlib.pyplot as plt
|
||
from matplotlib.patches import Rectangle, FancyBboxPatch
|
||
import matplotlib.patheffects as pe
|
||
base="../in/03-Architecture-Hardware/kicad/production"
|
||
CU="#C8A05A"; CU2="#B8894A"; SILK="#F4F4F4"; BOARD="#1E3A2E"; EDGE="#333333"
|
||
INDIGO="#2C3C5B"; CYAN="#51F3DA"; TEAL="#17A08C"
|
||
def board_fig(b, prod, title, blocks, out, dpi=200):
|
||
t0=time.time()
|
||
cu,mac=parse(f"{base}/{prod}/hbox-watchdog-{b}-F_Cu.gtl")
|
||
silk,mac2=parse(f"{base}/{prod}/hbox-watchdog-{b}-F_Silkscreen.gto")
|
||
mask,mac3=parse(f"{base}/{prod}/hbox-watchdog-{b}-F_Mask.gts")
|
||
g_cu=geoms_of(cu,mac); g_silk=geoms_of(silk,mac2)
|
||
fig,ax=plt.subplots(figsize=(14,10.2))
|
||
ax.add_patch(Rectangle((60.19,40.32),140,100,facecolor=BOARD,edgecolor=EDGE,lw=1.5,zorder=0))
|
||
draw_geoms(ax,g_cu,CU,alpha=0.95,bg=BOARD,zorder=1)
|
||
draw_geoms(ax,g_silk,SILK,alpha=0.9,bg=BOARD,zorder=2)
|
||
for blk in blocks:
|
||
x0,y0,x1,y1,label,col=blk[:6]; pos=blk[6] if len(blk)>6 else "top"
|
||
ax.add_patch(FancyBboxPatch((x0,y0),x1-x0,y1-y0,boxstyle="round,pad=0.3,rounding_size=1.2",fill=False,edgecolor=col,lw=2.2,zorder=5))
|
||
if pos=="top": tx,ty,va=x0+0.8,y0+0.9,"top"
|
||
else: tx,ty,va=x0+0.8,y1-0.9,"bottom"
|
||
t=ax.text(tx,ty,label,color="white",fontsize=9.5,fontweight="bold",va=va,ha="left",zorder=6,
|
||
bbox=dict(boxstyle="round,pad=0.25",facecolor=col,edgecolor="none",alpha=0.92))
|
||
ax.set_xlim(58,202); ax.set_ylim(142,38.5) # y down like KiCad
|
||
ax.set_aspect("equal"); ax.axis("off")
|
||
ax.set_title(title,color=INDIGO,fontsize=15,fontweight="bold",loc="left")
|
||
fig.tight_layout(); fig.savefig(out,dpi=dpi,facecolor="white"); plt.close(fig)
|
||
print(out, f"{time.time()-t0:.1f}s")
|
||
common=[
|
||
(147,104,167,122,"U6 LTC4040 · L6 · RS1 · Q7 — respaldo y carga","#E9533A"),
|
||
(131,104,147,122,"U7 AP64350 · L7 — riel 3.3 V del módem","#F2A93B","bottom"),
|
||
(170,76,200,92,"J7/J8 zócalo XBee — 4G NTRIP Master","#9B59B6"),
|
||
(112,52,134,74,"U16 STM32F411 · Y3/Y4","#2EA3F2"),
|
||
(62,46,104,66,"U11 W5500 · J10 RJ45 — Ethernet","#3BB273"),
|
||
(150,62,163,108,"U10 SC16IS752 · U14 RS-485 · U15 RS-232 · U13","#3BB273"),
|
||
(131,124,158,136,"P15 RS-485 · P16 RS-232","#3BB273"),
|
||
(62,88,138,135,"MOD1 simpleRTK2B Pro (cara inferior)","#BBBBBB"),
|
||
(150,50,166,64,"K1 Modo B","#F2A93B"),
|
||
(172,128,194,139,"P1 GX16 (24 V · GND · IGN)","#E9533A"),
|
||
(86,41,100,50,"U26 SC7A20","#2EA3F2"),
|
||
]
|
||
v56=common+[(182,52,198,74,"U2 · L2 buck del ventilador (24 V)","#E9533A"),(176,114,200,127,"D10 · Q10 · C10 — entrada 24 V","#E9533A"),(101,41,122,50,"P2 5 V (SD-15B) · P10","#E9533A")]
|
||
v57=common+[(176,45,199,74,"U25 TPS54360B · L22 · D34 · C149/C150 — fuente 9–32 V","#E9533A"),(173,114,200,127,"F2 · D10 · Q10 · C10 — entrada 9–32 V","#E9533A")]
|
||
board_fig("v5","HBOX_v5_Rev6_PROD","EinarBoard V5.6 — cara superior (Gerber HBOX_v5_Rev6_PROD, 22-oct-2026)",v56,"fig/fig-v56-top.png")
|
||
board_fig("v57","HBOX_v5_Rev7_PROD","EinarBoard V5.7 — cara superior (Gerber HBOX_v5_Rev7_PROD, 22-oct-2026)",v57,"fig/fig-v57-top.png")
|