Ë
    ¯·gTa  ã                   ó*  — d 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 ej                  Z
ej                  dk(  rddlZej                  j                  Z
ej                  dk(  Z G d„ dej                   «      Z G d	„ d
e
«      Zd„ Zedk(  r e«        yy)a*  

A VTK RenderWindowInteractor widget for wxPython.

Find wxPython info at http://wxPython.org

Created by Prabhu Ramachandran, April 2002
Based on wxVTKRenderWindow.py

Fixes and updates by Charl P. Botha 2003-2008

Updated to new wx namespace and some cleaning up by Andrea Gavana,
December 2006
é    N)ÚvtkRenderWindow)Ú vtkGenericRenderWindowInteractorÚ	__WXGTK__Ú	__WXMSW__c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú
EventTimerzSimple wx.Timer class.
    c                 óP   — t         j                  j                  | «       || _        y)zNDefault class constructor.
        @param iren: current render window
        N)ÚwxÚTimerÚ__init__Úiren)Úselfr   s     úIlib/python3.12/site-packages/vtkmodules/wx/wxVTKRenderWindowInteractor.pyr   zEventTimer.__init__@   s   € ô 	�‰×Ñ˜$ÔØˆ�	ó    c                 ó8   — | j                   j                  «        y)z  The timer has expired.
        N)r   Ú
TimerEvent©r   s    r   ÚNotifyzEventTimer.NotifyH   s   € ð 	�	‰	×ÑÕr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   © r   r   r   r   <   s   „ ñòór   r   c                   ó¤   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚwxVTKRenderWindowInteractorzµ
    A wxRenderWindow for wxPython.
    Use GetRenderWindow() to get the vtkRenderWindow.
    Create with the keyword stereo=1 in order to
    generate a stereo-capable window.
    Fc                 óÔ	  — d| _         	 t        |d   «      }|d= 	 |d   }|d= 	 |d   }|d= t        j                  t        j                  z  }	 ||d   z  }|d= t        j                  dk7  rRg }	|}
|
r$|	j                  |
«       |
j                  «       }
|
rŒ$|	j                  «        |	D ]  }
|
j                  d«       Œ t        j                   d	k(  råt        j"                  j$                  t        j"                  j&                  dt        j"                  j(                  dt        j"                  j*                  dt        j"                  j,                  d
t        j"                  j.                  g
}|r)|j                  t        j"                  j0                  «       	 t        j3                  | ||||||¬«       nt        j3                  | |||||¬«       t7        «       | _        | j8                  j;                  t=        «       «       | j8                  j?                  d| j@                  «       | j8                  j?                  d| jB                  «       | j8                  jE                  «       j?                  d| jF                  «       	 | j8                  jE                  «       jI                  |jJ                  |jL                  «       |rP| j8                  jE                  «       jO                  «        | j8                  jE                  «       jQ                  «        d| _)        | jU                  «        d| _+        d| _,        d| _-        t        j\                  t        j\                  t        j^                  t        j`                  t        j^                  t        j`                  t        jb                  t        jd                  t        jf                  t        jh                  t        jj                  dœ| _6        y# t        $ r d}Y �Œâw xY w# t        $ r t        j                  }Y �Œùw xY w# t        $ r5 	 |j                  «       }n# t        $ r t        j                  }Y nw xY wY �Œ1w xY w# t        $ r Y �Œw xY w# t        j4                  $ r# t        j3                  | |||||¬«       |rd}Y �ŒÕw xY w# t        $ r4 | j8                  jE                  «       jI                  |d   |d   «       Y �Œ$w xY w)zÆDefault class constructor.
        @param parent: parent window
        @param ID: window id
        @param **kw: wxPython keywords (position, size, style) plus the
        'stereo' keyword
        r   ÚstereoFÚpositionÚsizeÚstyler   é   ÚGLCanvasé   )Úposr   r    Ú
attribList)r$   r   r    ÚCreateTimerEventÚDestroyTimerEventÚCursorChangedEventN)r   r!   é   é   é   é   é   é   é   é	   é
   )7Ú0_wxVTKRenderWindowInteractor__RenderWhenDisabledÚboolÚKeyErrorr
   ÚDefaultPositionÚGetSizeÚAttributeErrorÚDefaultSizeÚWANTS_CHARSÚNO_FULL_REPAINT_ON_RESIZEÚPlatformÚappendÚ	GetParentÚreverseÚShowÚ	baseClassr   ÚglcanvasÚ
