
    tj]                     6   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d dlmZmZmZ d d	lmZ d
Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z!y)    N)vtkWindowToImageFilter)vtkPNGReadervtkPNGWritervtkJPEGWriter)vtkImageData)vtkUnsignedCharArray)vtkPResampleFilter)	iteritemsgetJSArrayType)update_cameracreate_spherical_cameracreate_cylindrical_camera)DataHandlerABCDEFGHIJKLMNOPQRSTUVWXYZc                   &    e Zd ZddZd Zd Zd Zy)CaptureRenderWindowc                     t               | _        | j                  j                  |       | j                  j                          | j                  j	                          d | _        y N)r   windowToImageSetScaleSetInputBufferTypeToRGBReadFrontBufferOnwriter)selfmagnifications     K/DATA/.local/lib/python3.12/site-packages/vtkmodules/web/dataset_builder.py__init__zCaptureRenderWindow.__init__   sL    35##M2224,,.    c                 :    | j                   j                  |       y r   )r   SetInput)r   renderWindows     r   SetRenderWindowz#CaptureRenderWindow.SetRenderWindow!   s    ##L1r   c                 $   |dk(  rCt               | _        | j                  j                  | j                  j	                                y |dk(  rCt               | _        | j                  j                  | j                  j	                                y y )N	image/png	image/jpg)r   r   SetInputConnectionr   GetOutputPortr   )r   mimeTypes     r   	SetFormatzCaptureRenderWindow.SetFormat$   sk    {"&.DKKK**4+=+=+K+K+MN$'/DKKK**4+=+=+K+K+MN %r   c                     | j                   rj| j                  j                          | j                  j                          | j                   j	                  |       | j                   j                          y y r   )r   r   ModifiedUpdateSetFileNameWrite)r   paths     r   
writeImagezCaptureRenderWindow.writeImage,   sT    ;;'')%%'KK##D)KK	 r   N)   )__name__
__module____qualname__r   r"   r)   r0    r   r   r   r      s    2O r   r   c                   8    e Zd Zi i fdZd Zd Zd ZddZd Zy)	DataSetBuilderc                    t        |      | _        || _        d | _        t	               | _        t        |      D ]!  \  }}| j                  j                  ||       # t        |      D ]!  \  }}| j                  j                  ||       # y r   )	r   dataHandlercameraDescriptioncamerar   imageCapturer
   addMetaData
addSection)r   locationcamera_datametadatasectionskeyvalues          r   r   zDataSetBuilder.__init__:   s}    &x0!,/1#H-JC((e4 . $H-JC''U3 .r   c                     | j                   S r   )r9   r   s    r   getDataHandlerzDataSetBuilder.getDataHandlerF   s    r   c                     | j                   S r   )r;   rF   s    r   	getCamerazDataSetBuilder.getCameraI   s    {{r   c                 d    t        | j                  |       | j                  j                          y r   )r   rendererr!   Render)r   r;   s     r   updateCamerazDataSetBuilder.updateCameraL   s"    dmmV,  "r   Nc                 h   |r|| _         || _        | j                  j                  |       | j                  r| j                  d   dk(  r8t        || j                  | j                  d   | j                  d         | _        nI| j                  d   dk(  r7t        || j                  | j                  d   | j                  d         | _        |j                         dt        fdt        d	      D              z  }| j                  j                  d
|       | j                  j                          y )Ntype	sphericalphithetacylindricaltranslationzrgb(%d, %d, %d)c              3   @   K   | ]  }t        |   d z          yw)   N)int).0ibgColors     r   	<genexpr>z'DataSetBuilder.start.<locals>.<genexpr>l   s#      6/7!GAJ$%xs      backgroundColor)r!   rK   r<   r"   r:   r   r9   r;   r   GetBackgroundtupleranger=   updateBasePattern)r   r!   rK   bgColorStringrZ   s       @r   startzDataSetBuilder.startP   s%    ,D$DM --l; %%))&1[@"9 ((..u5..w7	#DK ++F3}D"; ((..u5..}=	#DK ,,.G- 6/4Qx6 1 M (():MJ 	**,r   c                 8    | j                   j                          y r   )r9   writeDataDescriptorrF   s    r   stopzDataSetBuilder.stopt   s    ,,.r   )NN)	r2   r3   r4   r   rG   rI   rM   rc   rf   r5   r   r   r7   r7   9   s&    79B 
4 #"-H/r   r7   c                   $    e Zd Zi i fdZd Zd Zy)ImageDataSetBuilderc                     t         j                  | ||||       d|j                  d      d   z   }| j                  j	                  dd||       | j
                  j                  |       y )N./r1   imageblob)namerO   r(   fileName)r7   r   splitr9   registerDatar<   r)   )r   r?   imageMimeType
