
    +jœ                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 	 d dlZej        Zn# e$ r
 ej        ZY nw xY w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 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 G d# d$e          Z G d% d&e          Z  G d' d(e          Z! G d) d*e          Z"dS )+    N)IntEnum)AbstractElement)commonreference_idc                     | | S |                     d          r0ddlm} |                    |           |                    |          S ddlm} |                    |           |                    |          S )NvtkSMRemoteObjectr   )paraview)vtk)IsAtrame_vtk.modulesr
   enable_module
get_helperr   )helperservervtk_or_paraview_objr
   r   s        V/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trame_vtk/widgets/vtk/common.pyactivate_module_forr      s    233 	&......X&&&""6***))))))S!!!~~f%%%    c                   6     e Zd Zd fd	Zed             Z xZS )HtmlElementNc                      t                      j        ||fi | d | _        | j        r!| j                            t
                     d S d S N)super__init___helperr   r   r   )self
_elem_namechildrenkwargs	__class__s       r   r   zHtmlElement.__init__$   s[    X88888; 	.K%%f-----	. 	.r   c                     | j         S r   )r   r   s    r   modulezHtmlElement.module*   s
    |r   r   )__name__
__module____qualname__r   propertyr$   __classcell__r!   s   @r   r   r   #   sX        . . . . . .   X    r   r   c                         e Zd Zd fd	Z xZS )VtkPiecewiseEditorNc                      t                      j        d|fi | | xj        g dz  c_        | xj        ddgz  c_        dS )zW
        VtkPiecewiseEditor will create a UI to view and edit opacity function
        zvtk-piecewise-editor)value)max_zoommaxZoompadding)content_rectangle_stylecontentRectangleStyle)result_opacity_line_styleresultOpacityLineStyle)inside_zoom_styleinsideZoomStyle)gaussian_opacity_stylegaussianOpacityStyle)active_gaussian_opacity_styleactiveGaussianOpacityStyle)active_linear_opacity_styleactiveLinearOpacityStyle)linear_opacity_stylelinearOpacityStyle)linear_opacity_control_stylelinearOpacityControlStyle)#active_linear_opacity_control_styleactiveLinearOpacityControlStyle)zoom_control_stylezoomControlStyle	opacitiesinputN)r   r   _attr_names_event_namesr   r   r    r!   s      r   r   zVtkPiecewiseEditor.__init__0   sq     	/DDVDDD 
 
 
 	
 	
 	
r   r   r%   r&   r'   r   r)   r*   s   @r   r,   r,   /   s=        
 
 
 
 
 
 
 
 
 
r   r,   c                         e Zd Zd fd	Z xZS )VtkAlgorithmNc                 b     t                      j        d|fi | | xj        g dz  c_        dS )a  
        VtkAlgorithm will create a vtk.js object from its vtkClass and state


        :param vtk_class: Name of vtk.js class to instantiate from `here <https://github.com/Kitware/vue-vtk-js/blob/master/src/AvailableClasses.js>`_
        :type vtk_class: str

        :param state: JS object listing all the value to override
        :type state: str/obj

        :param port: Port to bind into parent VtkAlgorithm or VtkRepresentation
        :type port: int
        zvtk-algorithm)	vtk_classvtkClassstateportNr   r   rH   rJ   s      r   r   zVtkAlgorithm.__init__K   sO     	(==f=== 
 
 
 	
r   r   rK   r*   s   @r   rM   rM   J   s=        
 
 
 
 
 
 
 
 
 
r   rM   c                         e Zd Zd fd	Z xZS )VtkCellDataNc                 >     t                      j        d|fi | d S )Nzvtk-cell-datar   r   rJ   s      r   r   zVtkCellData.__init__b   s*    (==f=====r   r   rK   r*   s   @r   rV   rV   a   s=        > > > > > > > > > >r   rV   c                        e Zd Z fdZ xZS )VtkDataArrayc                 ^     t                      j        di | | xj        g dz  c_        dS )aE  
        VtkDataArray

        :param name:
        :type name: str

        :param registration:
        :type registration: str

        :param type:
        :type type: str

        :param values:
        :type values: Array/TypedArray

        :param number_of_components:
        :type number_of_components: int
        vtk-data-array)nameregistrationtypevaluesnumber_of_componentsN)r\   rT   r   r    r!   s     r   r   zVtkDataArray.__init__g   sK    & 	44V444 
 
 
 	