WX_GL_RGBAÚWX_GL_MIN_REDÚWX_GL_MIN_GREENÚWX_GL_MIN_BLUEÚWX_GL_DEPTH_SIZEÚWX_GL_DOUBLEBUFFERÚWX_GL_STEREOr   ÚPyAssertionErrorr   Ú_IrenÚSetRenderWindowr   ÚAddObserverÚCreateTimerÚDestroyTimerÚGetRenderWindowr(   ÚSetSizeÚwidthÚheightÚStereoCapableWindowOnÚSetStereoTypeToCrystalEyesÚ$_wxVTKRenderWindowInteractor__handleÚ
BindEventsÚ)_wxVTKRenderWindowInteractor__has_paintedÚ
_own_mouseÚ_mouse_capture_buttonÚCURSOR_ARROWÚCURSOR_SIZENESWÚCURSOR_SIZENWSEÚCURSOR_SIZENSÚCURSOR_SIZEWEÚCURSOR_SIZINGÚCURSOR_HANDÚCURSOR_CROSSÚ_cursor_map)r   ÚparentÚIDÚargsÚkwr   r   r   r    ÚlÚpr%   s               r   r   z$wxVTKRenderWindowInteractor.__init__^   s  € ð %&ˆÔ!ð
	Ü˜"˜X™,Ó'ˆFØ�8�ð	*Ø˜*‘~ˆHØ�:�ð	&Ø�f‘:ˆDØ�6�
