
    i#                     2   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z	d dl
Z
d Zd Zd$dZd Zd Zd%dZg g fd	Zg g fd
ZdZ ed        ee      Z eed      Z eed      ZeD  cg c]  \  } }} e| ||       c}}} Z edeeD  cg c]  \  } }}| |df c}}}         edeeD  cg c]  \  } }}| |df c}}}         edeeD  cg c]  \  } }}| |df c}}} e        edeeD  cg c]  \  } }}| |df c}}} e       dZ ed        ee      Z eed      Z eed      ZeD  cg c]  \  } }} e| ||       c}}} ZeD  cg c]  \  } }} e| ||dd       c}}} Z eegez         ZejA                  dd      jA                  dd      Z edeeD  cg c]  \  } }}| |df c}}}         ed eeD  cg c]  \  } }}| |df c}}}         ed!eeD  cg c]  \  } }}| |df c}}} e        ed"eeD  cg c]  \  } }}| |df c}}} e        ed#       yc c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w )&    N)unary_unionc                    g }t        | d      5 }|j                         }dt        j                  |      z   dz   }t        j                  ||t        j
                        }|D ]b  }|j                  t        |j                  d            t        |j                  d            t        |j                  d      xs d      g       d 	 d d d        |S # 1 sw Y   |S xY w)Nrz\(footprint\s+"[^"]*?z/".*?\(at ([\d.-]+) ([\d.-]+)(?:\s+([\d.-]+))?\)         r   )	openreadreescapefinditerDOTALLappendfloatgroup)	file_pathfootprint_name
footprintsfcontentpatternmatchesms           ,/home/hanthebot/chat/keyboard/make_plates.pyget_footprintsr      s    J	i	 &&($ii'(@A 	
 ++gw		: 	Aqwwqz"E!''!*$5uQWWQZ_17MN	  s   B8CCc                 n   g }g }t        | d      5 }|j                         }t        j                  d|t        j                        }|D ]y  }|j                  t        |j                  d            t        |j                  d            ft        |j                  d            t        |j                  d            ff       { t        j                  d|t        j                        }|D ]  }|j                  t        |j                  d            t        |j                  d            ft        |j                  d            t        |j                  d            ft        |j                  d            t        |j                  d	            ff        	 d d d        ||fS # 1 sw Y   ||fS xY w)
Nr   z_\(gr_line\s+\(start ([\d.-]+) ([\d.-]+)\)\s+\(end ([\d.-]+) ([\d.-]+)\).*?\(layer "Edge.Cuts"\)r   r   r      z|\(gr_arc\s+\(start ([\d.-]+) ([\d.-]+)\)\s+\(mid ([\d.-]+) ([\d.-]+)\)\s+\(end ([\d.-]+) ([\d.-]+)\).*?\(layer "Edge.Cuts"\)      )r	   r
   r   r   r   r   r   r   )r   linesarcsr   r   line_matchesr   arc_matchess           r   parse_edge_cutsr$      st   ED	i	 &&({{nII

  	ALL1771:&aggaj(9:1771:&aggaj(9:	 kk LII

  	AKK1771:&aggaj(9:1771:&aggaj(9:1771:&aggaj(9:	): $;;: $;s   F
F((F4c           	         | x}}|}|}t        |d   |d   z
  |d   |d   z
  z  |d   |d   z
  |d   |d   z
  z  z
        dk  r| ||gS |\  }}	|\  }
}|\  }}|||z
  z  |	|
|z
  z  z
  |
|z  z   ||z  z
  }t        |      dk  r| ||gS |dz  |	dz  z   ||z
  z  |
dz  |dz  z   ||	z
  z  z   |dz  |dz  z   |	|z
  z  z   d|z  z  }|dz  |	dz  z   ||
z
  z  |
dz  |dz  z   ||z
  z  z   |dz  |dz  z   |
|z
  z  z   d|z  z  }t        j                  ||z
  dz  |	|z
  dz  z         }t        j                  |	|z
  ||z
        }t        j                  ||z
  |
