ó
    ½jË$  ã            	       óD  • S r SSKrSrSrSrS rS r  S#S	 jrS
 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SSSS9\" SSSSS9\" SSSSS9/r\" \S5       HW  u  rr\
R                  R                  \S\ S35      r\" \SSS9 r\R5                  \" S$0 \D65        SSS5        \" S\5        MY     \" SSSSSS 9\" SSS!SSS 9/r\" \S5       HW  u  rr\
R                  R                  \S"\ S35      r\" \SSS9 r\R5                  \" S$0 \D65        SSS5        \" S\5        MY     gg! , (       d  f       N•= f! , (       d  f       N.= f)%a#  Circular dial weighing (platform) scale SVG generator.

generate(reading, unit, full_scale, major_step, size) -> str  (self-contained SVG)

FULL-SCALE MAPPING (documented):
  The dial sweeps `full_scale` units over a SWEEP = 270 degrees arc.
  The needle's rest (zero) position is at the LOWER-LEFT, and the scale
  increases clockwise to the LOWER-RIGHT (a 90-deg gap at the bottom).

  Angle convention: clockwise angle measured from 12 o'clock (top), where
    x = cx + r*sin(theta),  y = cy - r*cos(theta).
  Zero sits at -135 deg (lower-left); full scale at +135 deg (lower-right).

    frac         = clamp(reading / full_scale, 0, 1)
    needle_angle = -135 + frac * 270   (degrees, clockwise-from-top)

  Majors are relabelled from 0..full_scale in steps of `major_step`.
  e.g. full_scale=1000, major_step=100 -> 0,100,...,1000 (11 majors).

  Backward compatible: generate(reading, unit) still defaults to a
  0..1000 face with majors every 100.

