
    pj                     R    d dl mZ ddlmZmZmZmZmZm	Z	 ddl
mZ  G d de      Zy)	    )register   )reference_idinitialize_serializers	serializeserialize_widgetextract_array_hashSynchronizationContext   )vtkWebProtocolc                        e Zd ZdZ fdZ ed      dd       Z ed      d        Z ed      d        Z ed	      	 	 	 dd
       Z	 ed      dd       Z
 xZS )vtkWebLocalRenderingzImproved geometry delivery for client-side rendering

    Provide an updated geometry delivery mechanism which better matches the
    client-side rendering capability we have in vtk.js
    c                 p    t         |           t                t               | _        i | _        d| _        y Nr   )super__init__r   r
   contexttracking_viewsmtime)selfkwargs	__class__s     \/DATA/.local/lib/python3.12/site-packages/trame_vtk/modules/vtk/protocols/local_rendering.pyr   zvtkWebLocalRendering.__init__   s-     -/ 
    zviewport.geometry.array.getc                     |r+| j                  | j                  j                  ||            S | j                  j                  ||      S )N)addAttachmentr   get_cached_data_array)r   	data_hashbinarys      r   	get_arrayzvtkWebLocalRendering.get_array   sE    %%229fE  ||11)VDDr   z#viewport.geometry.view.observer.addc                      j                  |      }|sdd|z  iS  j                  j                         j                  |      d fd	 j                  vr6 fd} j                  j                  d|      }|gdd j                  <   n j                     dxx   dz  cc<    j                  d	 d
             d
dS )NerrorUnable to get view with id %sc                 |    j                  |       }| rdnj                  |d<   xj                  dz  c_        |S )Nr   r   r   )get_view_stater   )new_subscriptionstate_to_returnreal_view_idr   s     r   push_geometryz=vtkWebLocalRendering.add_view_observer.<locals>.push_geometry.   s;    "11,@PQO,<q$**OG$JJ!OJ""r   c                  2    j                  d              S )N#viewport.geometry.view.subscription)publish)___r)   r   s     r   observer_callbackzAvtkWebLocalRendering.add_view_observer.<locals>.observer_callback6   s    ||9!O r   UpdateEventr   )tagsobserverCountr2   r+   T)successviewIdF)get_viewappGetObjectIdMapGetGlobalIdr   AddObserverr,   )r   view_ids_viewr/   tagr)   r(   s   `    @@r   add_view_observerz&vtkWebLocalRendering.add_view_observer&   s    w'<wFGGxx..0<<VD	# t222 ((&&}6GHC:=QR0SD- -o>!C>:M$<OP<88r   z&viewport.geometry.view.observer.removec                 n   | j                  |      }|sdd|z  iS | j                  j                         j                  |      }d }|| j                  v r| j                  |   }|sdd|z  iS |dxx   dz  cc<   |d   dk  r2|d   D ]  }| j                  j                  |        | j                  |= dd	iS )
Nr"   r#   z'Unable to find subscription for view %sr2   r   r   r1   resultr3   )r6   r7   r8   r9   r   RemoveObserver)r   r;   r<   r(   observer_infor=   s         r   remove_view_observerz)vtkWebLocalRendering.remove_view_observerF   s    w'<wFGGxx..0<<VD4... //=MFUVVo&!+&)Q.$V,'', -##L1)$$r   z viewport.geometry.view.get.statec                 b   | j                  |      }|sdd|z  iS | j                  j                  |       |}|j                         j	                         }|j                         }	| j                  j                         j                  |      }
t        d ||
| j                  d      }t        |      |	j                         t        |	      d|d<   |ri }||d<   |D ]  }t        ||        n	|rddi|d<   | j                  j                  d       | j                  j                          |r|S y )	Nr"   r#   r   )vtkRefIdcenterOfRotationcameraextra	behaviorsautoOrientationF)r6   r   set_ignore_last_dependenciesGetRenderersGetFirstRendererGetActiveCamerar7   r8   r9   r   r   GetFocalPointr   check_for_arrays_to_release)r   r;   r&   widgetsorientation_axisr   r<   render_windowrendererrG   render_window_idview_instancerI   widgets                 r   r%   z#vtkWebLocalRendering.get_view_state_   s3    w'<wFGG112BC  --/@@B))+88224@@H!-!14<<
 %]3 & 4 4 6"6*"
g I)2M+&! F3 "!1*M+& 	11%8002  r   z!viewport.geometry.view.get.exportc           
           | j                   |fd||d|}i }t        |      D ]?  }|j                  d      }t        di |d| j                  j                  |d      i||<   A t        ||      S )NT)r&   rQ   rR   hashcontentF)hashesscene )r%   r	   getdictr   r   )	r   r;   rQ   rR   r   scene_descriptionr[   entryr   s	            r   get_standalone_statez)vtkWebLocalRendering.get_standalone_state   s    /D//
!-	

 
 '(9:E		&)I $ !!!%!C!CIu!U!F9 ; 6):;;r   r5   )FNr   r   )__name__
__module____qualname____doc__r   
export_rpcr    r>   rC   r%   rb   __classcell__)r   s   @r   r   r      s     -.E /E 569 79> 89% :%0 23 - 4-^ 34< 5<r   r   N)wslinkr   rg   serializersr   r   r   r   r	   r
   web_protocolr   r   r]   r   r   <module>rl      s%    )  )Q<> Q<r   