cameraInforA   rB   imageExtenstions          r   r   zImageDataSetBuilder.__init__~   sj    h
HhO 3 3C 8 ;;%%v 	& 	
 	##M2r   c                 l    | j                   j                  | j                  j                  d             y Nrl   )r<   r0   r9   getDataAbsoluteFilePathrF   s    r   r0   zImageDataSetBuilder.writeImage   s'    $$T%5%5%M%Mg%VWr   c                     | j                   D ]f  }t        | j                  |       | j                  j	                          | j
                  j                  | j                  j                  d             h y rv   )	r;   r   rK   r!   rL   r<   r0   r9   rw   )r   cams     r   writeImageszImageDataSetBuilder.writeImages   sX    ;;C$---$$&((  88A r   N)r2   r3   r4   r   r0   rz   r5   r   r   rh   rh   }   s    EGRT 3Xr   rh   c                   D    e Zd Zi i fdZd Zd Zd Zd Zd Zd Z	d
dZ
y	)VolumeCompositeDataSetBuilderc                    t         j                  | ||||       | j                  j                  dd       || _        d|j                  d      d   z   | _        |dk(  rt               | _        |dk(  rt               | _        t               | _        | j                  j                  | j                         t               | _        d | _        i | _        i | _        g g i i g d| _        d	| _        d	| _        i | _        y )
Nzvolume-compositez
rgba+depthrj   rk   r1   r$   r%   )layers
dimensionsfieldslayer_fieldspipeline )r7   r   r9   addTypesrr   rp   rt   r   imageWriterr   r   imageDataColorSetInputDataimageDataDepthdepthToWrite	layerInfocolorByMappingcompositePipelineactiveDepthKeyactiveRGBKeynodeWithChildren)r   r?   rr   rs   rA   rB   s         r   r   z&VolumeCompositeDataSetBuilder.__init__   s    h
HhO!!"4lC*"]%8%8%=a%@@K'+~DK',D*n%%d&9&9:*n  "
 ! "r   c                     || j                   v r| j                   |   S t        t        | j                            }|| j                   |<   || j                  d   |<   |S )Nr   )r   encode_codeslenr   )r   colorBy	colorCodes      r   _getColorCodez+VolumeCompositeDataSetBuilder._getColorCode   sc    d)))&&w// %S)<)<%=>I+4D(:AD""8,Y7r   c                 j   || j                   v r| j                   |   d   dfS t        t        | j                            }|||d| j                   |<   | j                  d   j	                  |       g | j                  d   |<   |r|| j
                  vr3|g g d}|| j
                  |<   | j                  d   j	                  |       | j
                  |   d   j	                  ||gd	       | j
                  |   d
   j	                  |       |dfS | j                  d   j	                  ||gd	       |dfS )NcodeF)r   rn   parentr~   r   )rn   idschildrenr   r   )rn   r   r   T)r   r   r   r   appendr   )r   r   	layerName	layerCoderootNodes        r   _getLayerCodez+VolumeCompositeDataSetBuilder._getLayerCode   sT   &NN9-f5u==$S%89I!! )DNN9%
 ""8,33I>@BD"">29= !6!66(.rrJH4<D))&1**:6==hG %%f-j9@@&	{; %%f-e4;;IF t$$	 &&z299&	{; t$$r   c                 p    || j                   d   |   v ry| j                   d   |   j                  |       y)Nr   FT)r   r   )r   r   r   s      r   _needToRegisterColorz2VolumeCompositeDataSetBuilder._needToRegisterColor   s>    ..~>yII"">29=DDYOr   c           	         | j                  ||      \  }}| j                  |      }| j                  ||      }d|z  | _        ||d| _        |r-| j
                  j                  | j                  dd|z  |g       |rL| j
                  j                  | j                  dd||d| j                  ||g| j                         y y )	Nz%s_depth_rgbarrayz/%s_depth.uint8rn   rO   ro   
