§
    Wwâj=  ã                   ó¶  — d Z ddlZddlmZ ddlZ ej        d¦  «         ddlmZ ddl	Z
ddlZddlmZ ddlmZ ddlmZ ej                             d e ee¦  «        j        ¦  «        ¦  «         ej                             dd¦  «         dd	lmZmZmZmZmZ ddlZdd
lmZm Z m!Z! edz  Z"g d¢Z#ddgZ$g d¢Z%d„ Z&d„ Z'd„ Z(d„ Z)e*dk    r e)¦   «          dS dS )a  The partition of each mesh under a few of degree_sweep.py's settings (rings by part, the decoded mesh by its nearest
part from the front and at 45 degrees, the layer spans): ../report/img/<object>_<rule>_k<kappa>_M<M>_a<atoms>.png. Decoded at 1024
and 6144 atoms (one encoding; the partition does not depend on the budget). The drawing is fcp_2710_tests' parts_report.render with the side
view turned to 45 degrees.

    env -u PYTHONPATH PYTHONWARNINGS=ignore .venv/bin/python ~/code/data/meshes/fcp_2810_partition/scripts/renders.py
é    N)ÚPathÚAgg)ÚPolyCollection)ÚLine3DCollection)ÚcKDTreez2/home/joao/code/data/meshes/fcp_2710_tests/scripts)ÚDEVICEÚOBJÚREPORTÚUPÚ	set_kappa)Ú_axesÚcolorsÚ
part_ringsÚimg))útracked-fitç      Y@é   )r   g     @�@é#   )r   g     ˆÃ@é2   i   i   ))©r   i¦ÿÿÿzrings by part (x-z))r   z"decoded mesh by nearest part (x-z)))é   iÓÿÿÿu0   decoded mesh by nearest part (45Â°, raised 25Â°)c           
      ó&   — | › d|› d|d›d|› d|› d�
S )NÚ_Ú_kÚgÚ_MÚ_az.png© )ÚobjÚruleÚkappaÚMÚTs        úA/home/joao/code/data/meshes/fcp_2810_partition/scripts/renders.pyÚnamer%   !   s4   € ØÐ3Ð3�DÐ3Ð3˜EÐ3Ð3Ð3 qÐ3Ð3¨AÐ3Ð3Ð3Ð3ó    c                 óÆ  — t          j        |¦  «        t          j        |¦  «        }}t          j        t          j        |¦  «         t          j        |¦  «        dg¦  «        }t          j        t          j        |¦  «         t          j        |¦  «        z  t          j        |¦  «         t          j        |¦  «        z  t          j        |¦  «        g¦  «        }	t          j        t          j        |¦  «        t          j        |¦  «        z  t          j        |¦  «        t          j        |¦  «        z  t          j        |¦  «        g¦  «        }
t          j        |                     d¦  «        |
z  ¦  «        }t          j        ||         |z  ||         |	z  gd¦  «        }|                      t          |||         ||         d¬¦  «        ¦  «         t          j        ||z  ||	z  gd¦  «        }| 
                    d¦  «        |                     d¦  «        z   dz  |                     d¦  «        | 
                    d¦  «        z
                       ¦   «         dz  dz  }}|                      |d         |z
  |d         |z   ¦  «         |                      |d         |z
  |d         |z   ¦  «         |                      d	¦  «         |                      ¦   «          d
S )zÔTriangles T (F, 3, 3) drawn orthographically from (elev, azim) as matplotlib's view_init names them, far ones
    first (painter's order per triangle: the 3D axes' own sort lets back walls show through the caps).g        é   éÿÿÿÿgš™™™™™¹?)Ú
