Ë
    ¯·g	(  ã                   óÎ   — d Z ddlZddlZ ej                  d«       ddlZddlmZ ddlZddlmZ ddl	m
Z
  G d„ dej                  j                  «      Zd	„ Zed
k(  r e«        yy)at  
Description:

  Provides a pyGtk vtkRenderWindowInteractor widget.  This embeds a
  vtkRenderWindow inside a GTK widget and uses the
  vtkGenericRenderWindowInteractor for the event handling.  This is
  similar to GtkVTKRenderWindowInteractor.py.

  The extensions here allow the use of gtkglext rather than gtkgl and
  pygtk-2 rather than pygtk-0.  It requires pygtk-2.0.0 or later.

  There is a working example at the bottom.

Credits:

  John Hunter <jdhunter@ace.bsd.uchicago.edu> developed and tested
  this code based on VTK's GtkVTKRenderWindow.py and extended it to
  work with pygtk-2.0.0.

License:

  VTK license.

é    Nz2.0)Úgdk)ÚvtkRenderWindow)Ú vtkGenericRenderWindowInteractorc                   óœ   — 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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)Ú!GtkGLExtVTKRenderWindowInteractora   Embeds a vtkRenderWindow into a pyGTK widget and uses
    vtkGenericRenderWindowInteractor for the event handling.  This
    class embeds the RenderWindow correctly.  A __getattr__ hook is
    provided that makes the class behave like a
    vtkGenericRenderWindowInteractor.c                 ó|  — t         j                  j                  j                  | «       | j	                  t         j
                  «       t        «       | _        d| _        d| _	        t        «       | _        | j                  j                  | j                  «       | j                  j                  «       j                  «        | j                  j                  d| j                   «       | j                  j                  d| j"                  «       | j%                  «        | j'                  t         j(                  «       y )Nr   ÚCreateTimerEventÚDestroyTimerEvent)ÚgtkÚgtkglÚDrawingAreaÚ__init__Úset_double_bufferedÚFALSEr   Ú_RenderWindowÚ+_GtkGLExtVTKRenderWindowInteractor__CreatedÚ_ActiveButtonr   Ú_IrenÚSetRenderWindowÚGetInteractorStyleÚ SetCurrentStyleToTrackballCameraÚAddObserverÚCreateTimerÚDestroyTimerÚConnectSignalsÚ	set_flagsÚ	CAN_FOCUS©ÚselfÚargss     úPlib/python3.12/site-packages/vtkmodules/gtk/GtkGLExtVTKRenderWindowInteractor.pyr   z*GtkGLExtVTKRenderWindowInteractor.__init__+   s×   € Ü�	‰	×Ñ×&Ñ& tÔ,à× Ñ ¤§¡Ô+ä,Ó.ˆÔð ˆŒØˆÔä5Ó7ˆŒ