ô —‘¤×!=Ñ!=Ñ=ˆð	Ø˜B˜w™KÑ'ˆEØ�7�ô �;‰;˜+Ò%ØˆAØˆAÙØ—‘˜”Ø—K‘K“M�ò ð �I‰IŒKÛ�Ø—‘�q•	ð ô ×Ñ Ò+ô Ÿ+™+×0Ñ0ÜŸ+™+×3Ñ3°QÜŸ+™+×5Ñ5°qÜŸ+™+×4Ñ4°aÜŸ+™+×6Ñ6¸ÜŸ+™+×8Ñ8ð:ˆJñ Ø×!Ñ!¤"§+¡+×":Ñ":Ô;ðÜ×"Ñ" 4¨°¸ÈØ).Ø.8ð #õ :ô ×Ñ˜t V¨R°XÀDØ%*ð ô ,ô 6Ó7ˆŒ
Ø�
‰
×"Ñ"¤OÓ$5Ô7Ø�
‰
×ÑÐ1°4×3CÑ3CÔDØ�
‰
×ÑÐ2°D×4EÑ4EÔFØ�
‰
×"Ñ"Ó$×0Ñ0Ð1EØ15×1HÑ1Hô	Jð	CØ�J‰J×&Ñ&Ó(×0Ñ0°·±¸T¿[¹[ÔIñ Ø�J‰J×&Ñ&Ó(×>Ñ>Ô@Ø�J‰J×&Ñ&Ó(×CÑCÔEàˆŒà�‰Ôð
 #ˆÔð  ˆŒà%&ˆÔ"ô  "Ÿ™Ü!Ÿ™Ü!×1Ñ1Ü!×1Ñ1Ü!×1Ñ1Ü!×1Ñ1Ü!×/Ñ/Ü!×/Ñ/Ü!×/Ñ/Ü!Ÿ~™~Ü "§¡ñˆÕøôS ò 	Ø‹Fð	ûô ò 	*Ü×)Ñ)‹Hð	*ûô ò 	&ð&Ø—~‘~Ó'‘øÜ!ò &Ü—~‘~’ð&ýð	&ûô ò 	Úð	ûôF ×&Ñ&ò ä×"Ñ" 4¨°¸ÈØ).ð #ô 0áð �Fúðûô. ò 	CØ�J‰J×&Ñ&Ó(×0Ñ0°°a±¸$¸q¹'×Bð	Cús�   ‰O. ›P  ¤P  ÁQ! ÆQ1 Ê>R* Ï.O=Ï<O=Ð PÐPÐ 	QÐ*P;Ð:QÐ;QÑQÑQÑQÑQÑ!	Q.Ñ-Q.Ñ12R'Ò&R'Ò*9S'Ó&S'c                 ób  — | j                  t        j                  | j                  «       | j                  t        j                  d„ «       | j                  t        j
                  | j                  «       | j                  t        j                  | j                  «       | j                  t        j                  | j                  «       | j                  t        j                  | j                  «       | j                  t        j                  | j                  «       | j                  t        j                  | j                  «       | j                  t        j                  | j                  «       | j                  t        j                  | j                   «       | j                  t        j"                  | j$                  «       | j                  t        j&                  | j(                  «       | j                  t        j*                  | j,                  «       | j                  t        j.                  | j0                  «       | j                  t        j2                  | j4                  «       t6        r<t9        t        d«      r+| j                  t        j:                  | j<                  «       yyy)zPBinds all the necessary events for navigation, sizing,
        drawing.
        c                  ó   — y ©Nr   )Úes    r   Ú<lambda>z8wxVTKRenderWindowInteractor.BindEvents.<locals>.<lambda>ë   s   € °Tr   ÚEVT_MOUSE_CAPTURE_LOSTN)ÚBindr
   Ú	EVT_PAINTÚOnPaintÚEVT_ERASE_BACKGROUNDÚEVT_RIGHT_DOWNÚOnButtonDownÚEVT_LEFT_DOWNÚEVT_MIDDLE_DOWNÚEVT_RIGHT_UPÚ
OnButtonUpÚEVT_LEFT_UPÚEVT_MIDDLE_UPÚEVT_MOUSEWHEELÚOnMouseWheelÚ
EVT_MOTIONÚOnMotionÚEVT_ENTER_WINDOWÚOnEnterÚEVT_LEAVE_WINDOWÚOnLeaveÚEVT_CHARÚ	OnKeyDownÚ
EVT_KEY_UPÚOnKeyUpÚEVT_SIZEÚOnSizeÚ_useCaptureÚhasattrrn   ÚOnMouseCaptureLostr   s    r   rV   z&wxVTKRenderWindowInteractor.BindEventsä   sš  € ð
 	�	‰	”"—,‘, §¡Ô-à�	‰	”"×)Ñ)©>Ô:ð 	�	‰	”"×#Ñ# T×%6Ñ%6Ô7Ø�	‰	”"×"Ñ" D×$5Ñ$5Ô6Ø�	‰	”"×$Ñ$ d×&7Ñ&7Ô8Ø�	‰	”"—/‘/ 4§?¡?Ô3Ø�	‰	”"—.‘. $§/¡/Ô2Ø�	‰	”"×"Ñ" D§O¡OÔ4Ø�	‰	”"×#Ñ# T×%6Ñ%6Ô7Ø�	‰	”"—-‘- §¡Ô/à�	‰	”"×%Ñ% t§|¡|Ô4Ø�	‰	”"×%Ñ% t§|¡|Ô4ð
 	�	‰	”"—+‘+˜tŸ~™~Ô.Ø�	‰	”"—-‘- §¡Ô.à�	‰	”"—+‘+˜tŸ{™{Ô+õ œ7¤2Ð'?Ô@Ø�I‰I”b×/Ñ/Ø×+Ñ+õ-ð Aˆ;r   c                 óÌ   — |dk(  r| j                   fd„S t        | j                   |«      rt        | j                   |«      S t        | j                  j
                  dz   |z   «      ‚)zQMakes the object behave like a
        vtkGenericRenderWindowInteractor.
        Ú__vtk__c                 ó   — | S rk   r   )Úts    r   rm   z9wxVTKRenderWindowInteractor.__getattr__.<locals>.<lambda>  s   € ©r   z has no attribute named )rJ   rŠ   Úgetattrr7   Ú	__class__r   )r   Úattrs     r   Ú__getattr__z'wxVTKRenderWindowInteractor.__getattr__	  sa   € ð �9ÒØ ŸJ™JÒ)Ð)Ü�T—Z‘Z Ô&Ü˜4Ÿ:™: tÓ,Ð,ä  §¡×!8Ñ!8Ø,ñ"-Ø/3ñ"4ó 5ð 5r   c                 ó\   — t        | «      | _        | j                  j                  dd«       y)z Creates a timer.
        r1   TN)r   Ú_timerÚStart©r   ÚobjÚevts      r   rM   z'wxVTKRenderWindowInteractor.CreateTimer  s$   € ô ! Ó&ˆŒØ�‰×Ñ˜"˜dÕ#r   c                  ó   — y)zDThe timer is a one shot timer so will expire automatically.
        r!   r   r—   s      r   rN   z(wxVTKRenderWindowInteractor.DestroyTimer  s   € ð r   c                 óŠ   — | j                   |j                  «          }t        j                  |«      }| j	                  |«       y)zOChange the wx cursor if the renderwindow's cursor was
        changed.
        N)rb   ÚGetCurrentCursorr
   ÚStockCursorÚ	SetCursor)r   r˜   r™   ÚcurÚcs        r   Ú_CursorChangedEventz/wxVTKRenderWindowInteractor._CursorChangedEvent   s7   € ð ×Ñ˜s×3Ñ3Ó5Ñ6ˆÜ�N‰N˜3ÓˆØ�‰�qÕr   c                 óF   — t        j                  | j                  ||«       y)zFCalled when the CursorChangedEvent fires on the render
        window.N)r
   Ú	CallAfterr¡   r—   s      r   r(   z.wxVTKRenderWindowInteractor.CursorChangedEvent(  s   € ô 	�‰�T×-Ñ-¨s°CÕ8r   c                 ól   — t        j                  t         j                  «      }| j                  |«       y)zHides the cursor.N)r
   r�   ÚCURSOR_BLANKrž   )r   r    s     r   Ú