facecolorsÚ
edgecolorsÚ
linewidthsr   é   gÍÌÌÌÌÌð?ÚequalN)ÚnpÚradiansÚarrayÚsinÚcosÚargsortÚmeanÚstackÚadd_collectionr   ÚminÚmaxÚset_xlimÚset_ylimÚ
set_aspectÚset_axis_off)Úaxr#   ÚfcÚelevÚazimÚPÚeÚaÚrightÚupÚtowardÚorderÚxyÚqÚmÚrs                   r$   ÚpaintrM   %   s5  € õ Œ:�dÑÔ�RœZ¨Ñ-Ô-€q€AÝŒH•r”v˜a‘y”y�j¥"¤&¨¡)¤)¨SÐ1Ñ2Ô2€EÝ	Œ•B”F˜1‘I”I�:¥¤ q¡	¤	Ñ)­B¬F°1©I¬I¨:½¼¸q¹	¼	Ñ+AÅ2Ä6È!Á9Ä9ÐMÑ	NÔ	N€BÝŒX•r”v˜a‘y”y¥2¤6¨!¡9¤9Ñ,­b¬f°Q©i¬i½"¼&À¹)¼)Ñ.CÅRÄVÈAÁYÄYÐOÑPÔP€FÝŒJ�q—v’v˜a‘y”y 6Ñ)Ñ*Ô*€EÝ	Œ�1�U”8˜eÑ# Q u¤X°¡]Ð3°RÑ	8Ô	8€BØ×Ò•n R°B°u´IÈ"ÈUÌ)Ð`cÐdÑdÔdÑeÔeÐeÝ
Œ�!�e‘)˜Q ™VÐ$ bÑ)Ô)€AØ�EŠE�!‰HŒH�q—u’u˜Q‘x”xÑ 1Ñ$ q§u¢u¨Q¡x¤x°!·%²%¸±(´(Ñ':×&?Ò&?Ñ&AÔ&AÀAÑ&EÈÑ&L€q€AØ‡K‚K��!”�q‘˜!˜Aœ$ ™(Ñ#Ô#Ð# R§[¢[°°1´¸±¸1¸Q¼4À!¹8Ñ%DÔ%DÐ%DÀbÇmÂmÐT[ÑF\ÔF\ÐF\Ð^`×^mÒ^mÑ^oÔ^oÐ^oÐ^oÐ^or&   c                 óî
  — t          | ¦  «        }t          t          | j        ¦  «        ¦  «        }t	          j        dd¬¦  «        }|                     |d¬¦  «         t          j        d„ |D ¦   «         ¦  «        }t          t          ¦  «        D �]�\  }\  \  }	}
}|dk    �r|                     dd	dd
d¬¦  «        }g g g }}}t          |¦  «        D ]Ã\  }}|€Œt          |¦  «        dk    r)|ddt          dt          |¦  «        dz  ¦  «        …         n|D ]|}|                     t          j        ||dd…         g¦  «        ¦  «         |                     ||         ¦  «         |                     | j        |         d         dk     rdnd¦  «         Œ}ŒÄ|                     t!          ||d|¬¦  «        ¦  «         �n,|��)| j                             |j        ¦  «        }t          j        t          |¦  «        d¦  «        }d}t          |¦  «        D ]&\  }}|�|||||j        dz  z   …<   ||j        dz  z  }Œ't          j        g d¢¦  «        }|t/          ||z  ¦  «                             ||j                                      d¦  «        |z  ¦  «        d                  }t          j        ||j        dd…df                  ||j        dd…df                  z
  ||j        dd…df                  ||j        dd…df                  z
  ¦  «        }|t          j        t          j                             |dd¬¦  «        d¦  «        z  }t          j        g d¢¦  «        }|t          j                             |¦  «        z  }ddt          j        ||z  ¦  «        z  z   }|                     dd	|dz   ¦  «        }tA          |||j                 ||         |dd…df         z  |	|
|¦  «         | !                    |d¬¦  «         |dk    r&| "                    |	|
¦  «         tG          ||¦  «         �ŒŸ|                     dd	d	¦  «        }t          | j        ¦  «        D ]9\  }\  }}}| $                    |||z
  dz   |||         |dk     rdnddd ¬!¦  «         Œ:| %                    d| j&        ¦  «         | '                    d"¦  «         | (                    d#¦  «         | )                    ¦   «          | !                    t          | j        ¦  «        › d$tU          d%„ | j        D ¦   «         ¦  «        › d&�d¬¦  «         | +                    ¦   «          | ,                    |¦  «         t	          j-        |¦  «         dS )'zÓCanonical frame, orthographic, height axis z up: every ring of every part (holes dashed) seen along +y; the decoded
    mesh coloured by its nearest part, seen along +y and at 45 degrees; the parts' layer spans.)é   é   én   )ÚfigsizeÚdpié   )Úfontsizec                 ó>   — g | ]}|®|                      dd¦  «        ‘ŒS )Nr)   é   )Úreshape)Ú.0rL   s     r$   ú