r   rK   r*   s   @r   rZ   rZ   f   s8        
 
 
 
 
 
 
 
 
r   rZ   c                         e Zd Zd fd	Z xZS )VtkFieldDataNc                 >     t                      j        d|fi | d S )Nzvtk-field-datarX   rJ   s      r   r   zVtkFieldData.__init__   +    )8>>v>>>>>r   r   rK   r*   s   @r   rd   rd      =        ? ? ? ? ? ? ? ? ? ?r   rd   c                         e Zd Zd fd	Z xZS )VtkGeometryRepresentationNc                 b     t                      j        d|fi | | xj        g dz  c_        dS )a  
        VtkGeometryRepresentation

        :param id: Identifier used in picking
        :type id: str

        :param color_map_preset: Name of a vtk.js color preset
        :type color_map_preset: str

        :param color_data_range:
        :type color_data_range: [min, max]

        :param actor: Properties to edit on actor
        :type values: {}

        :param mapper: Properties to edit on mapper
        :type mapper: {}

        :param property: Properties to edit on property
        :type property: {}
        zvtk-geometry-representation)idcolor_map_presetcolor_data_rangeactormapperr(   NrT   rJ   s      r   r   z"VtkGeometryRepresentation.__init__   sP    , 	6KKFKKK 
 
 
 	
r   r   rK   r*   s   @r   ri   ri      s=        
 
 
 
 
 
 
 
 
 
r   ri   c                         e Zd Zd fd	Z xZS )VtkGlyphRepresentationNc                 b     t                      j        d|fi | | xj        g dz  c_        dS )a  
        VtkGlyphRepresentation

        :param color_map_preset: Name of a vtk.js color preset
        :type color_map_preset: str

        :param color_data_range:
        :type color_data_range: [min, max]

        :param actor: Properties to edit on actor
        :type values: {}

        :param mapper: Properties to edit on mapper
        :type mapper: {}

        :param property: Properties to edit on property
        :type property: {}
        zvtk-glyph-representation)rl   rm   rn   ro   r(   NrT   rJ   s      r   r   zVtkGlyphRepresentation.__init__   sP    & 	3XHHHHH 
 
 
 	
r   r   rK   r*   s   @r   rq   rq      s=        
 
 
 
 
 
 
 
 
 
r   rq   c                   4     e Zd Z	 	 	 	 d fd	Zd Zd Z xZS )VtkMeshNc                 >    t                      j        di | || _        || _        || _        || _        || _        | xj        ddgz  c_        d | _        |rDt          | j        | j
        |          | _        d| d| j        d<   |                                  d S d S )Nvtk-meshrS   rR   z:state="")rv   )r   r   _VtkMesh__name_VtkMesh__dataset_VtkMesh__field_to_keep_VtkMesh__point_arrays_VtkMesh__cell_arraysrH   r   r   r   _attributesupdate)r   r]   datasetfield_to_keeppoint_arrayscell_arraysr    r!   s          r   r   zVtkMesh.__init__   s     	..v... ,*(VW-- 	.t|T['RRDL(:4(:(:(:DW%KKMMMMM	 	r   c                 |    || _         t          | j        | j        |          | _        |                                  dS )zD
        Change this mesh's internal dataset and update shared stateN)ry   r   r   r   r~   r   r   s     r   set_datasetzVtkMesh.set_dataset   s3     !*4<gNNr   c           	         | j         r| j                            | j         |                    d| j                  |                    d| j                  |                    d| j                            | j        j        | j	        <   dS dS )D
        Propagate changes in internal data to shared state
        r   r   r   )r   r   r   N)
ry   r   meshgetrz   r{   r|   r   rR   rx   r   r    s     r   r~   zVtkMesh.update   s     > 	-1\->->$jj$:NOO#ZZ8KLL"JJ}d6HII	 .? . .DKdk***	 	r   )NNNNr%   r&   r'   r   r   r~   r)   r*   s   @r   rt   rt      si              ,  
 
 
 
 
 
 
r   rt   c                         e Zd Zd fd	Z xZS )VtkPointDataNc                 >     t                      j        d|fi | d S )Nzvtk-point-datarX   rJ   s      r   r   zVtkPointData.__init__   rf   r   r   rK   r*   s   @r   r   r      rg   r   r   c                   ,     e Zd Zd fd	Zd Zd Z xZS )VtkPolyDataNc                     t                      j        d|fi | || _        || _        | xj        g dz  c_        d| _        |rDt          | j        | j        |          | _        d| d| j        d<   | 	                                 dS dS )a  
        VtkPolyData

        :param port: Port to bind into parent VtkAlgorithm or VtkRepresentation
        :type port: int

        :param points: Points (xyz array)
        :type points: Array

        :param verts: CellArray to use for verts
        :type verts: Array

        :param lines: CellArray to use for lines
        :type lines: Array

        :param polys: CellArray to use for polys
        :type polys: Array

        :param strips: CellArray to use for strips
        :type strips: Array

        :param connectivity: One of 'manual', 'points', 'triangles', 'strips'.
            When 'manual' is used we expect the user to provide cells.
            For the other options, the JS code will generate the cells automatically.
        :type connectivity: str
        zvtk-polydata)rS   pointsvertslinespolysstripsconnectivityNzv-bind="z.mesh"bind)