categoriesrm   rk   )rn   rO   ro   r   r(   )	r   r   r   r   r   r9   rq   rt   rr   )r   r   rn   r   r   needToRegisterDepthr   needToRegisterColors           r   activateLayerz+VolumeCompositeDataSetBuilder.activateLayer   s    )-););FD)I&	&&&w/	"77	9M )94*3Y? ))((*Y6%;	 *  ))&&*3Y@T@TU&/;<++ *  r   c                    | j                   j                         d   }| j                   j                         d   }| j                  st        ||z        | _        | j                  D ]i  }| j                  |       | j                  j                  | j                        }| j                  j                  | j                        }|j                  | j                         | j                  j                  |       | j                  j                          |j                  | j                          | j                   j#                         j%                  d      }|j'                         }t)        |      D ])  }	t+        |j-                  |	            | j                  |	<   + t/        |d      5 }
|
j1                  | j                         d d d        l y # 1 sw Y   xxY w)Nr   r1   wb)r!   GetSizer   	bytearrayr;   rM   r9   rw   r   r   GetColorImager   r   r-   r.   GetDepthImager   GetPointDataGetArrayGetNumberOfTuplesr`   rW   GetValueopenwrite)r   mapperwidthheightry   	imagePath	depthPath
inputArraysizeidxfs              r   	writeDataz'VolumeCompositeDataSetBuilder.writeData	  s   !!))+A.""**,Q/   )%&. 9D;;Cc"((@@ARARSI((@@ATATUI
   !4!45((3""$
   !4!45,,99;DDQGJ//1DT{),Z-@-@-E)F!!#& # i&!))* '&+ * '&s   ,GG	c                 l    t         j                  | ||       | j                  j                  ddg       y )N   r1   )r7   rc   r;   updatePriority)r   r!   rK   s      r   rc   z#VolumeCompositeDataSetBuilder.start(  s*    T<:""Aq6*r   c           
      z   | j                   j                         | j                  d<   dj                  | j                  d         dz   | j                  d<   | j                  j                  d| j                         t        j                  |        |rt        j                  | j                  j                               D ]  \  }}}t        d|       |D ]  }d|v sd|vst        t        j                  j                  ||      d	      5 }t        j                  t        j                  j                  ||dz         d
      5 }t        j                   ||       d d d        d d d        t        j"                  t        j                  j                  ||               y y # 1 sw Y   JxY w# 1 sw Y   NxY w)Nr   Ar~   default_pipelineCompositePipelineCompress.uint8.gzrbr   )r!   r   r   joinr9   r>   r7   rf   oswalkgetBasePathprintr   r/   gzipshutilcopyfileobjremover   compressrootdirsfilesrn   f_inf_outs           r   rf   z"VolumeCompositeDataSetBuilder.stop,  sa   /3/@/@/H/H/J|,HHT++H56< 	12 	##$79O9OP 	D!%'WWT-=-=-I-I-K%L!dEj$'!D4'E,=!"'',,tT":DAT!% "T4%< @$"!& & 2 24 ?" B
 		"'',,tT":; " &M " " BAs$   8F1F%	F1%F.*F11F:NT)r2   r3   r4   r   r   r   r   r   r   rc   rf   r5   r   r   r|   r|      s2    EGRT #@!%F6+>+<r   r|   c                   2    e Zd Zdi fdZd Zd Zd ZddZy)DataProberDataSetBuilderNc                    t         j                  | |d |       || _        t               | _        | j                  j                  |       |r7| j                  j                  d       | j                  j                  |       n| j                  j                  d       | j                  j                  dd       i |i g dd| _
        | j                  D ]#  }| j                  j                  |dd|z  	       % y )