<listcomp>zrender.<locals>.<listcomp>;   s'   € ÐLÐLÐL°¸a¸m˜1Ÿ9š9 R¨Ñ+Ô+¸m¸m¸mr&   r   r(   é   Ú3dÚortho)Ú
projectionÚ	proj_typeNé(   z--Ú-gffffffæ?)r   r,   Ú
linestylesr)   rW   )ç      ð?rc   g      4@r-   T)ÚaxisÚkeepdimsgê-�™—q=)gÍÌÌÌÌÌÜ?g333333ã¿çÍÌÌÌÌÌä?gffffffÖ?rf   é	   z//Úkg333333Ó?)ÚleftÚcolorÚhatchÚ	edgecolorÚ	linewidthÚlayerÚpartz parts (c              3   ó*   K  — | ]\  }}}|d k     V — ŒdS )r   Nr   )rY   Úsr   s      r$   ú	<genexpr>zrender.<locals>.<genexpr>]   s,   è è € Ð-KÐ-K¹¸¸1¸a¨a°!ªeÐ-KÐ-KÐ-KÐ-KÐ-KÐ-Kr&   z holes, hatched): layer spans).r   r   ÚlenÚpartsÚpltÚfigureÚsuptitler/   ÚconcatenateÚ	enumerateÚVIEWSÚadd_subplotr9   ÚappendÚvstackÚadd_collection3dr   ÚposeÚto_canonicalÚverticesÚfullÚsizer1   r   ÚqueryÚfacesr5   ÚcrossÚmaximumÚlinalgÚnormÚabsrM   Ú	set_titleÚ	view_initr   Úbarhr:   ÚlayersÚ
set_xlabelÚ
set_ylabelÚinvert_yaxisÚsumÚtight_layoutÚsavefigÚclose)ÚdÚmeshÚpathÚtitleÚringsÚcolÚfigÚallprh   r@   rA   Úlabelr>   ÚsegsÚcsÚlsÚirL   ÚringÚVÚownÚoÚZro   ÚnÚlightÚshaderq   Úh0Úh1s                                 r$   Úrenderr­   4   sf  € õ �q‰MŒM€EÝ
•�Q”W‘”Ñ
Ô
€CÝ
Œ*˜W¨#Ð
.Ñ
.Ô
.€CØ‡L‚L� €LÑ$Ô$Ð$ÝŒ>ÐLÐL°UÐLÑLÔLÑMÔM€DÝ$-­eÑ$4Ô$4ð ñ Ñ ˆÑ ‰LˆT�4˜%Ø�Š6‰6Ø—’  A q°TÀW�ÑMÔMˆBØ˜r 2�b�"ˆDÝ! %Ñ(Ô(ð ð ‘��1Ø�9ØÝ9<¸Q¹¼À"º¸˜AÐ4Ð4¥ A¥s¨1¡v¤v°¡|Ñ 4Ô 4Ð4Ô5Ð5È!ð ð �DØ—K’K¥¤	¨4°°b°q°b´Ð*:Ñ ;Ô ;Ñ<Ô<Ð<¸b¿iºiÈÈAÌÑ>OÔ>OÐ>OÐQS×QZÒQZÐcdÔcjÐklÔcmÐnoÔcpÐstÒctÐctÐ[_Ð[_Ðz}ÑQ~ÔQ~ÐQ~ÐQ~ðà×ÒÕ 0°¸bÈSÐ]_Ð `Ñ `Ô `ÑaÔaÐaÑaØÑØ”×#Ò# D¤MÑ2Ô2ˆAÝ”'�#˜d™)œ) RÑ(Ô(ˆCØˆAÝ! %Ñ(Ô(ð Að A‘��1Ø�=Ø-.�C˜˜!˜aœf¨™k™/Ð)Ñ*°°Q´V¸q±[Ñ0@°øÝ”Ð)Ð)Ð)Ñ*Ô*ˆAØ•w˜t a™xÑ(Ô(×.Ò.¨q°´¬}×/AÒ/AÀ!Ñ/DÔ/DÀqÑ/HÑIÔIÈ!ÔLÔMˆDÝ”˜˜4œ: a a a¨ dÔ+Ô,¨q°´¸A¸A¸A¸q¸DÔ1AÔ/BÑBÀAÀdÄjÐQRÐQRÐQRÐTUÐQUÔFVÔDWÐZ[Ð\`Ô\fÐghÐghÐghÐjkÐgkÔ\lÔZmÑDmÑnÔnˆAØ•”�BœIŸNšN¨1°1¸t˜NÑDÔDÀeÑLÔLÑLˆAÝ”HÐ/Ð/Ð/Ñ0Ô0ˆE°%½2¼9¿>º>È%Ñ;PÔ;PÑ2P°%Ø˜4¥"¤&¨¨U©Ñ"3Ô"3Ñ3Ñ3ˆEØ—’  A q¨1¡uÑ-Ô-ˆBÝ�"�a˜œ
”m S¨¤Y°°q°q°q¸$°w´Ñ%?ÀÀtÈTÑRÔRÐRØ
�Š�U QˆÑ'Ô'Ð'Ø�Š6ˆ6Ø�LŠL˜˜tÑ$Ô$Ð$Ý�"�d‰OŒOˆOùØ	�Š˜˜A˜qÑ	!Ô	!€BÝ# A¤GÑ,Ô,ð tð t‰ˆ‰;ˆAˆr�2Ø
�Š��2˜‘7˜Q‘; R¨s°1¬vÀQÈÂUÀU¸T¸TÐPTÐ`cÐorˆÑsÔsÐsÐsØ‡K‚K��1”8ÑÔÐ˜bŸmšm¨GÑ4Ô4Ð4°b·m²mÀFÑ6KÔ6KÐ6KÈRÏ_Ê_ÑM^ÔM^ÐM^Ø‡L‚L•C˜œ‘L”LÐjÐj­#Ð-KÐ-KÀ1Ä7Ð-KÑ-KÔ-KÑ*KÔ*KÐjÐjÐjÐuv€LÑwÔwÐwØ×ÒÑÔÐØ‡K‚K�ÑÔÐÝ„Iˆc�N„N€N€N€Nr&   c                  óì  — t                                dd¬¦  «         t          j        ¦   «         D �]3\  } }t	          j        |d¬¦  «        }t          D �]\  }}}t          |¦  «         t          j	        |t          t          ¦  «        t          ||t          ¬¦  «        }t          D ]“}t          j        |                     |¦  «        t          ¬¦  «        }t!          |                     |¦  «        |t           t#          | ||||¦  «        z  | › d|› d|d	›d
|› d|› dt%          |j        ¦  «        › d�¦  «         Œ”t)          | |||t%          |j        ¦  «        d¬¦  «         �Œ�Œ5t          d¦  «         d S )NT)ÚparentsÚexist_okr—   )Úforce)ÚatomsrF   r"   rt   Údevice)r³   z: u   , Îº r   z, M z, z atoms, z parts)Úflushr   )ÚIMGÚmkdirr	   ÚitemsÚtrimeshÚloadÚSHOWr   ÚfcpÚencoder9   ÚATOMSr   r   ÚdecodeÚprefixr­   r%   rs   rt   Úprint)	r   r˜   r   r    r!   r"   r–   r#   rK   s	            r$   ÚmainrÁ   c   sy  € Ý‡I‚I�d T€IÑ*Ô*Ð*Ý”Y‘[”[ð 	Añ 	A‰	ˆˆTÝŒL˜ VÐ,Ñ,Ô,ˆÝ"ð 	Añ 	A‰NˆD�%˜Ý�eÑÔÐÝ”
˜1¥C­¡J¤Jµ2¸À$ÍvÐVÑVÔVˆAÝð _ð _�Ý”J˜qŸxšx¨™{œ{µ6Ð:Ñ:Ô:�Ý�q—x’x ‘{”{ A¥s­T°#°t¸UÀAÀqÑ-IÔ-IÑ'IØÐ]Ð] Ð]Ð]¨EÐ]Ð]Ð]¸Ð]Ð]¸aÐ]Ð]ÍÈQÌWÉÌÐ]Ð]Ð]ñ_ô _ð _ð _å�#�t˜U A¥s¨1¬7¡|¤|¸4Ð@Ñ@Ô@Ð@Ñ@ñ	Aõ ˆc�N„N€N€N€Nr&   Ú__main__)+Ú__doc__ÚsysÚpathlibr   Ú
matplotlibÚuseÚmatplotlib.pyplotÚpyplotru   Únumpyr/   r¸   Úmatplotlib.collectionsr   Úmpl_toolkits.mplot3d.art3dr   Úscipy.spatialr   r˜   ÚinsertÚstrÚ__file__ÚparentÚdegree_sweepr   r	   r
   r   r   r»   Úparts_reportr   r   r   rµ   rº   r½   rz   r%   rM   r­   rÁ   Ú__name__r   r&   r$   ú<module>rÕ      sÏ  ððð ð €
€
€
Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €
„ˆuÑ Ô Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø !Ð !Ð !Ð !Ð !Ð !à „‡‚��3�3�t�t˜H‘~”~Ô,Ñ-Ô-Ñ .Ô .Ð .Ø „‡‚�ÐGÑ HÔ HÐ HØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 
€
€
€
Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2àˆu�n€ØUÐUÐU€Ø	ˆtˆ€ð	Jð 	Jð 	J€ð4ð 4ð 4ðpð pð pð,ð ,ð ,ð^ð ð ð ˆzÒÐØ€D�F„F€F€F€Fð Ðr&   