Ø�
‰
×"Ñ" 4×#5Ñ#5Ô6Ø�
‰
×%Ñ%Ó'×HÑHÔJØ�
‰
×ÑÐ1°4×3CÑ3CÔDØ�
‰
×ÑÐ2°D×4EÑ4EÔFØ×ÑÔð 	�‰”s—}‘}Õ%ó    c                 óþ   — t         j                  j                  j                  | ||«       | j                  j                  ||«       | j                  j                  ||«       | j                  j                  «        y ©N)r   r   r   Úset_size_requestr   ÚSetSizer   ÚConfigureEvent)r   ÚwÚhs      r!   r%   z2GtkGLExtVTKRenderWindowInteractor.set_size_request@   sX   € Ü�	‰	×Ñ×.Ñ.¨t°Q¸Ô:Ø×Ñ×"Ñ" 1 aÔ(Ø�
‰
×Ñ˜1˜aÔ Ø�
‰
×!Ñ!Õ#r"   c                 ó`  — | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j
                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d| j                  «       | j                  d	| j                  «       | j                  d
| j                  «       | j                  t        j                  t        j                  z  t        j                  z  t        j                   z  t        j"                  z  t        j$                  z  t        j&                  z  t        j(                  z  «       y )NÚrealizeÚexpose_eventÚconfigure_eventÚbutton_press_eventÚbutton_release_eventÚmotion_notify_eventÚenter_notify_eventÚleave_notify_eventÚkey_press_eventÚdelete_event)ÚconnectÚ	OnRealizeÚOnExposeÚOnConfigureÚOnButtonDownÚ
OnButtonUpÚOnMouseMoveÚOnEnterÚOnLeaveÚ
OnKeyPressÚ	OnDestroyÚ
add_eventsr   ÚEXPOSURE_MASKÚBUTTON_PRESS_MASKÚBUTTON_RELEASE_MASKÚKEY_PRESS_MASKÚPOINTER_MOTION_MASKÚPOINTER_MOTION_HINT_MASKÚENTER_NOTIFY_MASKÚLEAVE_NOTIFY_MASK©r   s    r!   r   z0GtkGLExtVTKRenderWindowInteractor.ConnectSignalsF   s@  € Ø�‰�Y §¡Ô/Ø�‰�^ T§]¡]Ô3Ø�‰Ð&¨×(8Ñ(8Ô9Ø�‰Ð)¨4×+<Ñ+<Ô=Ø�‰Ð+¨T¯_©_Ô=Ø�‰Ð*¨D×,<Ñ,<Ô=Ø�‰Ð)¨4¯<©<Ô8Ø�‰Ð)¨4¯<©<Ô8Ø�‰Ð&¨¯©Ô8Ø�‰�^ T§^¡^Ô4Ø�‰œ×)Ñ)¬3×+@Ñ+@Ñ@Ü×/Ñ/ñ0ä×*Ñ*ñ+ô ×/Ñ/ñ0ô ×4Ñ4ñ	5ô
 ×-Ñ-ñ.ô
 14×0EÑ0EñFõ 	Gr"   c                 óÌ   — |dk(  r| j                   fd„S t        | j                   |«      rt        | j                   |«      S t        | j                  j
                  dz   |z   «      ‚)zGMakes the object behave like a
        vtkGenericRenderWindowInteractorÚ__vtk__c                 ó   — | S r$   © )Úts    r!   Ú<lambda>z?GtkGLExtVTKRenderWindowInteractor.__getattr__.<locals>.<lambda>\   s   € ©r"   z has no attribute named )r   ÚhasattrÚgetattrÚAttributeErrorÚ	__class__Ú__name__)r   Úattrs     r!   Ú__getattr__z-GtkGLExtVTKRenderWindowInteractor.__getattr__X   sa   € ð �9ÒØ ŸJ™JÒ)Ð)Ü�T—Z‘Z Ô&Ü˜4Ÿ:™: tÓ,Ð,ä  §¡×!8Ñ!8Ø,ñ"-Ø/3ñ"4ó 5ð 5r"   c                 óX   — t        j                  d| j                  j                  «       y )Né
   )r   Útimeout_addr   Ú