Nr   r1   zdata-proberbinary)r1   r1   r1   )typesr   rangesspacingr   z	/%s.arrayrn   rO   ro   )r7   r   fieldsToWriter	   resamplerFilterSetSamplingDimensionSetUseInputBoundsSetCustomSamplingBoundsr9   r   
DataProberrq   )r   r?   sampling_dimesionsfields_to_keepcustom_probing_boundsrA   fields          r   r   z!DataProberDataSetBuilder.__init__H  s     	hh?+13112DE   2215  889NO  2215 	!!-:, 	
 ''E));3F *  (r   c                 :    | j                   j                  |       y r   )r   r   )r   datasets     r   setDataToProbez'DataProberDataSetBuilder.setDataToProbeg  s    ))'2r   c                 V    | j                   j                  |j                                y r   )r   r&   r'   )r   sources     r   setSourceToProbez)DataProberDataSetBuilder.setSourceToProbej  s    //0D0D0FGr   c                    | j                   j                          | j                   j                         j                         }| j                  D ]m  }|j                  |      }|r't        |      }t        | j                  j                  |      d      5 }|j                  |       d d d        t        |      | j                  d   |<   || j                  d   v ry|j                         }|d   | j                  d   |   d   k  r|d   | j                  d   |   d<   |d   | j                  d   |   d   kD  s|d   | j                  d   |   d<   |j                         d   |j                         d   g| j                  d   |<   ?t        d|       t        | j                   j                                p y # 1 sw Y   xY w)Nr   r   r   r   r1   zNo array for)r   r,   	GetOutputr   r   r   
memoryviewr   r9   rw   r   r   r   GetRanger   )r   arraysr   r   br   	dataRanges          r   r   z"DataProberDataSetBuilder.writeDatam  s   ##%%%//1>>@''EOOE*Eu%$**BB5I4PTUGGAJ Q 3A2G(/DOOH55 % 0I |dooh&?&Fq&II>Gl1%8; |dooh&?&Fq&II>Gl1%8; (+(+8DOOH-e4
 ne,d**4467+ ( QPs   GG	c           
         | j                   j                  d| j                         t        j	                  |        |rt        j                  | j                   j                               D ]  \  }}}t        d|       |D ]  }d|v sd|vst        t
        j                  j                  ||      d      5 }t        j                  t
        j                  j                  ||dz         d      5 }t        j                  ||       d d d        d d d        t        j                  t
        j                  j                  ||               y y # 1 sw Y   JxY w# 1 sw Y   NxY w)Nr   r   z.arrayr   r   r   )r9   r>   r   r7   rf   r   r   r   r   r   r/   r   r   r   r   r   r   s           r   rf   zDataProberDataSetBuilder.stop  s   ##L$//B 	D!%'WWT-=-=-I-I-K%L!dEj$'!D4'E,=!"'',,tT":DAT!% "T4%< @$"!& & 2 24 ?" B
 		"'',,tT":; " &M " " BAs$   88E0E	EEEE%r   )r2   r3   r4   r   r   r   r   rf   r5   r   r   r   r   G  s$     #>3H84<r   r   c                       e Zd Zd Zd Zy)ConvertVolumeStackToSortedStackc                 .    || _         || _        d| _        y Nr   )r   r   r~   )r   r   r   s      r   r   z(ConvertVolumeStackToSortedStack.__init__  s    