HideCursorz&wxVTKRenderWindowInteractor.HideCursor0  s    € ä�N‰Nœ2Ÿ?™?Ó+ˆØ�‰�qÕr   c                 ó¾   — | j                   j                  «       }| j                  |j                  «          }t	        j
                  |«      }| j                  |«       y)zShows the cursor.N)rJ   rO   rb   rœ   r
   r�   rž   )r   ÚrwrŸ   r    s       r   Ú
ShowCursorz&wxVTKRenderWindowInteractor.ShowCursor5  sG   € à�Z‰Z×'Ñ'Ó)ˆØ×Ñ˜r×2Ñ2Ó4Ñ5ˆÜ�N‰N˜3ÓˆØ�‰�qÕr   c                 ó²   — d}	 t        j                  «       }|r-t        |«      }|j                  d«      sd|z   }d|dd ›dd›d�}|S # t        $ r Y |S w xY w)a}  Function to get X11 Display ID from WX and return it in a format
        that can be used by VTK Python.

        We query the X11 Display with a new call that was added in wxPython
        2.6.0.1.  The call returns a SWIG object which we can query for the
        address and subsequently turn into an old-style SWIG-mangled string
        representation to pass to VTK.
        NÚ0xÚ_r)   Úp_voidÚ )r
   ÚGetXDisplayÚhexÚ
startswithr7   )r   Úds     r   ÚGetDisplayIdz(wxVTKRenderWindowInteractor.GetDisplayId<  sr   € ð ˆð	3Ü—‘Ó ˆAñ Ü˜“F�à—|‘| DÔ)Ø˜q™�Aøð #$ A B¢%ªÐ2�àˆøô# ò 	ð ð ˆð#	ús   „A	 Á		AÁAc                 ó:   — t         r| j                  rd| _        yyy)zžThis is signalled when we lose mouse capture due to an
        external event, such as when a dialog box is shown.  See the
        wx documentation.
        FN)r‰   rX   ©r   Úevents     r   r‹   z.wxVTKRenderWindowInteractor.OnMouseCaptureLost]  s   € õ ˜4Ÿ?š?Ø#ˆD�Oð +ˆ;r   c                 ó2  — |j                  «        t        j                  | «      }| j                  j	                  «       j                  | j                  «       «       | j                  sŸ| j                  «       }|r5| j                  r)| j                  j	                  «       j                  |«       | j                  «       | _        | j                  j	                  «       j                  t        | j                  «      «       d| _	        | j                  «        y)zPHandles the wx.EVT_PAINT event for
        wxVTKRenderWindowInteractor.
        TN)ÚSkipr
   ÚPaintDCrJ   rO   rP   r6   rU   r³   rW   ÚSetDisplayIdÚ	GetHandleÚSetWindowInfoÚstrÚRender)r   r¶   Údcr²   s       r   rq   z#wxVTKRenderWindowInteractor.OnPainti  sÄ   € ð 	�
‰
Œä�Z‰Z˜Óˆð 	�
‰
×"Ñ"Ó$×,Ñ,¨T¯\©\«^Ô<ð �}Š}ð ×!Ñ!Ó#ˆAÙ�T×'Ò'Ø—
‘
×*Ñ*Ó,×9Ñ9¸!Ô<ð !ŸN™NÓ,ˆDŒMà�J‰J×&Ñ&Ó(×6Ñ6´s¸4¿=¹=Ó7IÔJð "&ˆDÔà�‰�r   c                 óN  — |j                  «        	 |j                  «       \  }}| j                  j                  ||«       | j                  j                  «        | j                  «        y#  |j                  «       j                  }|j                  «       j                  }Y ŒxY w)zOHandles the wx.EVT_SIZE event for
        wxVTKRenderWindowInteractor.
        N)r¸   r6   rQ   rR   rJ   rP   ÚConfigureEventr¾   )r   r¶   rQ   rR   s       r   rˆ   z"wxVTKRenderWindowInteractor.OnSize‹  s{   € ð 	�
‰
Œð	,Ø!ŸM™M›O‰MˆE�6ð 	�
‰
×Ñ˜5 &Ô)Ø�
‰
×!Ñ!Ô#ð 	�‰�øð	,Ø—M‘M“O×)Ñ)ˆEØ—]‘]“_×+Ñ+ŠFús   ’A, Á,6B$c           	      ó  — |j                  «        | j                  j                  |j                  «       |j	                  «       |j                  «       |j                  «       t        d«      dd«       | j                  j                  «        y)zQHandles the wx.EVT_MOTION event for
        wxVTKRenderWindowInteractor.
        r   N)	r¸   rJ   ÚSetEventInformationFlipYÚGetXÚGetYÚControlDownÚ	ShiftDownÚchrÚMouseMoveEventrµ   s     r   r~   z$wxVTKRenderWindowInteractor.OnMotionŸ  sb   € ð 	�
‰
Œà�
‰
×+Ñ+¨E¯J©J«L¸%¿*¹*»,Ø,1×,=Ñ,=Ó,?Ø,1¯O©OÓ,=Ü,/°«F°A°tô	=ð 	�
‰
×!Ñ!Õ#r   c           	      ó  — |j                  «        | j                  j                  |j                  «       |j	                  «       |j                  «       |j                  «       t        d«      dd«       | j                  j                  «        y)zWHandles the wx.EVT_ENTER_WINDOW event for
        wxVTKRenderWindowInteractor.
        r   N)	r¸   rJ   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   Ú
EnterEventrµ   s     r   r€   z#wxVTKRenderWindowInteractor.OnEnter¯  ób   € ð 	�
‰
Œà�
‰
×+Ñ+¨E¯J©J«L¸%¿*¹*»,Ø,1×,=Ñ,=Ó,?Ø�o‰oÓÜ�!‹f�a˜ô	ð 	�
‰
×ÑÕr   c           	      ó  — |j                  «        | j                  j                  |j                  «       |j	                  «       |j                  «       |j                  «       t        d«      dd«       | j                  j                  «        y)zWHandles the wx.EVT_LEAVE_WINDOW event for
        wxVTKRenderWindowInteractor.
        r   N)	r¸   rJ   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   Ú
LeaveEventrµ   s     r   r‚   z#wxVTKRenderWindowInteractor.OnLeave¾  rÌ   r   c           	      ód  — |j                  «        |j                  «       |j                  «       }}| j                  j	                  |j                  «       |j                  «       ||t        d«      dd«       d}|j                  «       r| j                  j                  «        d}nY|j                  «       r| j                  j                  «        d}n,|j                  «       r| j                  j                  «        d}t        r,| j                  sd| _        || _        | j#                  «        yyy)zbHandles the wx.EVT_LEFT/RIGHT/MIDDLE_DOWN events for
        wxVTKRenderWindowInteractor.
        r   NÚRightÚLeftÚMiddleT)r¸   rÆ   rÇ   rJ   rÃ   rÄ   rÅ   rÈ   Ú	RightDownÚRightButtonPressEventÚLeftDownÚLeftButtonPressEventÚ
