ó
    4½j*  ã                   óè  • S r SSKrSrS rS rS$S jrS%S jrS&S jr\S	:X  Ga,  SSK	r	\	R                  R                  \	R                  R                  \	R                  R                  \5      S
S5      5      r\	R                   " \SS9  / SQr\" \S5       HU  u  rr\	R                  R                  \S\ S35      r\" \SSS9 r\R1                  \" \S95        SSS5        \" S\5        MW     SSS.SSS.SSS.SSS.S S!S./r\	R                  R                  \S"5      r\" \SSS9 r\R1                  \" \S#95        SSS5        \" S\5        gg! , (       d  f       N~= f! , (       d  f       N*= f)'a  Semicircular protractor SVG generator for AGS Math instruments.

generate(angle, size) -> str  (self-contained SVG)

  - Cream semicircle face with an ink outline.
  - Steel-blue degree ticks around the arc; minors every 10 deg,
    longer majors with numeric labels every 30 deg.
  - Gold horizontal baseline through the centre.
  - Crimson ray from the centre at the given `angle` (0-180, measured
    anticlockwise from the right-hand baseline, standard protractor).
  - D0ACAC rounded border frame; CSS-var style block.
é    Nzƒ<style>svg{--crimson:#960000;--gold:#BF9237;--lime:#88C808;--steel:#4A6488;--cream:#FAF5EE;--ink:#2A2A2A;--border:#D0ACAC;}</style>c                 óš   • [         R                  " U5      nX[         R                  " U5      -  -   X[         R                  " U5      -  -
  4$ )z?Point at `deg` measured anticlockwise from the +x (right) axis.)ÚmathÚradiansÚcosÚsin)ÚcxÚcyÚrÚdegÚas        Ú;C:\allgifted\mathapi11v2\tools\svg_generators\protractor.pyÚ_ptr      s9   € ä�Š�SÓ€AØ”D—H’H˜Q“K‘Ñ ¬$¯(ª(°1«+¡oÑ!5Ð5Ð5ó    c                 ó@  • U n[        U S-  5      nUS-  nUS-
  n[        US-  S-
  US-
  5      n/ nUR                  SU SU SU SU S	3	5        UR                  [        5        UR                  S
US-
   SUS-
   S35        [	        X4US5      u  px[	        X4US5      u  pšUR                  SU	S SU
S SUS SUS SUS SUS S35        [        SSS5       H�  nUS-  S:H  nU(       a  SOSn[	        X4X[5      u  pï[	        X4X]-
  U5      u  nnUR                  SUS SUS SUS SUS SU(       a  SOS S35        U(       d  Mm  [	        X4US-
  U5      u  nnUR                  S US S!US S"U S#35        MŸ     UR                  SU	S SUS SUS SUS S$3	5        XcXEX4$ )%z§Build the cream protractor face (frame, semicircle, ticks, baseline).

Returns (parts, cx, cy, R, width, height) so callers can append rays
before closing the </svg>.
g×£p=
×ã?é   é   é   z/<svg xmlns="http://www.w3.org/2000/svg" width="z
" height="z" viewBox="0 0 Ú z">z<rect x="3" y="3" width="é   zG" rx="18" ry="18" fill="none" stroke="var(--border)" stroke-width="4"/>r   é´   z<path d="M ú.2fz A z 0 0 1 zV Z" fill="var(--cream)" stroke="var(--ink)" stroke-width="3" stroke-linejoin="round"/>éµ   é
   é   é	   ú
<line x1="ú" y1="ú" x2="ú" y2="z&" stroke="var(--steel)" stroke-width="gš™™™™™@g333333ó?z"/>ú	<text x="ú" y="zo" font-family="sans-serif" font-size="12" fill="var(--steel)" text-anchor="middle" dominant-baseline="central">ú</text>zB" stroke="var(--gold)" stroke-width="3.5" stroke-linecap="round"/>)ÚintÚminÚappendÚSTYLEr   Úrange)ÚsizeÚwidthÚheightr   r	   ÚRÚpartsÚlxÚlyÚrxÚryr   Úis_majorÚtlenÚx1Úy1Úx2Úy2ÚlxpÚlyps                       r   Ú_facer9      sG  € ð €EÜ�˜‘Ó€FØ	�‰€BØ	�"‰€BÜˆE�A‰I˜‰N˜B ™GÓ$€Aà€EØ	‡L�LØ
9¸%¸À
È6È(ð SØ�w˜a ˜x rð	+ôð 
‡L�L”Ôð 
‡L�LØ
# E¨!¡G 9¨J°v¸a±x°jð A@ð 	Aôô �˜˜AÓ�F€BÜ�˜˜CÓ �F€BØ	‡L�LØ
�b˜�X˜Q˜r #˜h c¨!¨C¨°°!°C°¸ÀÀ3¸xÀqÈÈCÈð Q$ð 	%ôô �Q˜˜RÖ ˆØ˜"‘H ‘MˆÞ‰r 1ˆÜ�R˜QÓ$‰ˆÜ�R˜Q™X sÓ+‰ˆˆBØ�‰Ø˜˜C˜  r¨# h¨f°R¸°H¸FÀ2ÀcÀ(ð K3Þ:B±3ÈÐ2LÈCðQô	
÷ ˆ8Ü˜2 1 r¡6¨3Ó/‰HˆC�Ø�L‰LØ˜C ˜9 E¨#¨c¨ð 3/à/2¨e°7ð<öñ !ð$ 
‡L�LØ
�R˜�H˜F 2 c (¨&°°C°¸¸rÀ#¸hð GKð 	Lôð
 �b˜UÐ*Ð*r   c                 óà   • [        XUS-
  U5      u  pgU R                  SUS SUS SUS SUS S3	5        Ub7  US	:w  a0  [        XUS
-   U5      u  p‰U R                  SUS SU	S SU S35        ggg)zEAppend a crimson ray from centre at `angle`, with optional rim label.é   r   r   r   r   r   zE" stroke="var(--crimson)" stroke-width="3.5" stroke-linecap="round"/>NÚ é   r    r!   z„" font-family="sans-serif" font-size="14" font-weight="bold" fill="var(--crimson)" text-anchor="middle" dominant-baseline="central">r"   )r   r%   )
r,   r   r	   r+   ÚangleÚlabelÚexÚeyr-   r.   s
             r   Ú_rayrB   X   sª   € ä�˜˜Q™ Ó&�F€BØ	‡L�LØ
�R˜�H˜F 2 c (¨&°°C°¸¸rÀ#¸hð GNð 	Oôð Ñ˜U b›[ä�R˜Q ™V UÓ+‰ˆØ�‰Ø˜˜3�x˜u R¨ Hð -@à@E¸wÀgðOõ	
ð )Ðr   c           	      óð   • [        S[        S[        U 5      5      5      n [        U5      u  p#pEpg[	        X#XEU 5        UR                  SUS SUS S35        UR                  S5        SR                  U5      $ )	Nç        ç     €f@ú<circle cx="r   ú" cy="ú" r="5" fill="var(--crimson)"/>ú</svg>Ú
)Úmaxr$   Úfloatr9   rB   r%   Újoin)r>   r(   r,   r   r	   r+   r)   r*   s           r   ÚgeneraterN   i   sr   € Ü�”S˜¤ e£Ó-Ó.€Eä&+¨D£kÑ#€Eˆr�eô 	ˆ�B˜5Ô!à	‡L�L�<  3˜x v¨b°¨XÐ5TÐUÔVà	‡L�L�ÔØ�9‰9�UÓÐr   c                 ó`  • U =(       d    / n U SS n [        U5      u  p#pEpgU  HN  n[        S[        S[        UR	                  SS5      5      5      5      n	[        X#XEX˜R	                  S5      5        MP     UR                  SUS	 S
US	 S35        UR                  S5        SR                  U5      $ )zºDraw the protractor once with multiple labelled crimson rays.

rays : list of dicts {"angle": float (0-180), "label": str}. Up to 6.
Backward-compatible companion to generate(angle=..).
Nr   rD   rE   r>   r   r?   rF   r   rG   rH   rI   rJ   )r9   rK   r$   rL   ÚgetrB   r%   rM   )
Úraysr(   r,   r   r	   r+   r)   r*   ÚentryÚangs
             r   Úgenerate_raysrT   w   s§   € ð �:�2€DØ��ˆ8€Dä&+¨D£kÑ#€Eˆr�eãˆÜ�#”s˜5¤%¨¯	©	°'¸1Ó(=Ó">Ó?Ó@ˆÜˆU˜˜s§I¡I¨gÓ$6Ö7ñ ð
 
‡L�L�<  3˜x v¨b°¨XÐ5TÐUÔVà	‡L�L�ÔØ�9‰9�UÓÐr   Ú__main__z..ÚsamplesT)Úexist_ok)é-   éZ   é‡   é   Úprotractor_z.svgÚwzutf-8)Úencoding)r>   Úwroter   ÚA)r>   r?   éK   ÚBén   ÚCé‘   ÚDé    ÚEzprotractor_rays_1.svg)rQ   )N)rX   éT  )Nri   )Ú__doc__r   r&   r   r9   rB   rN   rT   Ú__name__ÚosÚpathÚabspathrM   ÚdirnameÚ__file__ÚoutÚmakedirsrV   Ú	enumerateÚirS   ÚpÚopenÚfÚwriteÚprintrQ   © r   r   Ú<module>r{      sq  ðñó ðOð ò6ò:+ôz
ô"ôð, ˆzÔÛØ
�'‰'�/‰/˜"Ÿ'™'Ÿ,™, r§w¡w§¡°xÓ'@À$È	ÓRÓ
S€CØ‡K‚K�˜dÒ#Ú€GÙ˜G QÖ'‰ˆˆ3Ø�G‰G�L‰L˜ ¨A¨3¨dÐ3Ó4ˆÙ�!�S 7Ò+¨qØ�G‰G‘H 3Ñ'Ô(÷ ,áˆg�qÖñ	 (ð ˜sÑ#Ø˜sÑ#Ø Ñ$Ø Ñ$Ø Ñ$ð€Dð 	�‰�‰�SÐ1Ó2€AÙ	ˆa�˜wÒ	'¨1Ø	�‰‘ 4Ñ(Ô)÷ 
(á	ˆ'�1Õð+ ÷ ,Õ+ú÷ 
(Õ	'ús   ÃEÄ)E#Å
E 	Å#
E1