r   c           	      	   i }i }g }t        j                  |      D ]~  }d|v sd|v s|j                  d      d   d   }d|v r$t         j                  j	                  ||      ||<   K|j                  |       t         j                  j	                  ||      ||<    |j                          t        |      dk(  ry g }t               }| j                  | j                  z  t        |      z  }	| j                  | j                  z  }
t        |      | _        t               }|j                  d       |j                  |	       t               }|j                  d       |j                  |	       t        | j                        D ]  }|j!                  |||             |j#                          |j%                         j'                         j)                  d      }t        |
      D ]Y  }|j+                  ||
z  |z   |j-                  |dz               |j+                  ||
z  |z   |j-                  |dz  dz                [ t/        |||      d      5 }|j                  |j1                                d d d         t               }|j                  d       |j                  |	       t               }|j                  d       |j                  |	       t               }|j                  d       |j                  |	       t        |
      D ]  }g }|D ]!  }|j                  ||   t        |      f       # |j                  d	 
       t        t        |            D ]|  }||   d   }|j+                  |
|z  |z   |       |j+                  |
|z  |z   |j-                  |
|z  |z                |j+                  |
|z  |z   |j-                  |
|z  |z                ~  t/        t         j                  j	                  |d      d      5 }|j3                  t5        |             d d d        t/        t         j                  j	                  |d      d      5 }|j3                  t5        |             d d d        t/        t         j                  j	                  |d      d      5 }|j3                  t5        |             d d d        y # 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w)Nr   _depth_r   r1      r\   r   c                     | d   S r   r5   )tups    r   <lambda>z9ConvertVolumeStackToSortedStack.convert.<locals>.<lambda>  s    CFr   )rC   zalpha.uint8r   zintensity.uint8zorder.uint8)r   listdirrp   r/   r   r   sortr   r   r   r   r~   r   SetNumberOfComponentsSetNumberOfTuplesr`   r-   r,   r   r   r   SetValuer   r   readr   r   )r   	directory
imagePaths
depthPaths
layerNamesro   fileIddepthArraysimageReadernumberOfValues	imageSizeopacity	intensitylayer	rgbaArrayr   	depthFile	destOrderopacityOrderintensityOrderpixelIdx
depthStack
depthArraydestLayerIdxsourceLayerIdxr   s                             r   convertz'ConvertVolumeStackToSortedStack.convert  sd   




9-H!X%9!,Q/2X%)+i)JJv&%%f-)+i)JJv& . 	z?a "ndkk1C
OCJJ,	*o '(%%a(!!.1(*	''*##N34;;'E##Jz%/@$AB #--/<<>GGJIY'""Y&#-y/A/A#'/J   Y&#-y/A/A#'A+/N	 ( jE!23T:i""9>>#34 ;: ($ )*	''*##N3+-**1-&&~6-/,,Q/((8i(HJ)
!!:h#7Z"IJ *OO 2O3 %c*o 6!+L!9!!< ""-9> %%-9$$i.&@H%LM ''-9&&	N(Bh'NO !7 ), "'',,y-8$?1GGJ|,- @ "'',,y*;<dCqGGJ~./ D "'',,y-8$?1GGJy)* @?Y ;:L @? DC @?s0    S	SS #S,S	S S),S5N)r2   r3   r4   r   r#  r5   r   r   r   r     s    
]+r   r   c                   2    e Zd Zi i fdZd Zd Zd ZddZy)SortedCompositeDataSetBuilderc                 6   t         j                  | |d|||       | j                  j                  dd       g | _        | j                  j                  ddd       | j                  j                  ddd	       | j                  j                  d
ddd
g       y )Nr$   sorted-compositergbaorderr   z/order.uint8r   alphaz/alpha.uint8r  z/intensity.uint8r   )r|   r   r9   r   layerScalarsrq   )r   r?   rs   rA   rB   s        r   r   z&SortedCompositeDataSetBuilder.__init__  s    %..(KXx	
 	!!"4f= %%w 	& 	
 	%%w 	& 	
 	%%'#}	 	& 	
r   c                     t         j                  | ||       | j                  j                         }t	        |d   |d         | _        y )Nr   r1   )r|   rc   r!   r   r   dataConverter)r   r!   rK   r  s       r   rc   z#SortedCompositeDataSetBuilder.start  s@    %++D,I%%--/	<Yq\9UV<Xr   c                 p    t         j                  | dd|z  |       | j                  j                  |       y )Nr   z%s)r|   r   r+  r   )r   r   scalars      r   r   z+SortedCompositeDataSetBuilder.activateLayer  s3    %33&$-	
 	  (r   c                     t         j                  | |       | j                  j                  d       | j                  j                  d       | j                  j                  d       y )Nr)  r*  r  )r|   r   r9   rw   )r   r   s     r   r   z'SortedCompositeDataSetBuilder.writeData%  sP    %//f= 	00900900=r   c           
         t         j                  | d       t        j                  | j                  j                               D ]p  \  }}}|D ]e  }t        dt        j                  j                  ||             | j                  j                  t        j                  j                  ||             g r t        j                  t        j                  j                  | j                  j                         d      t        j                  j                  | j                  j                         d             t        t        j                  j                  | j                  j                         d      d      5 }t        j                  |      }|d   d   | j                  j                  | j                   d	| j                  j                   d