r   r   _VtkPolyData__name_VtkPolyData__datasetrH   r   r   r   r}   r~   )r   r]   r   r   r    r!   s        r   r   zVtkPolyData.__init__   s    6 	<<V<<<  
 
 
 	
  	.t|T['RRDL'>$'>'>'>DV$KKMMMMM	 	r   c                 |    || _         t          | j        | j        |          | _        |                                  dS )zQ
        Change this polydata's internal dataset and update shared state
        N)r   r   r   r   r~   r   s     r   r   zVtkPolyData.set_dataset'  s3     !*4<gNNr   c                 z    | j         r3| j                            | j                   | j        j        | j        <   dS dS )r   N)r   r   r   r   rR   r   r#   s    r   r~   zVtkPolyData.update/  sD     > 	O-1\->->t~-N-NDKdk***	O 	Or   NNr   r*   s   @r   r   r      sc        + + + + + +Z  O O O O O O Or   r   c                        e Zd Z fdZ xZS )	VtkReaderc                 ^     t                      j        di | | xj        g dz  c_        dS )a  
        VtkReader

        :param port: Port to bind into parent VtkAlgorithm or VtkRepresentation
        :type port: int

        :param parse_as_array_buffer: base64 strings
        :type parse_as_array_buffer: str

        :param parse_as_text: text content to parse
        :type parse_as_text: str

        :param render_on_update: Once ready trigger a render
        :type render_on_update: bool

        :param reset_camera_on_update: Once ready trigger a resetCamera
        :type reset_camera_on_update: bool

        :param url: url to download data from
        :type url: str

        :param vtk_class: Class name to use as reader
        :type vtk_class: str
        
vtk-reader))parse_as_array_bufferparseAsArrayBuffer)parse_as_textparseAsTextrS   )render_on_updaterenderOnUpdate)reset_camera_on_updateresetCameraOnUpdateurlrO   N)r   rT   rb   s     r   r   zVtkReader.__init__8  sK    2 	00000 
 
 
 	
r   rK   r*   s   @r   r   r   7  s8        "
 "
 "
 "
 "
 "
 "
 "
 "
r   r   c                        e Zd ZdZdZdg f fd	Zd Z	 ddZdd
ZddZ	ddZ
ddZddZd ZddZd Zd Zd Zed             Zdi fdZd Zd Zd Zd Z xZS ) VtkRemoteLocalViewa  
    The VtkRemoteLocalView component is a blend of VtkLocalView and VtkRemoteView
    where the user can choose dynamically which mode they want to be in.
    When instantiating a VtkRemoteLocalView several variables and triggers will
    be created for you to more easily control your view.

    >>> rl_view = vtk.VtkRemoteLocalView(
    ...     # Instance of the view (required) [VTK: vtkRenderWindow | Paraview: viewProxy]
    ...     view=...,
    ...     # Just VtkRemoteLocalView params
    ...     namespace=...,  # Prefix for variables and triggers. See below. (required)
    ...     mode="local",  # Decide between local or remote. See below.
    ...     disable_auto_switch=True  # Skip automatic remote rendering switch while local rendering is pending
    ...     # VtkRemoteView params
    ...     ** remote_view_params,
    ...     # VtkLocalView params
    ...     **local_view_params,
    ... )
    r   Tc                     t                      j        di | d | _        t          | j        | j        |          | _        | j                            dd           |                    dd          }|dk    r4t          xj        dz  c_        t          j        dk    rdt          j         }| d| _	        | d| _
        | d	| _        |                    d
|          | _        || _        || _        || _        |                    d| j	                  }d}t!          |t"          t$          f          r"t'          |          dk    r|\  }}n|d         }n|dv r	|}| j	        }d| d| j        d<   | j                            |          | j        j        | j        <   || _        | j                            |||          | _        d| j         d| j        d
<   d| j         d| j        d<   d| d| j        d<   d| j         d| j        d<   d| j
         d| j        d<   | xj        g dz  c_        | xj        g dz  c_        | j        j        j                            | j                    d S )Nvtk-remote-local-viewweb	rendering	namespaceview   ModeSceneIdrefmoderemote   r   )localr   z:mode="rw   )r]   r   ref="zrefPrefix="	refprefixznamespace="	:viewId="view_id:viewState="