TimerEvent©r   ÚobjÚevents      r!   r   z-GtkGLExtVTKRenderWindowInteractor.CreateTimerc   s   € Ü�‰˜˜DŸJ™J×1Ñ1Õ2r"   c                  ó   — y)z;The timer is a one shot timer so will expire automatically.é   rM   r[   s      r!   r   z.GtkGLExtVTKRenderWindowInteractor.DestroyTimerf   s   € àr"   c                 ó   — | j                   S r$   )r   rI   s    r!   ÚGetRenderWindowz1GtkGLExtVTKRenderWindowInteractor.GetRenderWindowj   s   € Ø×!Ñ!Ð!r"   c                 óR   — | j                   r| j                  j                  «        y y r$   )r   r   ÚRenderrI   s    r!   rc   z(GtkGLExtVTKRenderWindowInteractor.Renderm   s    € Ø�>Š>Ø×Ñ×%Ñ%Õ'ð r"   c                 óp  — | j                   dk(  r˜| j                  «        t        j                  dk(  r*t	        | j
                  j                  j                  «      }n)t	        | j
                  j                  j                  «      }| j                  j                  |«       d| _         t        j                  S )Nr   Úwin32r_   )r   r+   ÚsysÚplatformÚstrÚwidgetÚwindowÚhandleÚxidr   ÚSetWindowInfor   ÚTRUE)r   r    Úwin_ids      r!   r6   z+GtkGLExtVTKRenderWindowInteractor.OnRealizeq   s{   € Ø�>‰>˜QÒà�L‰LŒNÜ�|‰|˜WÒ$Ü˜TŸ[™[×/Ñ/×6Ñ6Ó7‘ä˜TŸ[™[×/Ñ/×3Ñ3Ó4�à×Ñ×,Ñ,¨VÔ4àˆDŒNÜ�x‰xˆr"   c                 óä   — || _         | j                  j                  |j                  |j                  «       | j                  j                  «        | j                  «        t        j                  S r$   )	ri   r   r&   ÚwidthÚheightr'   rc   r   rn   )r   ri   r]   s      r!   r8   z-GtkGLExtVTKRenderWindowInteractor.OnConfigure   sG   € ØˆŒØ�
‰
×Ñ˜5Ÿ;™;¨¯©Ô5Ø�
‰
×!Ñ!Ô#Ø�‰ŒÜ�x‰xˆr"   c                 óB   — | j                  «        t        j                  S r$   )rc   r   rn   r   s     r!   r7   z*GtkGLExtVTKRenderWindowInteractor.OnExpose†   s   € Ø�‰ŒÜ�x‰xˆr"   Nc                 óf   — | j                  «        | `| j                  «        t        j                  S r$   )Úhider   Údestroyr   rn   )r   r]   s     r!   r?   z+GtkGLExtVTKRenderWindowInteractor.OnDestroyŠ   s#   € Ø�	‰	ŒØÐØ�‰ŒÜ�x‰xˆr"   c                 óÔ   — d\  }}|j                   t        j                  z  t        j                  k(  rd}|j                   t        j                  z  t        j                  k(  rd}||fS )N)r   r   r_   )Ústater   ÚCONTROL_MASKÚ
SHIFT_MASK)r   r]   ÚctrlÚshifts       r!   Ú_GetCtrlShiftz/GtkGLExtVTKRenderWindowInteractor._GetCtrlShift�   sU   € Ø‰ˆˆeØ�[‰[œ3×+Ñ+Ñ+´×0@Ñ0@Ò@ØˆDØ�[‰[œ3Ÿ>™>Ñ)¬c¯n©nÒ<ØˆEØ�Uˆ{Ðr"   c           	      óü  — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       |j
                  }|dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S t        j                  S )zMouse button pressed.r   r_   Né   é   )Úget_pointerr}   r   ÚSetEventInformationFlipYÚchrÚbuttonÚRightButtonPressEventr   rn   ÚLeftButtonPressEventÚMiddleButtonPressEventr   ©r   Úwidr]   Úmr{   r|   r„   s          r!   r9   z.GtkGLExtVTKRenderWindowInteractor.OnButtonDown˜   sÄ   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à—‘ˆØ�QŠ;Ø�J‰J×,Ñ,Ô.Ü—8‘8ˆOØ�qŠ[Ø�J‰J×+Ñ+Ô-Ü—8‘8ˆOØ�qŠ[Ø�J‰J×-Ñ-Ô/Ü—8‘8ˆOä—9‘9Ðr"   c           	      óü  — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       |j
                  }|dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S |dk(  r*| j                  j                  «        t        j                  S t        j                  S )zMouse button released.r   r_   Nr   r€   )r�   r}   r   r‚   rƒ   r„   ÚRightButtonReleaseEventr   rn   ÚLeftButtonReleaseEventÚMiddleButtonReleaseEventr   rˆ   s          r!   r:   z,GtkGLExtVTKRenderWindowInteractor.OnButtonUp«   sÄ   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à—‘ˆØ�QŠ;Ø�J‰J×.Ñ.Ô0Ü—8‘8ˆOØ�qŠ[Ø�J‰J×-Ñ-Ô/Ü—8‘8ˆOØ�qŠ[Ø�J‰J×/Ñ/Ô1Ü—8‘8ˆOä�y‰yÐr"   c           	      óþ   — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       | j                  j                  «        t        j                  S )zMouse has moved.r   r_   N)r�   r}   r   r‚   rƒ   ÚMouseMoveEventr   rn   ©r   r‰   r]   rŠ   r{   r|   s         r!   r;   z-GtkGLExtVTKRenderWindowInteractor.OnMouseMove¾   sj   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à�
‰
×!Ñ!Ô#Ü�x‰xˆr"   c           	      ó  — | j                  «        | j                  «       }| j                  |«      \  }}| j                  j	                  |d   |d   ||t        d«      dd«       | j                  j                  «        t        j                  S )zEntering the vtkRenderWindow.r   r_   N)	Ú
grab_focusr�   r}   r   r‚   rƒ   Ú
EnterEventr   rn   r‘   s         r!   r<   z)GtkGLExtVTKRenderWindowInteractor.OnEnterÇ   st   € à�‰ÔØ×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à�
‰
×ÑÔÜ�x‰xˆr"   c           	      óþ   — | j                  «       }| j                  |«      \  }}| j                  j                  |d   |d   ||t	        d«      dd«       | j                  j                  «        t        j                  S )zLeaving the vtkRenderWindow.r   r_   N)r�   r}   r   r‚   rƒ   Ú
LeaveEventr   rn   r‘   s         r!   r=   z)GtkGLExtVTKRenderWindowInteractor.OnLeaveÑ   sj   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eÜ,/°«F°A°tô	=à�
‰
×ÑÔÜ�x‰xˆr"   c           	      ó†  — | j                  «       }| j                  |«      \  }}|j                  |j                  }}t	        d«      }|dk  rt	        |«      }| j
                  j                  |d   |d   |||d|«       | j
                  j                  «        | j
                  j                  «        t        j                  S )zKey pressed.r   é   r_   )r�   r}   ÚkeyvalÚstringrƒ   r   r‚   ÚKeyPressEventÚ	CharEventr   rn   ©	r   r‰   r]   rŠ   r{   r|   ÚkeycodeÚkeysymÚkeys	            r!   r>   z,GtkGLExtVTKRenderWindowInteractor.OnKeyPressÚ   s    € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØŸ,™,¨¯©�ˆÜ�!‹fˆØ�SŠ=Ü�g“,ˆCØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eØ,/°°Fô	<à�
‰
× Ñ Ô"Ø�
‰
×ÑÔÜ�x‰xˆr"   c           	      óR  — | j                  «       }| j                  |«      \  }}|j                  |j                  }}t	        d«      }|dk  rt	        |«      }| j
                  j                  |d   |d   |||d|«       | j
                  j                  «        t        j                  S )zKey released.r   r˜   r_   )
