
    tjv                        d Z ddlmZmZmZ ddlZddlZddlZddlZddl	Z	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 ddlmZmZmZmZ 	 ddlmZ ddlmZ dd	lm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%y# e$ r  e       w xY w)zprotocols is a module that contains a set of VTK Web related
protocols that can be combined together to provide a flexible way to define
very specific web application.
    )absolute_importdivisionprint_functionN)vtkWebInteractionEvent)WebDependencyMissingError)serializeInstanceSynchronizationContextgetReferenceIdinitializeSerializers)schedule_callback)register)LinkProtocolc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
vtkWebProtocolc                 $    | j                  d      S )Napp)getSharedObjectselfs    E/DATA/.local/lib/python3.12/site-packages/vtkmodules/web/protocols.pygetApplicationzvtkWebProtocol.getApplication#   s    ##E**    c                      y N )r   r   s     r   setApplicationzvtkWebProtocol.setApplication'   s    r   c                 ~    t        |      }|dk  ry| j                         j                         j                  |      S )z{
        Maps global-id for a vtkObject to the vtkObject instance. May return None if the
        id is not valid.
        r   N)intr   GetObjectIdMapGetVTKObjectr   ids     r   mapIdToObjectzvtkWebProtocol.mapIdToObject*   s:    
 W7""$335BB2FFr   c                 \    | j                         j                         j                  |      S )z5
        Return the id for a given vtkObject
        )r   r   GetGlobalIdr   objs     r   getGlobalIdzvtkWebProtocol.getGlobalId4   s'     ""$335AA#FFr   c                 \    | j                         j                         j                  |      S )zd
        Delete the given vtkObject from the objectIdMap. Returns true if delete succeeded.
        )r   r   
FreeObjectr&   s     r   
freeObjectzvtkWebProtocol.freeObject:   s'     ""$335@@EEr   c                 \    | j                         j                         j                  |      S )z
        Delete the vtkObject corresponding to the given objectId from the objectIdMap.
        Returns true if delete succeeded.
        )r   r   FreeObjectByIdr!   s     r   freeObjectByIdzvtkWebProtocol.freeObjectById@   s'    
 ""$335DDRHHr   c                     | j                  |      }|s-| j                         j                         j                  d      }|st	        d|z        |S )z
        Returns the view for a given view ID, if vid is None then return the
        current active view.
        :param vid: The view ID
        :type vid: str
        VIEWzno view provided: %s)r#   r   r   GetActiveObject	Exception)r   vidvs      r   getViewzvtkWebProtocol.getViewG   sR     s###%446FFvNA2S899r   c                 `    | j                         j                         j                  d|       y)z<
        Set a vtkRenderWindow to be the active one
        r0   N)r   r   SetActiveObject)r   views     r   setActiveViewzvtkWebProtocol.setActiveViewX   s&     	,,.>>vtLr   N)__name__
__module____qualname__r   r   r#   r(   r+   r.   r5   r9   r   r   r   r   r   "   s/    +GGFI"Mr   r   c                   D    e Zd Z ed      d        Z ed      d        Zy)vtkWebMouseHandlerzviewport.mouse.interactionc                    | j                  |d         }d}|d   r|t        j                  z  }|d   r|t        j                  z  }|d   r|t        j                  z  }d}|d   r|t        j
                  z  }|d   r|t        j                  z  }|d   r|t        j                  z  }|d	   r|t        j                  z  }t               }|j                  |       |j                  |       d