MiddleDownÚMiddleButtonPressEventr‰   rX   rY   ÚCaptureMouse)r   r¶   ÚctrlÚshiftÚbuttons        r   rt   z(wxVTKRenderWindowInteractor.OnButtonDownÍ  së   € ð 	�
‰
Œà×'Ñ'Ó)¨5¯?©?Ó+<ˆeˆØ�
‰
×+Ñ+¨E¯J©J«L¸%¿*¹*»,Ø,0°%¼¸Q»ÀÀDô	Jð ˆØ�?‰?ÔØ�J‰J×,Ñ,Ô.Ø‰FØ�^‰^ÔØ�J‰J×+Ñ+Ô-Ø‰FØ×ÑÔØ�J‰J×-Ñ-Ô/ØˆFõ ˜tŸšØ"ˆDŒOØ)/ˆDÔ&Ø×ÑÕð  /ˆ;r   c           	      ó”  — |j                  «        d}|j                  «       rd}n%|j                  «       rd}n|j                  «       rd}t        r2| j
                  r&|| j                  k(  r| j                  «        d| _        |j                  «       |j                  «       }}| j                  j                  |j                  «       |j                  «       ||t        d«      dd«       |dk(  r| j                  j                  «        y|dk(  r| j                  j!                  «        y|dk(  r| j                  j#                  «        yy)z`Handles the wx.EVT_LEFT/RIGHT/MIDDLE_UP events for
        wxVTKRenderWindowInteractor.
        r   rÐ   rÑ   rÒ   FN)r¸   ÚRightUpÚLeftUpÚMiddleUpr‰   rX   rY   ÚReleaseMouserÆ   rÇ   rJ   rÃ   rÄ   rÅ   rÈ   ÚRightButtonReleaseEventÚLeftButtonReleaseEventÚMiddleButtonReleaseEvent)r   r¶   rÜ   rÚ   rÛ   s        r   rx   z&wxVTKRenderWindowInteractor.OnButtonUpñ  s  € ð 	�
‰
ŒàˆØ�=‰=Œ?Ø‰FØ�\‰\Œ^Ø‰FØ�^‰^ÔØˆFõ ˜4Ÿ?š?Ø˜×2Ñ2Ò2Ø×ÑÔØ#ˆDŒOà×'Ñ'Ó)¨5¯?©?Ó+<ˆeˆØ�
‰
×+Ñ+¨E¯J©J«L¸%¿*¹*»,Ø,0°%¼¸Q»ÀÀDô	Jð �WÒØ�J‰J×.Ñ.Õ0Ø�vÒØ�J‰J×-Ñ-Õ/Ø�xÒØ�J‰J×/Ñ/Õ1ð  r   c           	      ó€  — |j                  «        |j                  «       |j                  «       }}| j                  j	                  |j                  «       |j                  «       ||t        d«      dd«       |j                  «       dkD  r| j                  j                  «        y| j                  j                  «        y)zUHandles the wx.EVT_MOUSEWHEEL event for
        wxVTKRenderWindowInteractor.
        r   N)r¸   rÆ   rÇ   rJ   rÃ   rÄ   rÅ   rÈ   ÚGetWheelRotationÚMouseWheelForwardEventÚMouseWheelBackwardEvent)r   r¶   rÚ   rÛ   s       r   r|   z(wxVTKRenderWindowInteractor.OnMouseWheel  s‰   € ð 	�
‰
Œà×'Ñ'Ó)¨5¯?©?Ó+<ˆeˆØ�
‰
×+Ñ+¨E¯J©J«L¸%¿*¹*»,Ø,0°%¼¸Q»ÀÀDô	Jà×!Ñ!Ó# aÒ'Ø�J‰J×-Ñ-Õ/à�J‰J×.Ñ.Õ0r   c           	      ó¢  — |j                  «        |j                  «       |j                  «       }}|j                  «       d}}t	        d«      }|dk  rt	        |«      }| j
                  j                  «       \  }}| j
                  j                  |||||d|«       | j
                  j                  «        | j
                  j                  «        y)zSHandles the wx.EVT_KEY_DOWN event for
        wxVTKRenderWindowInteractor.
        Nr   é€   )