r�   r}   r™   rš   rƒ   r   r‚   ÚKeyReleaseEventr   rn   r�   s	            r!   ÚOnKeyReleasez.GtkGLExtVTKRenderWindowInteractor.OnKeyReleaseè   s�   € à×ÑÓˆØ×(Ñ(¨Ó/‰ˆˆeØŸ,™,¨¯©�ˆÜ�!‹fˆØ�SŠ=Ü�g“,ˆCØ�
‰
×+Ñ+¨A¨a©D°!°A±$¸¸eØ,/°°Fô	<à�
‰
×"Ñ"Ô$Ü�x‰xˆr"   c                 óR   — | j                   r| j                  j                  «        y y r$   )r   r   Ú
InitializerI   s    r!   r¥   z,GtkGLExtVTKRenderWindowInteractor.Initializeõ   s   € Ø�>Š>Ø�J‰J×!Ñ!Õ#ð r"   c                 ó:   — | j                   j                  |«       y r$   )r   Ú	SetPicker©r   Úpickers     r!   r§   z+GtkGLExtVTKRenderWindowInteractor.SetPickerù   s   € Ø�
‰
×Ñ˜VÕ$r"   c                 ó6   — | j                   j                  «       S r$   )r   Ú	GetPickerr¨   s     r!   r«   z+GtkGLExtVTKRenderWindowInteractor.GetPickerü   s   € Ø�z‰z×#Ñ#Ó%Ð%r"   r$   )rT   Ú
__module__Ú__qualname__Ú__doc__r   r%   r   rV   r   r   ra   rc   r6   r8   r7   r?   r}   r9   r:   r;   r<   r=   r>   r£   r¥   r§   r«   rM   r"   r!   r   r   #   s{   „ ñ)ò&ò*$òGò$	5ò3òò"ò(òòòóòòò&ò&òòòòò$ò%ó&r"   r   c                  óÞ  — ddl m}  ddlm}m}m} dd l}dd l}t        j                  t        j                  «      }|j                  d«       |j                  dt        j                  «       |j                  dt        j                  «       |j                  d«       t        j                  d¬	«      }|j!                  |«       |j#                  «        t%        «       }|j'                  d
d
«       |j)                  |«       |j#                  «        |j+                  «        |j-                  «        |j/                  ddd„«        | «       }|j1                  d«        |«       }	|	j3                  |j5                  «       «        |«       }
|
j7                  |	«       |
j9                  «       j;                  ddd«        |«       }|j=                  «       j?                  |«       |jA                  |
«       t        jB                  d«      }|j                  dt        j                  «       |j)                  |«       |j#                  «        |j#                  «        t        jD                  «        y )Nr   )ÚvtkConeSource)ÚvtkActorÚvtkPolyDataMapperÚvtkRendererzA GtkVTKRenderWindow Demo!rv   r4   rX   r   )Úspacingi�  Ú	ExitEventc                 ó   — |S r$   rM   )ÚoÚeÚxs      r!   rO   zmain.<locals>.<lambda>  s   € ±Qr"   éP   g      à?g      ð?zQuit!Úclickedr$   )#Úvtkmodules.vtkFiltersSourcesr°   Úvtkmodules.vtkRenderingCorer±   r²   r³   Úvtkmodules.vtkRenderingOpenGL2Úvtkmodules.vtkInteractionStyler   ÚWindowÚWINDOW_TOPLEVELÚ	set_titler5   ÚmainquitÚset_border_widthÚVBoxÚaddÚshowr   r%   Ú
pack_startr¥   ÚStartr   ÚSetResolutionÚSetInputConnectionÚGetOutputPortÚ	SetMapperÚGetPropertyÚSetColorra   ÚAddRendererÚAddActorÚButtonÚmainloop)r°   r±   r²   r³   Ú
vtkmodulesrj   ÚvboxÚgvtkÚconeÚ
coneMapperÚ	coneActorÚrenÚquits                r!   ÚmainrÜ      s»  € Ý:ßTÑTã)Û)ô �Z‰Zœ×+Ñ+Ó,€FØ
×ÑÐ1Ô2Ø
‡N�N�9œcŸl™lÔ+Ø
‡N�N�>¤3§<¡<Ô0Ø
×Ñ˜BÔô �8‰8˜AÔ€DØ
‡J�JˆtÔØ‡I�I„Kô -Ó.€Dà×Ñ˜#˜sÔ#Ø‡O�O�DÔØ‡I�I„KØ‡O�OÔØ‡J�J„Là×Ñ�[Ò"6Ô7ñ ‹?€DØ×Ñ�rÔÙ"Ó$€JØ×!Ñ! $×"4Ñ"4Ó"6Ô7á“
€IØ×Ñ˜
Ô#Ø×ÑÓ×$Ñ$ S¨#¨sÔ3Ù
‹-€CØ×ÑÓ×&Ñ& sÔ+Ø‡L�L�Ôô �:‰:�gÓ€DØ‡L�L�œCŸL™LÔ)Ø‡O�O�DÔØ‡I�I„Kð ‡K�K„MÜ‡L�L…Nr"   Ú__main__)r®   rf   ÚpygtkÚrequirer   r   Ú	gtk.gtkglr½   r   Úvtkmodules.vtkRenderingUIr   r   r   r   rÜ   rT   rM   r"   r!   Ú<module>râ      sb   ðñó2 Û Ø €‡�ˆeÔ Û 
Ý Û Ý 7Ý FôZ&¨¯	©	×(=Ñ(=ô Z&òz3ðl ˆzÒÙ…Fð r"   