|v r|j                  |d
          d|v r|j                  |d          d|v r|j                  |d          |d   dk(  r|j                  d       | j                         j!                  ||      }~|d   dk(  r| j                         j#                  d       |d   dk(  r| j                         j#                  d       |r| j                         j#                  d       |S )z6
        RPC Callback for mouse interactions.
        r8   r   
buttonLeftbuttonMiddlebuttonRightshiftKeyctrlKeyaltKeymetaKeyxyscrollactiondblclick   downStartInteractionEventupEndInteractionEventUpdateEvent)r5   r   LEFT_BUTTONMIDDLE_BUTTONRIGHT_BUTTON	SHIFT_KEYCTRL_KEYALT_KEYMETA_KEY
SetButtonsSetModifiersSetXSetY	SetScrollSetRepeatCountr   HandleInteractionEventInvokeEvent)r   eventr8   buttons	modifierspveventretVals          r   mouseInteractionz#vtkWebMouseHandler.mouseInteractiong   s   
 ||E&M*-999G -;;;G-:::G	/999I/888I?/777I/888I(*7#Y'%<LLs$%<LLs$ueHo.?j(""1%$$&==dGL?f$!--.EF?d"!--.CD!--m<r   zviewport.mouse.zoom.wheelc                    d|d   v r| j                         j                  d       | j                  |d         }|rd|v rd|d   dz  z
  }|j                         j	                         j                         }|j                         }|j                         }t        d      D cg c]  }||   ||   z
   }}|j                  |       |j                         }	|j                  t        d      D cg c]  }|	|   ||   z    c}       |j                          d	|d   v r | j                         j                  d
       y y c c}w c c}w )NStarttyperN   r8   spinY      ?g      $@   EndrP   )r   r`   r5   GetRenderersGetFirstRendererGetActiveCameraGetFocalPointGetPositionrangeZoomSetFocalPointModified)
r   ra   renderWindow
zoomFactorcamerafpposideltapos2s
             r   updateZoomFromWheelz&vtkWebMouseHandler.updateZoomFromWheel   s=   eFm#!--.EF||E&M2Gu,uW~44J!..0AACSSUF%%'B$$&C-21X6XRUSV^XE6KK
#%%'D  eAh!Gh$q'E!H"4h!GH!!#E&M!!--.CD " 7 "Hs   %E2EN)r:   r;   r<   	exportRpcrf   r   r   r   r   r>   r>   f   s7    +,0 -0d *+E ,Er   r>   c                   ~    e Zd Z ed      d        Z ed      d        Z ed      d        Z ed      d
d       Zy	)vtkWebViewPortzviewport.camera.resetc                 0   | j                  |      }|j                         j                         }|j                          | j	                         j                  |       | j	                         j                  d       t        | j                  |            S )z/
        RPC callback to reset camera.
        rQ   )	r5   rn   ro   ResetCamerar   InvalidateCacher`   strr(   )r   viewIdr8   renderers       r   resetCamerazvtkWebViewPort.resetCamera   sy    
 ||F#$$&779--d3))-84##D)**r   z+viewport.axes.orientation.visibility.updatec                     | j                  |      }| j                         j                  |       | j                         j                  d       t	        | j                  |            S )z<
        RPC callback to show/hide OrientationAxis.
        rQ   r5   r   r   r`   r   r(   r   r   showAxisr8   s       r   updateOrientationAxesVisibilityz.vtkWebViewPort.updateOrientationAxesVisibility   X    
 ||F# 	--d3))-84##D)**r   z&viewport.axes.center.visibility.updatec                     | j                  |      }| j                         j                  |       | j                         j                  d       t	        | j                  |            S )zA
        RPC callback to show/hide CenterAxesVisibility.
        rQ   r   r   s       r   updateCenterAxesVisibilityz)vtkWebViewPort.updateCenterAxesVisibility   r   r   zviewport.camera.updatec                 f   | j                  |      }|j                         j                         j                         }|j	                  |       |j                  |       |j                  |       |r?| j                         j                  |       | j                         j                  d       y y )NrQ   )
r5   rn   ro   rp   ru   	SetViewUpSetPositionr   r   r`   )r   view_idfocal_pointview_uppositionforceUpdater8   ry   s           r   updateCamerazvtkWebViewPort.updateCamera   s    ||G$""$557GGI[)!8$!11$7!--m< r   NT)r:   r;   r<   r   r   r   r   r   r   r   r   r   r      sh    &'+ (+ <=
+ >
+ 78
+ 9
+ '(
= )
=r   r   c                   (    e Zd Z ed      d        Zy)vtkWebViewPortImageDeliveryzviewport.image.renderc                 f   t        t        t        j                         dz              }| j                  |d         }|j	                         d   |j	                         d   g}||j                  d|      k7  }|r&|d   }|d   dkD  r|d   dkD  r|j                  |       d}|r	d|v r|d   }d}|r	d|v r|d   }d}|r	d	|v r|d	   }i }	| j                         }
|dk(  r|
j                  |       |
j                  |||      |	d
<   d}|rt        |j	                               |k7  rc|ddgk7  r\|dkD  rW|
j                  |       |
j                  |||      |	d
<   |dz  }|r)t        |j	                               |k7  r|ddgk7  r|dkD  rW|
j                  |      |	d<   |
j                         |	d<   |j	                         d   |j	                         d   g|	d<   d|	d<   t        | j                  |            |	d<   ||	d	<   t        t        t        j                         dz              }||z
  |	d<   |	S )N
        RPC Callback to render a view and obtain the rendered image.
          r8   r      sizemtimed   quality	localTimeimage
   stalejpeg;base64format	global_idworkTime)r   roundtimer5   GetSizegetSetSizer   r   StillRenderToStringlistGetHasImagesBeingProcessedGetLastStillRenderToMTimer   r(   )r   options	beginTimer8   r   resizetr   r   replyr   triesendTimes                r   stillRenderz'vtkWebViewPortImageDelivery.stillRender   sH   
 diikD012	||GFO,q!4<<>!#45VT226?DAw{tAw{T"w') AyG+i(G	{g-,I!!#6%00q'Bg dlln-5$1a&.UUVY% 44T1gFE'NQJE dlln-5$1a&.UUVY
 77=g668g*DLLN1,=>f'h !1!1$!78k&keDIIK$./0#i/jr   N)r:   r;   r<   r   r   r   r   r   r   r      s    &'- (-r   r   c                   v    e Zd Zd fd	ZddZd Zd Z ed      dd       Z ed      d        Z	 ed	      dd
       Z
 ed      dd       Z ed      d        Zd Z ed      d        Z ed      d        Z ed      d d       Z ed      d        Z ed      d        Z ed      d        Z xZS )!vtkWebPublishImageDeliveryc                     t         t        |           i | _        d| _        d| _        d| _        || _        g | _        d| _	        d| _
        d| _        y )Nr   g      ?g      >@g      (@)superr   __init__trackingViewslastStaleTimestaleHandlerCountdeltaStaleTimeBeforeRenderdecodeviewsInAnimationstargetFrameRateminFrameRatemaxFrameRate)r   r   	__class__s     r   r   z#vtkWebPublishImageDelivery.__init__0  sX    ($8:!"*-'!##  r   c                      j                   vry  j                      d   sy |st         j                        dkD  ry d j                      vr: j                        }t	        |j                                j                      d<   d j                      vrd j                      d<    j                      d   } j                      d   } j                      d   } j                      d   D cg c]  }t        ||z         }} j                  |||d      }	|	d	   }