|z
        }t        j                  ||z
  ||z
        }|dk  r|dt        j                  z  z  }|dk  r|dt        j                  z  z  }|dk  r|dt        j                  z  z  }d}||z
  dt        j                  z  z  }||z
  dt        j                  z  z  }||kD  rd}g }t        |dz         D ]  }||z  }|rD||||z
  dt        j                  z  z  z  z
  }||k  r?|||dt        j                  z  z   |z
  z  z
  }n||||z
  dt        j                  z  z  z  z   }|j                  ||t        j                  |      z  z   ||t        j                  |      z  z   f        |S )Nr   r   gư>r   FT)	absmathsqrtatan2piranger   cossin)startmidendnum_segmentstempp1p2p3x1y1x2y2x3y3Acxcyr   a1a2a3cwdiff1diff2ptsitas                               r   arc_to_linesrI   ?   sa   D2	B	B 	RURU]r!ur!u}-AA2a52a5=0QQR
	 sC  FBFBFB
b2grBw'"r'1BG;A
1v}sC   
QQ27#q52q5=R"W
%	&q52q5=R"W
%	& 
Q	
B 
QQ27#q52q5=R"W
%	&q52q5=R"W
%	& 
Q	
B
 			27q.BG>12A	BGR"W	%B	BGR"W	%B	BGR"W	%B	Av
a$''k	Av
a$''k	Av
a$''k	B"WTWW%E"WTWW%Eu}
C<!#$ AQ27q477{344ABwb1tww;.344Q27q477{344A

BTXXa[("q488A;*>?@A J    c                    t        |       \  }}g }|D ]+  \  }}|j                  t        j                  ||g             - |D ]7  \  }}}t	        |||      }|j                  t        j                  |             9 t        j
                  |      }t        j                  j                  |      }	t        |	t        j
                        rg }
|	j                  D ]3  }|j                  s|
j                  t        j                  |             5 t        |
      dk(  rQg }|D ]  }|j                  |        |D ]  }|j                  |        t        j                  |      j                   S t#        |
d       S |	j                  rt        j                  |	      S g }|D ]  }|j                  |        |D ]  }|j                  |        t        j                  |      j                   S )Nr   c                     | j                   S N)area)ps    r   <lambda>z#get_kicad_polygon.<locals>.<lambda>   s
    AFF rJ   )key)r$   r   geom
LineStringrI   MultiLineStringshapelyops	linemerge
isinstancegeomsis_ringPolygonlenextend
MultiPointconvex_hullmax)r   r    r!   segmentsr.   r0   r/   rE   
multi_linemergedpolyslineall_ptslrH   s                  r   get_kicad_polygonrh   |   s   !),KE4H 7
s567 .sC5#s+,-. %%h/J[["":.F&$../LL 	1D||T\\$/0	1 u:?G "q!" "q!"??7+777u"233>><<''G "q!" "q!"??7+777rJ   c                 
   t        j                  | dz  | dz  f|dz  | dz  f|dz  |dz  f| dz  |dz  fg      }t        j                  j	                  ||dd      }t        j                  j                  || |      }|S )Nr   )r   r   F)originuse_radians)xoffyoff)rR   r[   rU   affinityrotate	translate)xyrotwhrects         r   create_rect_polyrw      s    <<"q&1"q&	AEA26?QUAENaR!VQUOLD ""4V"OD%%d%;DKrJ   c                      t        | ||||      S rM   )rw   )rq   rr   rs   sizes       r   create_switch_holerz      s    Aq#tT22rJ   c           
      |   t        j                  | d      }|j                  \  }}}}||z
  dz   }	||z
  dz   }
|	 d|d<   |
 d|d<   |j                  |dz
  |dz
  |	|
       |j                  j
                  D cg c]  }|d   |d	   f }}|j                  |j                  |d
dd             |j                  D ]G  }|j
                  D cg c]  }|d   |d	   f }}|j                  |j                  |d
