§
    hšäj
  ã            	       ó  — d Z ddlZddlZddlZddlZej        d         dge_        ddlmZm	Z	m
Z
 ddlZ ej        d¦  «        Zd„ Zdd„Zed	k    �r1ddlZddlZg Z ej        ¦   «         D ]í\  ZZ ej        ed
¬¦  «        Zej        ZdD ]Ì\  ZZ ej        eeed¬¦  «        Z eeeeej         ej!        ¬¦  «        Z"dD ])Z# eee#¦  «        ez  e"de#› �<    e
d„ ¦  «        e"de#› �<   Œ* ej$        ed¬¦  «        Z%e%j        ez  e"d<    e
d„ d¦  «        e"d<   e &                    e"¦  «          e'd„ e"                     ¦   «         D ¦   «         d¬¦  «         ŒÍŒî ej(        e¦  «         )                    e	dz  d¬¦  «         dS dS ) a  Volume straight from the descriptor: per ring the exact area of its Fourier curve, A = pi sum_k k (ax_k by_k - bx_k ay_k),
signed by the part (holes negative), summed over the rings at the layer centres times the layer thickness (or at a finer
height grid: `sub` heights per layer, the rings between the centres as the decoder reads them), times the pose's scale.
Against the source mesh's volume and the decoded mesh's (fcp.decode, then its volume). out/volume.csv.

    env -u PYTHONPATH ~/code/fcp_devel/.venv/bin/python scripts/volume.py