|	d
   ro j                  rt        j                  |	d
         |	d
<    j                  |	d
         |	d
<   d|	d<   |	d    j                      d<   |	d<    j                  d|	       |
rYt        j                          _         j                  dk(  r0 xj                  dz  c_        t!         j"                   fd       y y d _        y c c}w )Nenabledr   originalSizeratior   r   r   )r8   r   r   r   r   r   jpegr   r"   z viewport.image.push.subscriptionc                  &     j                        S r   renderStaleImager   vIds   r   <lambda>z7vtkWebPublishImageDelivery.pushRender.<locals>.<lambda>g  s    T=R=RSV=Wr   )r   lenr   r5   r   r   r   r   r   base64standard_b64decodeaddAttachmentpublishr   r   r   r   r   )r   r   ignoreAnimationr8   r   r   r   sr   r   r   s   ``         r   
pushRenderz%vtkWebPublishImageDelivery.pushRender<  s   d(((!!#&y13t'='=#>#B!3!3C!88<<$D6:4<<>6JDs#N3$,,S11/0Ds#G,""3'0""3'0$$S))4(,(:(:3(?(OP(O1AI(OP  5WdK
 g>{{!'!:!:5>!Jg!//g?E'N$E(O/4W~Ds#G,E$KLL;UC!%D%%*&&!+&!335W + "#D5 Qs   8Hc                 @     xj                   dz  c_          j                  dk7  rxt        j                          j                  z
  }| j                  k\  r j	                         y  xj                   dz  c_         t         j                  |z
  dz    fd       y y )Nr   r   MbP?c                  &     j                        S r   r   r   s   r   r   z=vtkWebPublishImageDelivery.renderStaleImage.<locals>.<lambda>w  s    D11#6r   )r   r   r   r   r   r   )r   r   r}   s   `` r   r   z+vtkWebPublishImageDelivery.renderStaleImagel  s    !#"IIK$"4"44E777$&&!+&!33e;eC6 #r   c                 j    t         j                        dk(  ry t        j                         d j                  z  z   } j                  D ]  } j	                  |d        |t        j                         z  } j                   j
                  kD  r j
                   _        |dk  rJ|dk  rd _         j                   j                  kD  r xj                  dz  c_        t        d fd       y  j                   j
                  k  r|dkD  r xj                  dz  c_        t        | fd	       y )
Nr   rk   Tg      r   r   c                  $     j                         S r   animater   s   r   r   z4vtkWebPublishImageDelivery.animate.<locals>.<lambda>  s    T\\^r   g{Gzt?c                  $     j                         S r   r   r   s   r   r   z4vtkWebPublishImageDelivery.animate.<locals>.<lambda>  s    t||~r   )r   r   r   r   r   r   r   r   )r   nextAnimateTimer   s   `  r   r   z"vtkWebPublishImageDelivery.animatez  s   t%%&!+))+d.B.B(BB))COOC& * 	499;&$"3"33#'#4#4D Q%'($##d&7&77$$+$e%;<##d&7&77Oe<S$$+$o/EFr   z viewport.image.animation.fps.maxc                     || _         y r   )r   )r   fpss     r   setMaxFrameRatez*vtkWebPublishImageDelivery.setMaxFrameRate  s
    r   z viewport.image.animation.fps.getc                     | j                   S r   )r   r   s    r   getCurrentFrameRatez.vtkWebPublishImageDelivery.getCurrentFrameRate  s    ###r   zviewport.image.animation.startc                     | j                  |      }t        | j                  |            }| j                  j	                  |       t        | j                        dk(  r| j                          y y Nr   )r5   r   r(   r   appendr   r   r   r   sView
realViewIds       r   startViewAnimationz-vtkWebPublishImageDelivery.startViewAnimation  sZ    V$))%01
%%j1t%%&!+LLN ,r   zviewport.image.animation.stopc                     | j                  |      }t        | j                  |            }|| j                  v r| j                  j	                  |       y y r   )r5   r   r(   r   remover   s       r   stopViewAnimationz,vtkWebPublishImageDelivery.stopViewAnimation  sL    V$))%01
///""))*5 0r   zviewport.image.pushc                     | j                  |d         }t        | j                  |            }| j                         j	                  |       | j                  |       y )Nr8   )r5   r   r(   r   r   r   )r   r   r   r   s       r   	imagePushz$vtkWebPublishImageDelivery.imagePush  sL    WV_-))%01
--e4
#r   c                 2   t        t        t        j                         dz              }| j                  |d         }|j	                         dd }||j                  d|      k7  }|r&|d   }|d   dkD  r|d   dkD  r|j                  |       d}|r	d|v r|d   }d	}|r	d
|v r|d
   }d}|r	d|v r|d   }i }	| j                         }
|dk(  r|
j                  |       | j                  r|
j                  }n|
j                  } ||||      }d}|rst        |j	                               |k7  rW|ddgk7  rP|dkD  rK|
j                  |        ||||      }|dz  }|r)t        |j	                               |k7  r|ddgk7  r|dkD  rK|s&|r$d|v r |d   r|
j                  |        ||||      }|
j                  |      |	d<   |
j                         |	d<   |j	                         dd |	d<   |r|j                         nd|	d<   | j                  rdnd|	d<   t!        | j#                  |            |	d<   ||	d<   | j                  r||	d<   n |rt%        |      j'                         nd|	d<   t        t        t        j                         dz              }||z
  |	d<   |	S )r   r   r8   r   rL   r   r   r   r   r   r   r   
clearCacher   memsizer   r   r   r   r   Nr   )r   r   r   r5   r   r   r   r   r   r   r   StillRenderToBufferr   r   r   GetDataSizer   r(   
memoryviewtobytes)r   r   r   r8   r   r   r   r   r   r   r   r   reply_imager   r   s                  r   r   z&vtkWebPublishImageDelivery.stillRender  s    diikD012	||GFO,||~a"VT226?DAw|Q"T"w') AyG+i(G	{g-,I!!#6%;;11K11K!$73 dlln-5$1a&.UUVY%%dAw7KQJE dlln-5$1a&.UUVY (%%%dAw7K77=g668gq+f8C;224i+/;;-Fh !1!1$!78k&k;;(E'N CNZ4<<>SWE'NeDIIK$./0#i/jr   z viewport.image.push.observer.addc                     	  j                  |      }|sdd|z  iS t         j                  |            		 j                  vr	 fd}	 fd}	 fd} j	                         j                  d|      } j	                         j                  d|      } j	                         j                  d|      }|||gd	d
ddd j                  	<   n j                  	   dxx   d	z  cc<    j                  	       d	dS )NerrorUnable to get view with id %sc                  &    j                        S r   )r   argskwargsr   r   s     r   r   z>vtkWebPublishImageDelivery.addRenderObserver.<locals>.<lambda>   s    tz7Rr   c                  &    j                        S r   )r   r  s     r   r   z>vtkWebPublishImageDelivery.addRenderObserver.<locals>.<lambda>  s    D4K4KJ4Wr   c                  &    j                        S r   )r   r  s     r   r   z>vtkWebPublishImageDelivery.addRenderObserver.<locals>.<lambda>  s    43I3I*3Ur   rQ   rN   rP   r   r   Tr   )tagsobserverCountr   r   r   r  successr   )r5   r   r(   r   r   AddObserverr   )
r   r   r   observerCallbackstartCallbackstopCallbacktagtagStarttagStopr   s
   `        @r   addRenderObserverz,vtkWebPublishImageDelivery.addRenderObserver  s   V$<vEFF))%01