r¸   rÆ   rÇ   Ú
GetKeyCoderÈ   rJ   ÚGetEventPositionÚSetEventInformationÚKeyPressEventÚ	CharEvent)	r   r¶   rÚ   rÛ   ÚkeycodeÚkeysymÚkeyÚxÚys	            r   r„   z%wxVTKRenderWindowInteractor.OnKeyDown(  s­   € ð 	�
‰
Œà×'Ñ'Ó)¨5¯?©?Ó+<ˆeˆØ×*Ñ*Ó,¨d�ˆÜ�!‹fˆØ�SŠ=Ü�g“,ˆCð �z‰z×*Ñ*Ó,‰ˆˆ1Ø�
‰
×&Ñ& q¨!Ø'+¨U°C¸Ø'-ô	/ð 	�
‰
× Ñ Ô"Ø�
‰
×ÑÕr   c           	      ól  — |j                  «        |j                  «       |j                  «       }}|j                  «       d}}t	        d«      }|dk  rt	        |«      }| j
                  j                  |j                  «       |j                  «       |||d|«       | j
                  j                  «        y)zQHandles the wx.EVT_KEY_UP event for
        wxVTKRenderWindowInteractor.
        Nr   rê   )
r¸   rÆ   rÇ   rë   rÈ   rJ   rÃ   rÄ   rÅ   ÚKeyReleaseEvent)r   r¶   rÚ   rÛ   rð   rñ   rò   s          r   r†   z#wxVTKRenderWindowInteractor.OnKeyUpA  s‘   € ð 	�
‰
Œà×'Ñ'Ó)¨5¯?©?Ó+<ˆeˆØ×*Ñ*Ó,¨d�ˆÜ�!‹fˆØ�SŠ=Ü�g“,ˆCà�
‰
×+Ñ+¨E¯J©J«L¸%¿*¹*»,Ø,0°%¸¸aØ,2ô	4ð 	�
‰
×"Ñ"Õ$r   c                 ó6   — | j                   j                  «       S )z5Returns the render window (vtkRenderWindow).
        )rJ   rO   r   s    r   rO   z+wxVTKRenderWindowInteractor.GetRenderWindowU  s   € ð �z‰z×)Ñ)Ó+Ð+r   c                 ó  — d}| j                   s't        j                  | «      }|r|j                  «       }|�rQ| j                  rF| j                  | j                  «       k(  r)| j                  j                  «       j                  «        y| j                  «       rî| j                  rá| j                  j                  «       j                  t        | j                  «       «      «       | j                  «       }|r)| j                  j                  «       j                  |«       | j                  j                  «       j                  «        | j                  «       | _        | j                  j                  «       j                  «        yyyy)z2Actually renders the VTK scene on screen.
        r!   N)r2   r
   ÚGetTopLevelParentÚ	IsEnabledrU   r»   rJ   rO   r¾   rW   ÚSetNextWindowInfor½   r³   rº   ÚWindowRemap)r   ÚRenderAllowedÚ	topParentr²   s       r   r¾   z"wxVTKRenderWindowInteractor.RenderZ  s)  € ð ˆà×(Ò(ô ×,Ñ,¨TÓ2ˆIÙð !*× 3Ñ 3Ó 5�âØ�}Š} §¡°$·.±.Ó2BÒ!BØ—
‘
×*Ñ*Ó,×3Ñ3Õ5à—‘Ô! d×&8Ò&8ð —
‘
×*Ñ*Ó,×>Ñ>Ü˜Ÿ™Ó(Ó)ô+ð ×%Ñ%Ó'�ÙØ—J‘J×.Ñ.Ó0×=Ñ=¸aÔ@ð —
‘
×*Ñ*Ó,×8Ñ8Ô:ð !%§¡Ó 0�”Ø—
‘
×*Ñ*Ó,×3Ñ3Õ5ð! '9Ð!ð	 r   c                 ó$   — t        |«      | _        y)a-  Change value of __RenderWhenDisabled ivar.

        If __RenderWhenDisabled is false (the default), this widget will not
        call Render() on the RenderWindow if the top level frame (i.e. the
        containing frame) has been disabled.

        This prevents recursive rendering during wx.SafeYield() calls.
        wx.SafeYield() can be called during the ProgressMethod() callback of
        a VTK object to have progress bars and other GUI elements updated -
        it does this by disabling all windows (disallowing user-input to
        prevent re-entrancy of code) and then handling all outstanding
        GUI events.

        However, this often triggers an OnPaint() method for wxVTKRWIs,
        resulting in a Render(), resulting in Update() being called whilst
        still in progress.
        N)r3   r2   )r   ÚnewValues     r   ÚSetRenderWhenDisabledz1wxVTKRenderWindowInteractor.SetRenderWhenDisabled~  s   € ô$ %)¨£NˆÕ!r   N)r   r   r   r   Ú