CIRCLE DIAL MODE (dial="circle"):
  A full 360-deg round face (e.g. a kitchen scale). 0 sits at the top
  (12 o'clock); labels run clockwise every `major_step` all the way
  around. The full-scale value coincides with 0 at the top.

    frac         = reading / full_scale (mod 1 for the needle)
    needle_angle = frac * 360   (degrees, clockwise-from-top)
é    Nzƒ<style>svg{--crimson:#960000;--gold:#BF9237;--lime:#88C808;--steel:#4A6488;--cream:#FAF5EE;--ink:#2A2A2A;--border:#D0ACAC;}</style>g     àp@g     à`Àc                 óš   • [         R                  " U5      nX[         R                  " U5      -  -   X[         R                  " U5      -  -
  4$ )N)ÚmathÚradiansÚsinÚcos)ÚcxÚcyÚrÚang_degÚas        Ú?C:\allgifted\mathapi11v2\tools\svg_generators\platform_scale.pyÚ_ptr   *   s9   € Ü�Š�WÓ€AØ”D—H’H˜Q“K‘Ñ ¬$¯(ª(°1«+¡oÑ!5Ð5Ð5ó    c                 ó|   • [        U [        U 5      -
  5      S:  a  [        [        [        U 5      5      5      $ SU -  $ )Ng•Ö&è.>z%g)ÚabsÚroundÚstrÚint)Úvs    r   Ú_fmtr   /   s4   € Ü
ˆ1Œu�Q‹x‰<Ó˜4ÓÜ”3”u˜Q“x“=Ó!Ð!Ø�1‰HÐr   Úgc                 ó¾  • [        U 5      n [        U5      n[        U5      nUS:X  a  [        XX#U5      $ US::  a  SO[        S[        SX-  5      5      n[        U[
        -  -   nUS-  nUS-  S-
  n	US-  S-
  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        UR                  SUS-
   S	US-
   S35        UR                  SU SU	 SU
 S35        US::  a  SO[        [        X#-  5      5      nSn[        SU5      U-  n[        US-   5       Hõ  nXþ-  n[        U[
        -  -   nUU-  nXý-  S:H  nU(       aƒ  [        X‰U
S-
  U5      u  nn[        X‰U
S-
  U5      u  nnUR                  SUS SUS SUS SUS S3	5        [        X‰U
S -
  U5      u  nnUR                  S!US S"US S#[        U5       S$35        M­  [        X‰U
S-
  U5      u  nn[        X‰U
S%-
  U5      u  nnUR                  SUS SUS SUS SUS S&3	5        M÷     [        X‰U
S-
  U5      u  nn[        X‰S'US(-   5      u  nnUR                  SUS SUS SUS SUS S)3	5        UR                  SU SU	 S*35        UR                  S!U S"XšS+-  -   S S,U S$35        UR                  S-5        S.R                  U5      $ )/NÚcircler   ç        ç      ð?é   é   é   ú/<svg xmlns="http://www.w3.org/2000/svg" width="ú
" height="ú" viewBox="0 0 Ú ú">ú<rect x="3" y="3" width="úG" rx="18" ry="18" fill="none" stroke="var(--border)" stroke-width="4"/>ú<rect x="12" y="12" width="é   ú'" rx="28" ry="28" fill="var(--steel)"/>ú<circle cx="ú" cy="ú" r="ú<" fill="var(--cream)" stroke="var(--ink)" stroke-width="3"/>é   é   é   é   ú
<line x1="ú.2fú" y1="ú" x2="ú" y2="ú*" stroke="var(--ink)" stroke-width="2.5"/>é    ú	<text x="ú" y="úm" font-family="sans-serif" font-size="13" fill="var(--ink)" text-anchor="middle" dominant-baseline="central">ú</text>é   ú(" stroke="var(--ink)" stroke-width="1"/>é   é´   úC" stroke="var(--crimson)" stroke-width="4" stroke-linecap="round"/>ú" r="8" fill="var(--crimson)"/>çÍÌÌÌÌÌÜ?úd" font-family="sans-serif" font-size="16" font-weight="bold" fill="var(--ink)" text-anchor="middle">ú</svg>Ú
)ÚfloatÚ_generate_circleÚmaxÚminÚSTART_ANGLEÚSWEEPÚappendÚSTYLEr   r   Úranger   r   Újoin)ÚreadingÚunitÚ
full_scaleÚ
major_stepÚsizeÚdialÚfracÚneedle_angler   r	   ÚRÚpartsÚn_majorsÚminor_per_majorÚminorsÚiÚfÚangÚvalueÚis_majorÚx1Úy1Úx2Úy2ÚlxÚlyÚnxÚnyÚtxÚtys                                 r   Úgeneraterl   5   s²  € ä�G‹n€GÜ�zÓ"€JÜ�zÓ"€JàˆxÓÜ ¨zÀtÓLÐLà “/‰3¤s¨3´°C¸Ñ9MÓ0NÓ'O€DÜ ¬¡Ñ-€Là	�‰€BØ	�‰�A‰€BØˆq‰�2‰€AØ€EØ	‡L�LØ
9¸$¸¸zÈ$Èð PØ�v˜Q˜t˜f Bð	(ôð 
‡L�L”Ôð 
‡L�LØ
# D¨¡F 8¨:°d¸1±f°Xð >@ð 	Aôð 
‡L�LØ
% d¨2¡g Y¨j¸¸b¹¸	ð B ð 	!ôð 
‡L�LØ
�r�d˜&   E¨!¨ð -1ð 	2ôð  !“O‰q¬¬U°:Ñ3JÓ-KÓ)L€HØ€OÜ��HÓ Ñ/€FÜ�6˜A‘:ÖˆØ‰JˆÜ˜A¤™IÑ%ˆØ�J‘ˆØÑ'¨1Ñ,ˆÞÜ˜  Q¡¨Ó,‰FˆB�Ü˜  R¡¨Ó-‰FˆB�Ø�L‰LØ˜R ˜H F¨2¨c¨(°&¸¸C¸ÀÀrÈ#Àhð O;ð <ôô ˜  R¡¨Ó-‰FˆB�Ø�L‰LØ˜B˜s˜8 5¨¨C¨ð 1/ä/3°E«{¨m¸7ðDöô ˜  Q¡¨Ó,‰FˆB�Ü˜  R¡¨Ó-‰FˆB�Ø�L‰LØ˜R ˜H F¨2¨c¨(°&¸¸C¸ÀÀrÈ#Àhð O9ð :öñ+ ô6 �˜˜R™ Ó.�F€Bˆä�˜˜\¨CÑ/Ó0�F€BˆØ	‡L�LØ
�R˜�H˜F 2 c (¨&°°C°¸¸rÀ#¸hð GLð 	Môð 
‡L�L�< ˜t 6¨"¨Ð-LÐMÔNð 
‡L�LØ
�B�4�u˜R D¡&™[¨Ð-ð . à $˜v Wð	.ôð 
‡L�L�ÔØ�9‰9�UÓÐr   c                 óþ  • US::  a  SOX-  nUS-  S-  nUS-  nUS-  S-
  nUS-  S-
  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        U
R                  SUS-
   S	US-
   S35        U
R                  SU SU SU	 S35        US::  a  SO[        S[        [	        X#-  5      5      5      nSnX¼-  n[        U5       Hé  nXí-  nUS-  nXò-  nXì-  S:H  nU(       aƒ  [        XxU	S-
  U5      u  nn[        XxU	S-
  U5      u  nnU
R                  SUS SUS SUS SUS S3	5        [        XxU	S -
  U5      u  nnU
R                  S!US S"US S#[        U5       S$35        M¡  [        XxU	S-
  U5      u  nn[        XxU	S%-
  U5      u  nnU
R                  SUS SUS SUS SUS S&3	5        Më     [        XxU	S-
  U5      u  nn[        XxS'US(-   5      u  nnU
R                  SUS SUS SUS SUS S)3	5        U
R                  SU SU S*35        U
R                  S!U S"X‰S+-  -   S S,U S$35        U
R                  S-5        S.R                  U
5      $ )/z4Full 360-deg round dial: 0 at top, labels clockwise.r   r   r   g     €v@r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   )	rL   rM   rH   r   r   rN   r   r   rO   )rP   rQ   rR   rS   rT   rV   rW   r   r	   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   s                                r   rG   rG   ‘   sd  € ð  “/‰3¨Ñ(<€DØ˜3‘J %Ñ'€Là	�‰€BØ	�‰�A‰€BØˆq‰�2‰€AØ€EØ	‡L�LØ
9¸$¸¸zÈ$Èð PØ�v˜Q˜t˜f Bð	(ôð 
‡L�L”Ôð 
‡L�LØ
# D¨¡F 8¨:°d¸1±f°Xð >@ð 	Aôð 
‡L�LØ
% d¨2¡g Y¨j¸¸b¹¸	ð B ð 	!ôð 
‡L�LØ
�r�d˜&   E¨!¨ð -1ð 	2ôð  !“O‰q¬¨Q´´E¸*Ñ:QÓ4RÓ0SÓ)T€HØ€OØÑ'€FÜ�6Ž]ˆØ‰JˆØ�%‰iˆØ‘ˆØÑ'¨1Ñ,ˆÞÜ˜  Q¡¨Ó,‰FˆB�Ü˜  R¡¨Ó-‰FˆB�Ø�L‰LØ˜R ˜H F¨2¨c¨(°&¸¸C¸ÀÀrÈ#Àhð O;ð <ôô ˜  R¡¨Ó-‰FˆB�Ø�L‰LØ˜B˜s˜8 5¨¨C¨ð 1/ä/3°E«{¨m¸7ðDöô ˜  Q¡¨Ó,‰FˆB�Ü˜  R¡¨Ó-‰FˆB�Ø�L‰LØ˜R ˜H F¨2¨c¨(°&¸¸C¸ÀÀrÈ#Àhð O9ð :öñ+ ô6 �˜˜R™ Ó.�F€BˆÜ�˜˜\¨CÑ/Ó0�F€BˆØ	‡L�LØ
�R˜�H˜F 2 c (¨&°°C°¸¸rÀ#¸hð GLð 	Môð 
‡L�L�< ˜t 6¨"¨Ð-LÐMÔNð 
‡L�LØ
�B�4�u˜R D¡&™[¨Ð-ð . à $˜v Wð	.ôð 
‡L�L�ÔØ�9‰9�UÓÐr   Ú__main__z..ÚsamplesT)Úexist_okr   Úkgé   r-   )rP   rQ   rR   rS   iÂ  i   éÈ   r/   Úplatform_scale_z.svgÚwzutf-8)ÚencodingÚwroter   )rP   rQ   rR   rS   rU   é
   Úplatform_scale_circle_)g     @o@r   iè  éd   i@  Úfan© )Ú__doc__r   rM   rK   rJ   r   r   rl   rG   Ú__name__ÚosÚpathÚabspathrO   ÚdirnameÚ__file__ÚoutÚmakedirsÚdictro   Ú	enumerater]   ÚkwÚpÚopenr^   ÚwriteÚprintÚcircle_samplesr|   r   r   Ú<module>rŽ      sË  ðñó< ðOð ð
 	€Ø€ò6ò
ð MPØôYòxSðl ˆzÔÛØ
�'‰'�/‰/˜"Ÿ'™'Ÿ,™, r§w¡w§¡°xÓ'@À$È	ÓRÓ
S€CØ‡K‚K�˜dÒ#á�Q˜T¨a¸AÑ>Ù�S˜s¨s¸sÑCÙ�Q˜T¨a¸AÑ>ð€Gñ
 ˜7 AÖ&‰ˆˆ2Ø�G‰G�L‰L˜ °¨s°$Ð7Ó8ˆÙ�!�S 7Ò+¨qØ�G‰G‘H‘N˜r‘NÔ#÷ ,áˆg�qÖñ	 'ñ 	�Q˜T¨a¸AÀHÑMÙ�Q˜T¨b¸QÀXÑNð€Nñ ˜>¨1Ö-‰ˆˆ2Ø�G‰G�L‰L˜Ð 6°q°c¸Ð>Ó?ˆÙ�!�S 7Ò+¨qØ�G‰G‘H‘N˜r‘NÔ#÷ ,áˆg�qÖò	 .ð' ÷ ,Õ+ú÷ ,Õ+ús   ÃF ÅFÆ 
F	Æ
F	