T///RWMUL%%'33MCSTC**,88'H ))+77%|G
 h0!".Dz* z*?;q@;
#:66r   z#viewport.image.push.observer.removec                 X   | j                  |      }|sdd|z  iS t        | j                  |            }d }|| j                  v r| j                  |   }|sdd|z  iS |dxx   dz  cc<   |d   dk  r6|d   D ]!  }| j	                         j                  |       # | j                  |= dd	iS 
Nr  r  'Unable to find subscription for view %sr  r   r   r  resultr  )r5   r   r(   r   r   RemoveObserverr   r   r   r   observerInfor  s         r   removeRenderObserverz/vtkWebPublishImageDelivery.removeRenderObserver  s    V$<vEFF))%01
+++--j9LFSTT_%*%(A-#F+##%44S9 ,"":.)$$r   zviewport.image.push.qualityc                    | j                  |      }|sdd|z  iS t        | j                  |            }d }|| j                  v r| j                  |   }|sdd|z  iS ||d<   ||d<   d| j                  |   v rS| j                  |   d   D cg c]  }t	        ||z         }}t        |d      r|j                  |       dd	iS ||_        dd	iS c c}w )
Nr  r  r  r   r   r   r   r  r  )r5   r   r(   r   r   hasattrr   ViewSize)	r   r   r   r   r   r   r  r   r   s	            r   setViewQualityz)vtkWebPublishImageDelivery.setViewQuality1  s   V$<vEFF))%01
+++--j9LFSTT")Y %W T//
;;(,(:(::(F~(V(V1AI(V   ui(d# )$$ "&)$$s   Cz!viewport.image.push.original.sizec                     | j                  |      }|sdd|z  iS t        | j                  |            }d }|| j                  v r| j                  |   }|sdd|z  iS ||g|d<   ddiS )Nr  r  r  r   r  r  r5   r   r(   r   )r   r   widthheightr   r   r  s          r   setViewSizez&vtkWebPublishImageDelivery.setViewSizeN  s    V$<vEFF))%01
+++--j9LFSTT(-v^$)$$r   zviewport.image.push.enabledc                     | j                  |      }|sdd|z  iS t        | j                  |            }d }|| j                  v r| j                  |   }|sdd|z  iS ||d<   ddiS )Nr  r  r  r   r  r  r%  )r   r   r   r   r   r  s         r   
enableViewz%vtkWebPublishImageDelivery.enableView`  s    V$<vEFF))%01
+++--j9LFSTT")Y)$$r   z$viewport.image.push.invalidate.cachec                     | j                  |      }|sdd|z  iS | j                         j                  |       | j                         j                  d       ddiS )Nr  r  rQ   r  r  )r5   r   r   r`   )r   r   r   s      r   invalidateCachez*vtkWebPublishImageDelivery.invalidateCacher  s]    V$<vEFF--e4))-8)$$r   r   F)   )z-1)r   )r:   r;   r<   r   r   r   r   r   r   r   r   r   r   r   r  r  r#  r(  r*  r,  __classcell__r   s   @r   r   r   /  s?   
!.#`G0 12  3  12$ 3$ /0 1 ./6 06 $%$ &$@D 127 37B 45% 6%. ,-% .%8 23% 4%" ,-% .%" 56% 7%r   r   c                   D    e Zd Z ed      d        Z ed      d        Zy)vtkWebViewPortGeometryDeliveryzviewport.webgl.metadatac                 f    | j                  |      }| j                         j                  |      }|S r   )r5   r   GetWebGLSceneMetaData)r   r   r8   datas       r   getSceneMetaDataz/vtkWebViewPortGeometryDelivery.getSceneMetaData  s.    ||G$""$::4@r   zviewport.webgl.datac                     | j                  |      }| j                         j                  |t        |      |dz
        }|S r   )r5   r   GetWebGLBinaryDatar   )r   r   	object_idpartr8   r5  s         r   getWebGLDataz+vtkWebViewPortGeometryDelivery.getWebGLData  s;    ||G$""$77c)ndUVhWr   N)r:   r;   r<   r   r6  r;  r   r   r   r2  r2    s4    () *
 $% &r   r2  c                   4    e Zd Z	 ddZ ed      dd       Zy)vtkWebFileBrowserc                     || _         || _        t        j                  |      | _        t        j                  |      | _        y)aU  
        Configure the way the WebFile browser will expose the server content.
         - basePath: specify the base directory that we should start with
         - name: Name of that base directory that will show up on the web
         - excludeRegex: Regular expression of what should be excluded from the list of files/directories
        N)baseDirectoryrootNamerecompilepatterngPattern)r   basePathnameexcludeRegex