dd             I |D ]-  \  }}}|j                  |j                  ||f|d
dd             / |D ]Q  }|j                  j
                  D cg c]  }|d   |d	   f }}|j                  |j                  |d
dd             S |j                          t        d|         y c c}w c c}w c c}w )Ntiny)profile
   mmwidthheightr   r   r   noneblackg?)fillstrokestroke_width)centerr   r   r   r   	Exported )svgwriteDrawingboundsviewboxexteriorcoordsaddpolygon	interiorscirclesaveprint)filenameoutline_polyholesswitch_holesdwgmin_xmin_ymax_xmax_yr   r   rO   
ext_coordsinterior
int_coordshxhyr   swr   s                       r   
export_svgr      s   


8V
4C!-!4!4E5%EMBEU]RFWB<CLhbMCMKK	519eV4 )5(=(=(D(DE11Q41,EJEGGCKK
cKRS ** X,4OO<qqtQqTl<
<JVGRUVWX  
	BJJBx16'PS  	

  T(*(:(:;11Q41,;;FcRST HHJ	IhZ
 !' F = <s   ;F/F4F9c                 ,   t        j                  d      }|j                         }t        |j                  j
                        }|j                  |ddd       |j                  D ]-  }t        |j
                        }|j                  |ddd       / |D ]  \  }	}
}|j                  |	|
f|ddi         |D ]7  }t        |j                  j
                        }|j                  |d	dd       9 |j                  |        t        d
|         y )NR2010OutlineT)layerclosed)
dxfattribsr   Holes)radiusr   SwitchHolesr   )ezdxfnew
modelspacelistr   r   add_lwpolyliner   
add_circlesaveasr   )r   r   r   r   docmspr   r   r   r   r   r   r   r   s                 r   
export_dxfr      s   
))G
C
..
Cl++223Jz	T.RS ** X(//*
:IQU2VWX  J	BBxw6HIJ  Xbkk(()6QU.VWX JJx	IhZ
 !rJ   zcheapino/pcb/cheapino.kicad_pcbzProcessing Cheapino...zMountingHole_2.2mm_M2#Kailh_socket_MX_optional_reversiblezcheapino_bottom_fixed.svgg?)r   zcheapino_bottom_fixed.dxfzcheapino_top_fixed.svg)r   r   zcheapino_top_fixed.dxfz$cheapis/v0.1/kicad/cheapis.kicad_pcbz
Processing Cheapis...zMountingHole_2.2mm_M2_Pad_ViaSW_MX_GATLP_CHOC_reversibleg      2@g      ?r   )
join_styleg      zcheapis_bottom_fixed.svgzcheapis_bottom_fixed.dxfzcheapis_top_fixed.svgzcheapis_top_fixed.dxfz
Done!)   )g      ,@)!sysr   r'   rU   shapely.geometrygeometryrR   shapely.opsr   r   r   r   r$   rI   rh   rw   rz   r   r   cheapino_pcbr   	c_outlinec_holes
c_switchesc_switch_polyscheapis_pcb
ch_outlinech_holesch_switchesch_switch_polyskey_squaresmerged_ch_outlinebuffer)rq   rr   rs   _s   0000r   <module>r      s'   
 	    #  " F:z#8L3 .0b "@ .0b ". 1  l+	
'>
?L*OP
AKLLIAq#$Q3/L g2V2V71aAq#;2V g2V2V71aAq#;2V
 &-
.
.71aAq#;
.	 &-
.
.71aAq#;
.	 5   {+
+'FG[*GHBMNNYQ3%aC0N
 ITTT91a1c46T{ :;  &,,SQ,?FFQ G   &.
/
/71aAq#;
/
 &.
/
/71aAq#;
/ &.
/
/71aAq#;
/ 	 &.
/
/71aAq#;
/ 	 i K M 3W 3W / / O
 U 0
 0 0 0sB   /II7II! I(I/%I6;I=JJ(J