é    NÚx)ÚOBJECTSÚOUTÚtimeitz
fcp.decodec                 ó0  — t          j        d| j        d         dz
  dz  dz   t           j        ¬¦  «        }| dd…dddd…f                              t           j        ¦  «        | dd…dddd…f                              t           j        ¦  «        }}| dd…dddd…f                              t           j        ¦  «        | dd…dddd…f                              t           j        ¦  «        }}t           j        ||z  ||z  z
  |z                       d¦  «        z  S )z`Signed areas of the rings C (R, 2, K): K = 1 + 2N, columns 1, 3, ... cos k t, 2, 4, ... sin k t.é   é   )ÚdtypeNr   )ÚnpÚarangeÚshapeÚfloat64ÚastypeÚpiÚsum)ÚCÚkÚaxÚbxÚayÚbys         ú;/home/joao/code/data/meshes/fcp_3010_hull/scripts/volume.pyÚ
ring_areasr      sý   € å
Œ	�!�a”g˜a”j 1‘n¨Ñ*¨QÑ.µb´jÐAÑAÔA€AØˆqˆqˆq�!�Q�T˜�TˆzŒ]×!Ò!¥"¤*Ñ-Ô-¨q°°°°A°q°t¸!°t°¬}×/CÒ/CÅBÄJÑ/OÔ/Oˆ€BØˆqˆqˆq�!�Q�T˜�TˆzŒ]×!Ò!¥"¤*Ñ-Ô-¨q°°°°A°q°t¸!°t°¬}×/CÒ/CÅBÄJÑ/OÔ/Oˆ€BÝŒ5�R˜"‘W˜r B™wÑ&¨!Ñ+×0Ò0°Ñ3Ô3Ñ3Ð3ó    r   c                 óÄ  — | j         |z  }t                               |¦  «        }t          j        }d„ t          _        	 t                               | j        |                      ¦   «         || j         t          | j        ¬¦  «        }|t          _        n# |t          _        w xY wt          |d         |d         z
  ¦  «        }t          j
        t          j        | j        j        t          j        ¦  «        d¦  «        }t          |j        t          j        t#          |j        ¦  «        ¦  «        z                       ¦   «         |z  t          j        |¦  «        z  ¦  «        S )Nc                 ó   — d S ©N© )r   ÚFmÚxps      r   ú<lambda>zvolume.<locals>.<lambda>!   s   €  € r   )Úinterpr   r   )é   )ÚlayersÚDÚgridÚ_evalÚ_axis_ringsÚpartsÚcoefr   r"   ÚfloatÚbroadcast_toÚasarrayÚposeÚscaler   ÚsignÚabsr   r   r   Úprod)ÚdÚsubÚnÚcÚoldÚrÚdzÚss           r   Úvolumer;      sö   € Ø	Œ�3‰€AÝ	�Šˆq‰	Œ	€AÝ
Œ'€CØ$Ð$…A„GðÝ�MŠM˜!œ' 1§6¢6¡8¤8¨Q°´½"ÀQÄXˆMÑNÔNˆà�Œˆø�#�ŒˆˆˆˆÝ	ˆq�Œt�a˜”d‰{Ñ	Ô	€BÝ
Œ�œ
 1¤6¤<µ´Ñ<Ô<¸dÑCÔC€AÝ�!”&�2œ6¥*¨Q¬S¡/¤/Ñ2Ô2Ñ2×7Ò7Ñ9Ô9¸BÑ>ÅÄÈÁÄÑKÑLÔLÐLs   ¿AB ÂB Ú__main__Úmesh)Úforce))é€   i   )r?   é   )é   r@   Úcpu)Úatomsr$   Údevice)Úobjr$   Ú	atoms_reqrC   Ú
watertight)r   é   Úvol_sc                  ó6   — t          t          t          ¦  «        S r   )r;   r3   r4   r   r   r   r!   r!   8   s   € µ½½3±´€ r   Úms_s©rD   Úvol_decodedc                  óB   — t          j        t          d¬¦  «        j        S )NrB   rL   )ÚfcpÚdecoder3   r;   r   r   r   r!   r!   ;   s   € ­S¬Z½À%Ð-HÑ-HÔ-HÔ-O€ r   é   Ú
ms_decodedc                 ód   — i | ]-\  }}|t          |t          ¦  «        rt          |d ¦  «        n|“Œ.S )rH   )Ú
isinstancer+   Úround)Ú.0r   Úvs      r   ú
<dictcomp>rX   =   s9   € ÐYÐYÐYÁtÀqÈ!�1¥j°µEÑ&:Ô&:ÐA•u˜Q ‘{”{�{ÀÐYÐYÐYr   T)Úflushz
volume.csvF)Úindex)r   )*Ú__doc__Ú	importlibÚsysÚtimeÚnumpyr   ÚargvÚhullr   r   r   rO   Úimport_moduler%   r   r;   Ú__name__ÚpandasÚpdÚtrimeshÚrowsÚitemsÚnameÚpathÚloadÚmÚvtr$   rC   Úencoder3   ÚdictÚn_atomsÚis_watertightr8   r4   rP   ÚdmÚappendÚprintÚ	DataFrameÚto_csvr   r   r   ú<module>rw      sk  ððð ð Ð Ð Ð Ø 
€
€
€
Ø €€€à Ð Ð Ð àŒH�QŒK˜Ð€„Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø 
€
€
€
à€IÔ˜LÑ)Ô)€ð4ð 4ð 4ðMð Mð Mð Mð ˆzÒÑØÐÐÐØ€N€N€Nà€DØ#�g”m‘o”oð gð g‰
ˆˆdØˆGŒL˜ VÐ,Ñ,Ô,ˆØŒXˆØDð 
	gð 
	g‰MˆF�EØ�”
˜1 E°&ÀÐGÑGÔGˆAØ�˜ f¸ÀQÄYÐ[\Ô[jÐkÑkÔkˆAØð Að A�Ø#) 6¨!¨S¡>¤>°BÑ#6��-˜#�-�-Ñ Ø"( &Ð)?Ð)?Ñ"@Ô"@��,˜�,�,‘�Ø�”˜A eÐ,Ñ,Ô,ˆBØ!œy¨2™~ˆAˆmÑØ$˜fÐ%OÐ%OÐQRÑSÔSˆAˆl‰OØ�KŠK˜‰NŒNˆNØˆEÐYÐYÈqÏwÊwÉyÌyÐYÑYÔYÐaeÐfÑfÔfÐfÐfð
	gð €B„L�ÑÔ×Ò˜c LÑ0¸ÐÑ>Ô>Ð>Ð>Ð>ð' Ðr   