groupRegexs        r   r   zvtkWebFileBrowser.__init__  s3     &zz,/

:.r   zfile.server.directory.listc                    | j                   g}t        |      t        | j                         kD  r?|t        | j                         dz   d }||j                  dd      j                  d      z  }t        j
                  j                  | j                  |      }|g g g |d}|dk(  r| j                   |d<   t	        j                  |      D ]  }t        j
                  j                  t        j
                  j                  ||            r8t        j                  | j                  |      s|d   j                  |d	d
       xt        j
                  j                  t        j
                  j                  ||            st        j                  | j                  |      r|d   j                  |        |d   }|j                          |d   }i }g }	|D ]  }t        j                  | j                   |d         }
t        |
      dk(  s5|	j                  |       dj                  |
      }||v r||   d   j                  |d          v|d   g|d||<   |j                  ||           |	D ]n  }dj                  t        j                  | j                   |d               }t        ||   d         dkD  r|j#                  |       [|j#                  ||          p |S )zp
        RPC Callback to list a server directory relative to the basePath
        provided at start-up.
        r   N\/)labelfilesdirsgroupspath.rL  rM  )rL  r   rN  rO  rL   z*.)rM  rL  )r@  r   replacesplitosrP  joinr?  listdirisfilerA  searchrC  r   isdirsortrD  r   )r   relativeDirrP  currentPathr  filerM  rO  groupIdxfilesToRemove	fileSplitgNames               r   listServerDirectoryz%vtkWebFileBrowser.listServerDirectory  sp    {c$--00%c$--&81&<&>?KK''c288==Dggll4#5#5{C 
 #"mmF7OJJ{+Dww~~bggll;=>ryydH w&&r'BCrww||K>?		dI v%%d+ , w

!DW>I9~"$$T*		),H$UOG,33DMB15g%&PHUOMM(5/2  "DIIbhht}}d7mDEE8E?7+,q0T"huo. " r   N)z
^\.|~$|^\$z[0-9]+\.)rQ  )r:   r;   r<   r   r   rc  r   r   r   r=  r=    s$    EP/ +,5 -5r   r=  c                        e Zd Z fdZ ed      d
d       Z ed      d        Z ed      d        Z ed      d
d	       Z xZ	S )vtkWebLocalRenderingc                 x    t         t        |           t                t	               | _        i | _        d| _        y )Nr   )r   re  r   r   r	   contextr   r   )r   r	  r   s     r   r   zvtkWebLocalRendering.__init__  s0    "D24-/
r   zviewport.geometry.array.getc                     |r+| j                  | j                  j                  ||            S | j                  j                  ||      S r   )r   rg  getCachedDataArray)r   dataHashbinarys      r   getArrayzvtkWebLocalRendering.getArray  s?    %%dll&E&EhPV&WXX||..x@@r   z#viewport.geometry.view.observer.addc                      j                  |      }|sdd|z  iS  j                         j                         j                  |      d fd	 j                  vr: fd} j                         j                  d|      }|gdd j                  <   n j                     dxx   dz  cc<    j                  d	 d
             d