view_state)context_nameenable_pickingenablePickinginteractive_qualityinteractiveQualityinteractive_ratiointeractiveRatiostill_ratio
stillRatiostill_qualitystillQualityinteractor_eventsinteractorEventsinteractor_settingsbox_selectionboxSelection)disable_auto_switchdisableAutoSwitchpicking_modespickingModes)0clickhoverselect)on_local_image_captureonLocalImageCapture)on_remote_image_captureonRemoteImageCaptureresizereset_cameraresetCameraview_state_changeviewStateChangebefore_scene_loadedbeforeSceneLoadedafter_scene_loadedafterSceneLoadedon_readyonReadybox_selection_changeBoxSelectionStartAnimation	AnimationEndAnimation
MouseEnter
MouseLeaveStartMouseMove	MouseMoveEndMouseMoveLeftButtonPressLeftButtonReleaseMiddleButtonPressMiddleButtonReleaseRightButtonPressRightButtonReleaseKeyPressKeyDownKeyUpStartMouseWheel
MouseWheelEndMouseWheel
StartPinchPinchEndPinchStartPanPanEndPanStartRotateRotate	EndRotateButton3DMove3DStartPointerLockEndPointerLockStartInteractionInteractionEndInteraction)r   )!r   r   r   r   r   has_capabilitiesr   r   _next_id_VtkRemoteLocalView__mode_key_VtkRemoteLocalView__scene_id _VtkRemoteLocalView__view_key_id_VtkRemoteLocalView__ref_VtkRemoteLocalView__rendering_VtkRemoteLocalView__namespace_widgets
isinstancetuplelistlenr}   rk   rR   _VtkRemoteLocalView__viewr   !_VtkRemoteLocalView__wrapped_viewrH   rI   _server
controlleron_server_readyaddupdate_geometry)	r   r   enable_renderingwidgetsr    _VtkRemoteLocalView__ns$_VtkRemoteLocalView__mode_expression_VtkRemoteLocalView__mode_startr!   s	           r   r   zVtkRemoteLocalView.__init__t  s   ;;F;;;*4<dKK%%e[999zz+v..6>>''1,''!*Q..;09;;!---!... $[[[ZZt,,
+ #JJvt??'%77 	0$%%**2C/!<<$5a$8!!"555,L $#A->#A#A#A  150E0E$,-"l//4l/SS #8$*"7"7"7(Cdj(C(C(C%(=d(=(=(=% 'H$2D&G&G&G#)J)J)J)J& 
 
 
 	
 	 1
 1
 1
 1	
d 	/33D4HIIIIIr   c                 j    | j                                                             d| j                   d S )N-   )r)  GetInteractorAddObserver_push_camerar#   s    r   %push_remote_camera_on_end_interactionz8VtkRemoteLocalView.push_remote_camera_on_end_interaction  s1     	!!##//D4EFFFFFr   FNc                 (   || j         }| j        j        sdS | j                            | j        d||          }| j        j                            d|           | j                            | j        d||          }|| j        j        | j        <   dS )z*
        Force update to geometry
        NF	new_stater1  orientation_axistrame.vtk.deltaT)	r$  r   protocolr   scener)  publishrR   r  )r   r   r1  r>  r    delta_state