USE_STEREOr   rV   r“   rM   rN   r¡   r(   r¦   r©   r³   r‹   rq   rˆ   r~   r€   r‚   rt   rx   r|   r„   r†   rO   r¾   r  r   r   r   r   r   N   sŽ   „ ñð €JòDòL"-òJ
5ò$òò
ò9òò
òòB
$ò òDò($ò  ò ò! òH#2òL1ò"ò2%ò(,ò
"6óH3r   r   c                  ó  — ddl m}  ddlm}m}m} ddl}ddl}t        j                  d«      }t        j                  dddd¬	«      }t        |d«      }t        j                  t        j                  «      }|j                  |d
t        j                  «       |j!                  |«       |j#                  «        |j%                  d
«       |j'                  d|fd„«        |«       }	|j)                  «       j+                  |	«        | «       }
|
j-                  d«        |«       }|j/                  |
j1                  «       «        |«       }|j3                  |«       |	j5                  |«       |j7                  «        |j9                  «        y)z(Like it says, just a simple example
    r   )ÚvtkConeSource)ÚvtkActorÚvtkPolyDataMapperÚvtkRendererNFéÿÿÿÿr   )é�  r	  )r   r!   Ú	ExitEventc                 ó"   — |j                  «       S rk   )ÚClose)Úorl   Úfs      r   rm   z8wxVTKRenderWindowInteractorConeExample.<locals>.<lambda>³  s
   € ¸¿¹¼	r   r/   )Úvtkmodules.vtkFiltersSourcesr  Úvtkmodules.vtkRenderingCorer  r  r  Úvtkmodules.vtkRenderingOpenGL2Úvtkmodules.vtkInteractionStyler
   ÚAppÚFramer   ÚBoxSizerÚVERTICALÚAddÚEXPANDÚSetSizerÚLayoutÚEnablerL   rO   ÚAddRendererÚSetResolutionÚSetInputConnectionÚGetOutputPortÚ	SetMapperÚAddActorr?   ÚMainLoop)r  r  r  r  Ú
vtkmodulesÚappÚframeÚwidgetÚsizerÚrenÚconeÚ
coneMapperÚ	coneActors                r   Ú&wxVTKRenderWindowInteractorConeExampler,  ”  s(  € õ ;ßTÑTã)Û)ô �&‰&�‹-€Cô �H‰H�T˜2Ð<À9ÔM€EÜ(¨°Ó3€FÜ�K‰KœŸ™Ó$€EØ	‡I�Iˆf�aœŸ™Ô#Ø	‡N�N�5ÔØ	‡L�L„Nð ‡M�M�!Ôà
×Ñ�{°Ò$AÔBá
‹-€CØ
×ÑÓ×(Ñ(¨Ô-á‹?€DØ×Ñ�qÔá"Ó$€JØ×!Ñ! $×"4Ñ"4Ó"6Ô7á“
€IØ×Ñ˜
Ô#à‡L�L�Ôð 
‡J�J„Là‡L�L…Nr   Ú__main__)r   ÚmathÚosÚsysr
   r  r   Úvtkmodules.vtkRenderingUIr   ÚWindowr@   r;   Úwx.glcanvasrA   r"   r‰   r   r   r   r,  r   r   r   r   Ú<module>r4     s“   ðñð÷* Ó Û 	Ý 7Ý Fð �I‰I€	Ø‡;�;�+ÒÛØ—‘×$Ñ$€Ið
 �{‰{˜kÑ)€ô
�—‘ô ô$B	3 )ô B	3òL2ðh ˆzÒÙ*Õ,ð r   