dS )Nr  r  c                 |    j                  |       }| rdnj                  |d<   xj                  dz  c_        |S )Nr   r   r   )getViewStater   )newSubscriptionstateToReturnr   r   s     r   pushGeometryz:vtkWebLocalRendering.addViewObserver.<locals>.pushGeometry  s:     --j/JM*9QtzzM'"JJ!OJ  r   c                  2    j                  d              S )N#viewport.geometry.view.subscription)r   )r  r	  rr  r   s     r   r   z6vtkWebLocalRendering.addViewObserver.<locals>.<lambda>  s    t||5|~8r   rQ   r   )r  r  r  rt  Tr  r-  )r5   r   r   r%   r   r  r   )r   r   r   r  r  rr  r   s   `    @@r   addViewObserverz$vtkWebLocalRendering.addViewObserver  s    V$<vEFF((*99;GGN
	! T///  %%'33MCSTC7:ea-PDz* z*?;q@;:L<NO:66r   z&viewport.geometry.view.observer.removec                 ~   | 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  r6|d   D ]!  }| j                         j                  |       # | j                  |= dd	iS r  )r5   r   r   r%   r   r  r  s         r   removeViewObserverz'vtkWebLocalRendering.removeViewObserver  s    V$<vEFF((*99;GGN
+++--j9LFSTT_%*%(A-#F+##%44S9 ,"":.)$$r   z viewport.geometry.view.get.statec                    | j                  |      }|sdd|z  iS | j                  j                  |       |}|j                         j	                         }|j                         }| j                         j                         j                  |      }t        d ||| j                  d      }t        |      |j                         t        |      d|d<   | j                  j                  d       | j                  j                          |r|S y )Nr  r  r   )vtkRefIdcenterOfRotationry   extraF)r5   rg  setIgnoreLastDependenciesrn   ro   rp   r   r   r%   r   r
   rq   checkForArraysToRelease)	r   r   rp  r   rw   r   ry   renderWindowIdviewInstances	            r   ro  z!vtkWebLocalRendering.getViewState.  s    V$<vEFF..? ,,.??A))+,,.==?KKER(,a
 '|4 & 4 4 6$V,!
W 	..u5,,.r   r-  )
r:   r;   r<   r   r   rl  ru  rw  ro  r/  r0  s   @r   re  re    sr     ,-A .A 457 676 78% 9%0 12 3r   re  )&__doc__
__future__r   r   r   rU  sysloggingtypesinspect	tracebackrA  r   r   vtkmodules.vtkWebCorer   vtkmodules.web.errorsr   'vtkmodules.web.render_window_serializerr   r	   r
   r   wslinkr   r   r   wslink.websocketr   ImportErrorr   r>   r   r   r   r2  r=  re  r   r   r   <module>r     s   
 A @ D D D D D 8 ; &(,-:M\ :MHHE HEd4=^ 4=|/. /rK% K%j
^ *E E`a> ac  &
#
%%&s   
B5 5C