full_states          r   r/  z"VtkRemoteLocalView.update_geometry  s     ?mG{# 	Fl((K-	 ) 
 
 	$$%6DDD\''K-	 ( 
 

 .8$/***r   zipc                    d}|| j         }| j        j        sdS | j                            | j        ||          }|rt          j        |          }|dk    r|                    dd          S t          j
                    }t          j        |d          5 }|                    d|t          	           ddd           n# 1 swxY w Y   |                                S dS 
zlExport standalone scene for OfflineViewer

        :param format: Can be either be "zip" or "json".
        N)r1  r>  jsonzUTF-8strict)encodingerrorsaz
index.json)compress_type)r$  r   r@  r   exportr)  rH  dumpsencodeioBytesIOzipfileZipFilewritestrZIP_COMPRESSIONgetvalue	r   r1  r>  formatr    encoded_datajson_out
zip_bufferzfiles	            r   export_geometryz"VtkRemoteLocalView.export_geometry  =   
 ?mG{# 	F|**K- + 
 
  		)z,//HIIIJS11 VU|X_UUUV V V V V V V V V V V V V V V &&(((		) 		)   CCCc                 b    | j         j        r"| j                            | j        |           dS dS )z'
        Force update to image
        N)r   r@  r   
push_imager)  )r   r   s     r   update_imagezVtkRemoteLocalView.update_image)  s;     ; 	?L##DK>>>>>	? 	?r   c                 6    |rdnd| j         j        | j        <   d S )Nr   r   r   rR   r  )r   r   r    s      r   set_local_renderingz&VtkRemoteLocalView.set_local_rendering0  s"    8=-KWW8$/***r   c                 6    |rdnd| j         j        | j        <   d S )Nr   r   re  )r   r   r    s      r   set_remote_renderingz'VtkRemoteLocalView.set_remote_rendering3  s"    9?-LXXW$/***r   c                     | j         r|                     |           |                     |||           |r@| j                            | j        d| j                            | j                             d S d S )N)r   r1  r>  	setCamera)	r"  rc  r/  r   js_callr!  r   camerar)  )r   r   r1  r>  r    s        r   r~   zVtkRemoteLocalView.update6  s     	,l+++%- 	 	
 	
 	
  	K
##DK00    	 	r   c                 .    |                                   d S r   )push_camera)r   argsr    s      r   r9  zVtkRemoteLocalView._push_cameraG  s    r   c           	      f   |t          | j        d          r>| j                                                                                                        }n.t          | j        d          r| j                                        }|d S t          |                                |                                |                                |	                                |
                                |                                          }|||d<   | j                            | j        d|           d S NGetRenderersGetActiveCamera)position
focalPointviewUpparallelProjectionparallelScale	viewAnglecenterOfRotationrj  )hasattrr)  rr  GetFirstRendererrs  dictGetPositionGetFocalPoint	GetViewUpGetParallelProjectionGetParallelScaleGetViewAngler   rk  r!  r   rl  center_of_rotationr    camera_paramss        r   rn  zVtkRemoteLocalView.push_cameraJ  *   >t{N33 71133DDFFVVXX&788 74466>F''))++--##%%%;;== 1133))++
 
 
 )0BM,-J	
 	
 	
 	
 	
r   c                 :   | j                             |          | j        j        | j        <   | j        j        | j                 }|| _        | j                             || j        |d          | _	        | 
                                 |                                  d S )NT)r]   r   force_replace)r   rk   r   rR   r   r  r)  r   r#  r*  r~   r   )r   new_viewr    _modes       r   replace_viewzVtkRemoteLocalView.replace_viewf  s    040I0I$,-!$/2"l//4+%t 0 
 
 	r   c                 H    | j                             | j        d           d S Nr   r   methodr   rk  r!  r   s     r   r   zVtkRemoteLocalView.reset_camerap  %    
=AAAAAr   c                 H    | j                             | j        d           d S Nr   r  r  r   s     r   r   zVtkRemoteLocalView.resizes  %    
8<<<<<r   c                     | j         S )z5
        Get linked vtkRenderWindow instance
        )r*  r#   s    r   r   zVtkRemoteLocalView.viewv  s    
 ""r   	image/pngc                 J    | j                             | j        d||           d S NcaptureImager  r   rY  optss      r   capture_imagez VtkRemoteLocalView.capture_image}  4    J		
 	
 	
 	
 	
r   c                     | j         S r   r$  r#   s    r   get_widgetszVtkRemoteLocalView.get_widgets  
    }r   c                 <    || _         |                                  d S r   )r$  r/  r   r.   s     r   set_widgetszVtkRemoteLocalView.set_widgets  s!    r   c                 F    | j                                          d | _        d S r   )r*  release_resourcesr)  r#   s    r   r  z$VtkRemoteLocalView.release_resources  s"    --///r   c                      t          |          S r   r   )r   vtk_objs     r   get_scene_object_idz&VtkRemoteLocalView.get_scene_object_id  s    G$$$r   )FNr   Nr   rE  )F)Tr   )r%   r&   r'   __doc__r  r   r:  r/  r^  rc  rf  rh  r~   r9  rn  r  r   r   r(   r   r  r  r  r  r  r)   r*   s   @r   r   r   ]  s        ( H.2B sJ sJ sJ sJ sJ sJjG G G BC8 8 8 88) ) ) )<? ? ? ?L L L LM M M M   "  
 
 
 
8  B B B= = = # # X# $/R 
 
 
 
      % % % % % % %r   r   c                   v     e Zd ZdZdZd fd	Zd Zdd	Zd
 Zd Z	d Z
d Zdi fdZd Zed             Z xZS )VtkRemoteViewa  
    The VtkRemoteView component relies on the server for rendering by sending
    images to the client by binding your vtkRenderWindow to it.
    This component gives you control over the image size and quality to reduce
    latency while interacting.

    >>> remote_view = vtk.vtkRemoteView(
    ...     # Instance of the view (required) [VTK: vtkRenderWindow | Paraview: viewProxy]
    ...     view=...,
    ...     ref=...,  # Identifier for this component
    ...     interactive_quality=60,  # [0, 100] 0 for fastest render, 100 for best quality
    ...     interactive_ratio=...,  # [0.1, 1] Image size scale factor while interacting
    ...     interactor_events=(  # Enable vtk.js interactor events for method binding
    ...         "events",
    ...         ["EndAnimation"],
    ...     ),
    ...     EndAnimation=end,  # Bind method to the enabled event
    ...     box_selection=True,  # toggle selection box rendering
    ...     box_selection_change=fn,  # Bind method to get rect selection
    ... )
    r   Nc                      t                      j        di | d| _        d | _        t	          d | j        |          | _        | j                            dd           |$t          xj	        dz  c_	        dt          j	         }|| _
        || _        | d| _        | j                            |          | j        j        | j        <   d| d	| j        d
<   d| j         d	| j        d<   | xj        g dz  c_        | xj        g dz  c_        d S )Nvtk-remote-viewFr   r   r   trame__remote_view_r   r   rw   r   r   r   )	r   r   r   r   r   r   r   visibler   ))on_image_captureonImageCapturer   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  )r   r   _is_animating_img_qualityr   r   r   r  r  r  _VtkRemoteView__view_VtkRemoteView__ref_VtkRemoteView__view_key_idrk   rR   r}   rH   rI   )r   r   r   r    r!   s       r   r   zVtkRemoteView.__init__  s@   55f555" *4dCC%%e[999;""a'""@(>@@C
 #ZZZ040E0E$,-"0#...&G$2D&G&G&G# 

 

 

 
	
 	 *
 *
 *
 *	
r   c                 `    | j         j        r!| j                            | j                   dS dS )z4
        Force image to be pushed to client
        N)r   r@  r   rb  r  r   s     r   r~   zVtkRemoteView.update  s9     ; 	1L##DK00000	1 	1r      d   r   c                     | j         j        sd S | j        rd S d| _        | j                            | j                  | _        | j                            | j        |||           d S )NT)r   r@  r  r   get_current_image_qualityr  r  start_animation)r   fpsqualityratios       r   r  zVtkRemoteView.start_animation  sj    {# 	F 	F! LBB4;OO$$T[#wFFFFFr   c                     | j         j        sd S | j        sd S d| _         | j        j        | j        fi | j         | j                            | j                   |                                  d S )NF)	r   r@  r  r   set_image_qualityr  r  stop_animationr~   r#   s    r   r  zVtkRemoteView.stop_animation  sw    {# 	F! 	F"&&t{HHd6GHHH##DK000r   c                 H    | j                             | j        d           d S r  r   rk  r  r   s     r   r   zVtkRemoteView.reset_camera  r  r   c                     || _         | j                            |          | j        j        | j        <   |                                  |                                  d S r   )r  r   rk   r   rR   r  r~   r   r   r  r    s      r   r  zVtkRemoteView.replace_view  sG    040I0I$,-r   c                 H    | j                             | j        d           d S r  r  r   s     r   r   zVtkRemoteView.resize  r  r   r  c                 J    | j                             | j        d||           d S r  r  r  s      r   r  zVtkRemoteView.capture_image   r  r   c                     d | _         d S r   )r  r#   s    r   r  zVtkRemoteView.release_resources(  s    r   c                     | j         S r   )r  r#   s    r   ref_namezVtkRemoteView.ref_name+  
    zr   r   )r  r  r   )r%   r&   r'   r  r  r   r~   r  r  r   r  r   r  r  r(   r  r)   r*   s   @r   r  r    s         , HG
 G
 G
 G
 G
 G
R1 1 1	G 	G 	G 	G
 
 
B B B  = = = $/R 
 
 
 
     X    r   r  c                         e Zd Zd fd	Z xZS )VtkShareDatasetNc                 b     t                      j        d|fi | | xj        ddgz  c_        d S )Nzvtk-share-datasetrS   r]   rT   rJ   s      r   r   zVtkShareDataset.__init__1  sD    ,hAA&AAAVV,,r   r   rK   r*   s   @r   r  r  0  s=        - - - - - - - - - -r   r  c                        e Zd ZdZdZdg f fd	Zd Zd ZddZdd	Z	d
 Z
d Zd ZddZdi fdZd Zed             Zd Z xZS )VtkLocalViewa  
        The VtkLocalView component relies on the server for defining
        the vtkRenderWindow but then only the geometry is exchanged with the client.
        The server does not need a GPU as no rendering is happening on the server.
        The vtkRenderWindow is only used to retrieve the scene data and parameters
        (coloring by, representations, ...).

        By relying on the same vtkRenderWindow, you can easily switch from a
        ``VtkRemoteView`` to a ``VtkLocalView`` or vice-versa.
        This component gives you controls on how you want to map mouse interaction
        with the camera.
        The default setting mimic default VTK interactor style so you will rarely
        have to override to the ``interactor_settings``.
        The widgets argument allow to properly capture behavior for those assuming
        they can be handled by the client side.

    >>> local_view = vtk.VtkLocalView(
    ...     view=...,  # Instance of the view (required)
    ...     widgets=[],  # List of vtkWidgets in view
    ...     # - VTK: vtkRenderWindow
    ...     # - Paraview: viewProxy
    ...     ref=...,  # Identifier for this component
    ...     context_name=...,  # Namespace for geometry cache
    ...     interactor_settings=...,  # Options for camera controls. See below.
    ...     interactor_events=(  # Enable vtk.js interactor events for method binding
    ...         "events",
    ...         ["EndAnimation"],
    ...     ),
    ...     EndAnimation=end,  # Bind method to the enabled event
    ...     box_selection=True,  # toggle selection box rendering
    ...     box_selection_change=fn,  # Bind method to get rect selection
    ... )
    r   Nc                 2    t                      j        di | t          d | j        |          | _        | j                            d           |$t          xj        dz  c_        dt          j         }d| | _        || _	        || _
        d| d| j        d<   d	| j         d| j        d
<   || _        | xj        g dz  c_        | xj        g dz  c_        |                                  | j        j        j                            | j                   d S )Nvtk-local-viewr   r   trame__local_view_scene_r   rw   r   r   r   )r   r   )r   contextNamer   r   )/r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  )r   r   r   r   r   r  r  r  _VtkLocalView__scene_id_VtkLocalView__view_VtkLocalView__refr}   r$  rH   rI   r~   r+  r,  r-  r.  )r   r   r   r1  r    r!   s        r   r   zVtkLocalView.__init__[  sA   44V444*4dCC%%e,,,;!!Q&!!>|'<>>C(3..
"0#...)J)J)J)J& 
 
 
 	
 	 0
 0
 0
 0	
b 	/33DK@@@@@r   c                     | j         S r   r  r#   s    r   r  zVtkLocalView.get_widgets  r  r   c                 <    || _         |                                  d S r   )r$  r~   r  s     r   r  zVtkLocalView.set_widgets  s    r   c                 (   || j         }| j        j        sdS | j                            | j        d||          }| j        j                            d|           | j                            | j        d||          }|| j        j        | j        <   dS )z-
        Force geometry to be pushed
        NFr<  r?  T)	r$  r   r@  r   rA  r  rB  rR   r  )r   r1  r>  r    rC  rD  s         r   r~   zVtkLocalView.update  s     ?mG{# 	Fl((K-	 ) 
 
 	$$%6DDD\''K-	 ( 
 

 .8$/***r   rE  c                    d}|| j         }| j        j        sdS | j                            | j        ||          }|rt          j        |          }|dk    r|                    dd          S t          j
                    }t          j        |d          5 }|                    d|t          	           ddd           n# 1 swxY w Y   |                                S dS rG  )r$  r   r@  r   rN  r  rH  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  s	            r   rN  zVtkLocalView.export  r_  r`  c                 H    | j                             | j        d           dS z?
        Move camera to center actors within the frame
        r   r  Nr   rk  r  r   s     r   r   zVtkLocalView.reset_camera  s'     	
=AAAAAr   c                     || _         | j                            | j        d| j                            |                     |                                  d S )NsetSynchronizedViewId)r  r   rk  r  r   rk   r~   r  s      r   r  zVtkLocalView.replace_view  sN    J/1J1J	
 	
 	
 	r   c                 H    | j                             | j        d           d S r  r  r   s     r   r   zVtkLocalView.resize  r  r   c           	      f   |t          | j        d          r>| j                                                                                                        }n.t          | j        d          r| j                                        }|d S t          |                                |                                |                                |	                                |
                                |                                          }|||d<   | j                            | j        d|           d S rq  )r{  r  rr  r|  rs  r}  r~  r  r  r  r  r  r   rk  r  r  s        r   rn  zVtkLocalView.push_camera  r  r   r  c                 J    | j                             | j        d||           d S r  r  r  s      r   r  zVtkLocalView.capture_image  r  r   c                 t    | j         j        j                            | j                   d | _        d | _        d S r   )r+  r,  r-  discardr~   r  r$  r#   s    r   r  zVtkLocalView.release_resources  s2    /77DDDr   c                     | j         S r   )r  r#   s    r   r  zVtkLocalView.ref_name  r  r   c                      t          |          S r   r   )r   
vtk_objects     r   r  z VtkLocalView.get_scene_object_id"  s    J'''r   )Nr   r  r   )r%   r&   r'   r  r  r   r  r  r~   rN  r   r  r   rn  r  r  r(   r  r  r)   r*   s   @r   r  r  6  s?          D H!%r IA IA IA IA IA IAV    8 8 8 84) ) ) )<B B B  = = =
 
 
 
8 $/R 
 
 
 
  
   X( ( ( ( ( ( (r   r  c                   F     e Zd ZdZd fd	Zd Zd Zed             Z xZ	S )VtkViewr   Nc                      t                      j        d|fi | |$t          xj        dz  c_        dt          j         }|| _        d| d| j        d<   | xj        g dz  c_        | xj        g dz  c_        d S )	Nzvtk-viewr   trame__client_view_r   rw   r   )
backgroundcube_axes_styler   r   r   show_cube_axes)(r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r   r  r  _refr}   rH   rI   )r   r   r   r    r!   s       r   r   zVtkView.__init__)  s    X88888;!:(8::C	"0#... 
 
 
 	
 	 )
 )
 )
 )	
r   c                 H    | j                             | j        d           dS r  r   rk  r  r   s     r   r   zVtkView.reset_camerae  s'     		-@@@@@r   c                 H    | j                             | j        d|           dS )z>
        Update camera (position, focalPoint, viewUp)
        rj  Nr  )r   rl  s     r   
set_camerazVtkView.set_camerak  s&     	DI{F;;;;;r   c                     | j         S r   )r  r#   s    r   r  zVtkView.ref_nameq  s
    yr   r   )
r%   r&   r'   r  r   r   r  r(   r  r)   r*   s   @r   r  r  &  s        H:
 :
 :
 :
 :
 :
xA A A< < <   X    r   r  c                   V     e Zd ZdZdZ G d de          Zd
 fd	ZdefdZd	 Z	 xZ
S )VtkWebXRHelpera  
        The VtkWebXRHelper component provides an easy way to add WebXR support to
        a VtkView or a VtkLocalView. Just add this widget in a VtkView or
        VtkLocalView widget and start an XR session with `start_xr()`.
        This widget will fire the `enterXR` and `exitXR` events when an XR session
        is effectively entered and exited.

    >>> webxr_helper = vtk.VtkWebXRHelper(
    ...     ref=...,  # Identifier for this component
    ...     draw_controllers_ray=True,  # Enable XR controllers rays
    ... )
    r   c                   "    e Zd ZdZdZdZdZdZdS )VtkWebXRHelper.XrSessionTypesz9
        WebXR Session Types supported by vtk.js
        r   r   r      N)r%   r&   r'   r  HmdVRMobileARLookingGlassVRHmdAR r   r   XrSessionTypesr    s.        	 	 r   r  Nc                      t                      j        	 d
i | |$t          xj        dz  c_        dt          j         }|| _        d| d| j        d<   | xj        dgz  c_        | xj        dd	gz  c_        d S )Nvtk-webXR-helperr   trame__webxr_helper_r   rw   r   )draw_controllers_raydrawControllersRay)enter_xrenterXR)exit_xrexitXR)r  )r   r   r  r  _VtkWebXRHelper__refr}   rH   rI   )r   r   r    r!   s      r   r   zVtkWebXRHelper.__init__  s    	
 	
	
 	
 	

 ;##q(##B)@BBC
"0#...KLL#!
 	
r   session_typec                 H    | j                             | j        d|           dS )z'
        Start a WebXR session
        startXRNr   rk  r  )r   r  s     r   start_xrzVtkWebXRHelper.start_xr  s&     	DJ	<@@@@@r   c                 F    | j                             | j        d           dS )z0
        Stop the current WebXR session
        stopXRNr  r#   s    r   stop_xrzVtkWebXRHelper.stop_xr  s$     	DJ11111r   r   )r%   r&   r'   r  r  r   r  r   r  r  r)   r*   s   @r   r  r  v  s          H       
 
 
 
 
 
$A^ A A A A2 2 2 2 2 2 2r   r  )#rQ  rH  rS  enumr   trame_client.widgets.corer   r   r   	trame_vtkr   zlibZIP_DEFLATEDrV  ImportError
ZIP_STOREDr   r   r,   rM   rV   rZ   rd   ri   rq   rt   r   r   r   r   r  r  r  r  r  r  r   r   <module>r      s   				         5 5 5 5 5 5 $ $ $ $ $ $ " " " " " ")KKK*OO ) ) )(OOO)& & & 	 	 	 	 	/ 	 	 	
 
 
 
 
 
 
 
6
 
 
 
 
; 
 
 
.> > > > >+ > > >

 
 
 
 
; 
 
 
<? ? ? ? ?; ? ? ?

 
 
 
 
 
 
 
D
 
 
 
 
[ 
 
 
<( ( ( ( (k ( ( (V? ? ? ? ?; ? ? ?
;O ;O ;O ;O ;O+ ;O ;O ;O|#
 #
 #
 #
 #
 #
 #
 #
Lt% t% t% t% t% t% t% t%n	Y Y Y Y YK Y Y Yx- - - - -k - - -m( m( m( m( m(; m( m( m(`M M M M Mk M M M`62 62 62 62 62[ 62 62 62 62 62s   2 A A