Ë
    .kŸj  ã                  óÞ   — d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
ZddlmZ  e	d«      Zedz  Zed	z  Zed
z  Z ej$                  g d¢«      Zddd„Zdd„Zdd„Zedk(  r e«        yy)zKPrepare and locally serve a browser-based Three.js viewer for the AC28 PLY.é    )ÚannotationsN)ÚSimpleHTTPRequestHandlerÚThreadingHTTPServer)ÚPath)Úread_ply_headerz
/workspaceuz   moltex-sample/PLY File (ì¸¡ì • ë�°ì�´í„°)/AC28_DT RR UPR STD 1_20260827 18ì‹œ01ë¶„ ìƒ�ì‚°_OK/all_merge_pointcloud_full.plyz3moltex-experiments/artifacts/ac28_ok_10k_sample.plyz4moltex-experiments/artifacts/ac28_ok_100k_sample.ply))Úxú<f4)Úyr	   )Úzr	   )ÚrÚu1)Úgr   )Úbr   c                ó�  — t         j                  «       st        t         «      ‚t        t         «      }t	        | |d   «      }| dk  rt
        nt        }|j                  j                  dd¬«       t        j                  t         t        d|d   |d   f¬«      }t        j                  d|d   d	z
  |t        j                  ¬
«      }||   j                  «       }~d|› d�j                  d«      }|j!                  d«      5 }|j#                  |«       |j#                  |j%                  «       «       ddd«       |S # 1 sw Y   |S xY w)zBWrite an evenly sampled binary PLY suitable for interactive WebGL.Úvertex_counté'  T)ÚparentsÚexist_okr   Úheader_bytes)ÚdtypeÚmodeÚoffsetÚshaper   é   )r   z3ply
format binary_little_endian 1.0
element vertex z{
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
ÚasciiÚwbN)ÚSOURCEÚis_fileÚFileNotFoundErrorr   ÚminÚSAMPLEÚHIGH_DETAIL_SAMPLEÚparentÚmkdirÚnpÚmemmapÚPOINT_DTYPEÚlinspaceÚint64ÚcopyÚencodeÚopenÚwriteÚtobytes)	Úpoint_countÚheaderÚcountÚoutputÚsource_pointsÚindicesÚsampleÚtarget_headerÚhandles	            úB/workspace/moltex-experiments/src/moltex_experiments/ply_viewer.pyÚprepare_sampler9      s(  € ä�>‰>ÔÜ¤Ó'Ð'ÜœVÓ$€FÜ�˜V NÑ3Ó4€EØ" fÒ,�VÔ2D€FØ
‡M�M×Ñ ¨tÐÔ4ä—I‘IÜÜØØ�nÑ%Ø�nÑ%Ð'ô€Mô �k‰k˜!˜V NÑ3°aÑ7¸ÄbÇhÁhÔO€GØ˜7Ñ#×(Ñ(Ó*€FØð	à˜ð !ð	÷ �fˆWƒoð ð 
�‰�TÔ	˜fØ�‰�]Ô#Ø�‰�V—^‘^Ó%Ô&÷ 
ð €M÷ 
ð €Mús   Ä 1D;Ä;Ec                ó  — d„ }t        d| f|«      }t        d| › d�«       t        dt        › �«       t        d|› �«       	 |j                  «        |j                  «        y# t        $ r Y Œw xY w# |j                  «        w xY w)zIServe /workspace on loopback, making the viewer and NAS copy same-origin.c                 ó6   — t        | dt        t        «      i|¤ŽS )NÚ	directory)r   ÚstrÚ	WORKSPACE)ÚargsÚkwargss     r8   Ú<lambda>zserve.<locals>.<lambda>?   s   € Ô&>ÀÐ&iÔPSÔT]ÓP^Ð&iÐbhÒ&ió    z	127.0.0.1z&Three.js PLY viewer: http://127.0.0.1:z/moltex-experiments/viewer/zDefault sample: zHigh-detail sample: N)r   Úprintr!   Úserve_foreverÚKeyboardInterruptÚserver_close)ÚportÚhigh_detail_sampleÚhandlerÚservers       r8   ÚserverK   =   s�   € ái€GÜ  +¨tÐ!4°gÓ>€FÜ	Ð2°4°&Ð8SÐ
TÔUÜ	ÐœV˜HÐ
%Ô&Ü	Ð Ð!3Ð 4Ð
5Ô6ðØ×ÑÔð 	×ÑÕøô ò Ùðûð 	×ÑÕús$   ÁA# Á#	A/Á,A2 Á.A/Á/A2 Á2Bc                 ól  — t        j                  t        ¬«      } | j                  dt        d¬«       | j                  dt        d¬«       | j                  dt        d¬«       | j                  d	d
¬«       | j                  «       }t        |j                  «      }t        d|› d|j                  «       j                  dz  dz  d›d�«       t        |j                  «      }t        d|› d|j                  «       j                  dz  dz  d›d�«       |j                  st        |j                  |«       y y )N)Údescriptionz--pointsr   )ÚtypeÚdefaultz--high-detail-pointsi † z--porti@  z--prepare-onlyÚ
store_true)Úactionz	Prepared z (i   z.1fz MiB))ÚargparseÚArgumentParserÚ__doc__Úadd_argumentÚintÚ
parse_argsr9   ÚpointsrC   ÚstatÚst_sizeÚhigh_detail_pointsÚprepare_onlyrK   rG   )Úparserr?   r5   rH   s       r8   Úmainr^   L   s  € Ü×$Ñ$´Ô9€FØ
×Ñ˜
¬°fÐÔ=Ø
×ÑÐ.´SÀ'ÐÔJØ
×Ñ˜¤s°DÐÔ9Ø
×ÑÐ(°ÐÔ>Ø×ÑÓ€DÜ˜DŸK™KÓ(€FÜ	ˆI�f�X˜R §¡£× 5Ñ 5¸Ñ <¸tÑ CÀCÐHÈÐ
NÔOÜ'¨×(?Ñ(?Ó@ÐÜ	ˆIÐ(Ð)¨Ð,>×,CÑ,CÓ,E×,MÑ,MÐPTÑ,TÐW[Ñ,[Ð\_Ð+`Ð`eÐ
fÔgØ×ÒÜˆd�i‰iÐ+Õ,ð rB   Ú__main__)r   )r/   rV   Úreturnr   )rG   rV   rH   r   r`   ÚNone)r`   ra   )rT   Ú
__future__r   rR   ÚosÚhttp.serverr   r   Úpathlibr   Únumpyr%   Ú moltex_experiments.matching_datar   r>   r   r!   r"   r   r'   r9   rK   r^   Ú__name__© rB   r8   Ú<module>rj      s‰   ðÙ Qå "ã Û 	ß EÝ ã å <ñ �Ó€	Ø	ðWñ
€ð 
ÐJÑ	J€ØÐ!WÑWÐ Øˆb�h‰hÚUó€ô
óDó-ð ˆzÒÙ…Fð rB   