|d<   g }	|d= |d   D ]  }
|
d   dv s|	j#                  |
        |	|d<   g d|d<   t        t        j                  j                  | j                  j                         d      d      5 }|j%                  t        j&                  |             d d d        d d d        |rt        j                  | j                  j                               D ]Z  \  }}}t        d|       |D ]C  }d|v s
d|v s|dk(  st        j(                  t        j                  j                  ||             E \ |rt        j                  | j                  j                               D ]  \  }}}t        d|       |D ]  }d|v sd|vst        t        j                  j                  ||      d      5 }t+        j                  t        j                  j                  ||dz         d      5 }t-        j.                  ||       d d d        d d d        t        j(                  t        j                  j                  ||               y y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   dxY w# 1 sw Y   hxY w)NF)r   Processz
index.jsonzindex_origin.jsonrr   r   r   )r   r~   scalarsSortedCompositedatarn   )r)  r*  r  )ztonic-query-data-modelr'  r*  rO   wCleanz_rgb.pngz_depth.uint8r   r   r   r   r   )r|   rf   r   r   r9   r   r   r/   r   r-  r#  renamer   jsonloadr~   r+  r   r   dumpsr   r   r   r   )r   cleanr   r   r   r   rn   infoFilerA   
dataToKeepitemnewMetaFiler   r   s                 r   rf   z"SortedCompositeDataSetBuilder.stop-  sr   %**4%*@ "$)9)9)E)E)G!HD$idD!9:""**277<<d+CD  "I 			GGLL))557FGGLL))5579LM	
 GGLL))5579LMs
yy*H&':;LI,,33,,Q1C1C1J1JK+H&' J,- (<#BB%%d+ )  *HVVHV T--99;\JC!!$**X"67)
4 %'WWT-=-=-I-I-K%L!dEgt$!D"d*)T1#66		"'',,tT":; " &M %'WWT-=-=-I-I-K%L!dEj$'!D4'E,=!"'',,tT":DAT!% "T4%< @$"!& & 2 24 ?" B
 		"'',,tT":; " &M # )
 
V" " BAsP   <A.P.+A!P.%P!1P.	8QP;	Q!P+	&P..P8;Q QQN)TT)r2   r3   r4   r   rc   r   r   rf   r5   r   r   r%  r%    s!    682 
*Y
)>?<r   r%  )"r:  r   r   r   vtkmodules.vtkRenderingCorer   vtkmodules.vtkIOImager   r   r   vtkmodules.vtkCommonDataModelr   vtkmodules.vtkCommonCorer   vtkmodules.vtkFiltersParallelr	   vtkmodules.webr
   r   vtkmodules.web.camerar   r   r   vtkmodules.web.query_data_modelr   r   objectr   r7   rh   r|   r   r   r%  r5   r   r   <module>rK     s      > K K 6 9 < 4 
 8 , &  @</V </H. 0l<N l<dQ<~ Q<nc+f c+Lh<$A h<r   