
    +j'                         d Z ddlZddlZddlZddlmZ ddlZ G d dej                  Zd Z	e
dk    r e	             dS dS )aj  
Description:

  Provides a pyGtk vtkRenderWindowInteractor widget.  This embeds a
  vtkRenderWindow inside a GTK widget and uses the
  vtkGenericRenderWindowInteractor for the event handling.  This is
  based on vtkTkRenderWindow.py.

  The class uses the gtkgl.GtkGLArea widget (gtkglarea).  This avoids
  a lot of problems with flicker.

  There is a working example at the bottom.

Created by Prabhu Ramachandran, April 2002.

Bugs:

  (*) There is a focus related problem.  Tkinter has a focus object
  that handles focus events.  I don't know of an equivalent object
  under GTK.  So, when an 'enter_notify_event' is received on the
  GtkVTKRenderWindow I grab the focus but I don't know what to do when
  I get a 'leave_notify_event'.

  (*) Will not work under Win32 because it uses the XID of a window in
  OnRealize.  Suggestions to fix this will be appreciated.

    N) 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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S )GtkVTKRenderWindowInteractora   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          |          }t          j        t          j        f}|                    d|            |                    d|           t          t          j        j        |           t                      | _	        d| _
        d| _        t                      | _        | j                            | j	                   | j                            d| j                   | j                            d| j                   |                                  |                     t(          j                   |                     dd           d S )Nr      CreateTimerEventDestroyTimerEventi,  )listgtkglRGBADOUBLEBUFFERinsertapply	GtkGLArea__init__vtkRenderWindow_RenderWindow&_GtkVTKRenderWindowInteractor__Created_ActiveButtonr   _IrenSetRenderWindowAddObserverCreateTimerDestroyTimerConnectSignals	set_flagsgtk	CAN_FOCUS	set_usize)selfargslattrs       e/DATA/AppData/hermes/venv/lib/python3.11/site-packages/vtkmodules/gtk/GtkVTKRenderWindowInteractor.pyr   z%GtkVTKRenderWindowInteractor.__init__*   s   JJ
E./	D	Deo&***,.. 577

""4#5666
143CDDD
2D4EFFF 	s}%%%sC         c                     t           j                            | ||           | j                            ||           | j                            ||           | j                                         d S N)r   r   r   r   SetSizer   ConfigureEvent)r    whs      r$   r   z&GtkVTKRenderWindowInteractor.set_usizeB   sg    !!$1---""1a(((
1a   
!!#####r%   c                    |                      d| j                   |                      d| j                   |                      d| j                   |                      d| j                   |                      d| j                   |                      d| j                   |                      d| j                   |                      d| j                   |                      d	| j	                   |                      d
| j
                   |                     t          j        t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          j        z  t          j        z             d S )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_eventsGDK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   z+GtkVTKRenderWindowInteractor.ConnectSignalsH   se   Y///^T]333&(8999)4+<===+T_===*D,<===)4<888)4<888&888^T^444)3+@@/0*+ /0 4	5
 -.
 140EF 	G 	G 	G 	G 	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:GtkVTKRenderWindowInteractor.__getattr__.<locals>.<lambda>^   s     r%   z has no attribute named )r   hasattrgetattrAttributeError	__class____name__)r    r#   s     r$   __getattr__z(GtkVTKRenderWindowInteractor.__getattr__Z   so     9 J))))TZ&& 	54:t,,, !8,"-/3"4 5 5 5r%   c                 D    t          j        d| j        j                   d S )N
   )r   timeout_addr   
TimerEventr    objevents      r$   r   z(GtkVTKRenderWindowInteractor.CreateTimere   s    DJ122222r%   c                     dS )z;The timer is a one shot timer so will expire automatically.r   rP   r]   s      r$   r   z)GtkVTKRenderWindowInteractor.DestroyTimerh   s    qr%   c                     | j         S r'   )r   rL   s    r$   GetRenderWindowz,GtkVTKRenderWindowInteractor.GetRenderWindowl   s    !!r%   c                 J    | j         r| j                                         d S d S r'   )r   r   RenderrL   s    r$   rd   z#GtkVTKRenderWindowInteractor.Rendero   s1    > 	(%%'''''	( 	(r%   c                    | j         dk    rt|                                  t          |                                 j                  }| j                            |           | j                                         d| _         t          j
        S Nr   r   )r   r-   str
get_windowxidr   SetWindowInfor   
Initializer   TRUE)r    r!   win_ids      r$   r8   z&GtkVTKRenderWindowInteractor.OnRealizes   so    >QLLNNN**.//F,,V444J!!###DNxr%   Nc                    | j                                         }|j        |d         k    s|j        |d         k    r>| j                            |j        |j                   | j                                         t          j        S rf   )	r   GetSizewidthheightr   r(   r)   r   rl   )r    widr_   szs       r$   r:   z(GtkVTKRenderWindowInteractor.OnConfigure}   sn    ''))K2a5  elbe&;&;Ju{EL999J%%'''xr%   c                 B    |                                   t          j        S r'   )rd   r   rl   )r    r!   s     r$   r9   z%GtkVTKRenderWindowInteractor.OnExpose   s    xr%   c                 n    |                                   | `|                                  t          j        S r'   )hider   destroyr   rl   )r    r_   s     r$   rA   z&GtkVTKRenderWindowInteractor.OnDestroy   s)    		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   )staterC   CONTROL_MASK
SHIFT_MASK)r    r_   ctrlshifts       r$   _GetCtrlShiftz*GtkVTKRenderWindowInteractor._GetCtrlShift   sM    e[3++0@@@D[3>)cn<<EU{r%   c           	         |                                  }|                     |          \  }}| j                            |d         |d         ||t	          d          dd           |j        }|dk    r%| j                                         t          j        S |dk    r%| j        	                                 t          j        S |dk    r%| j        
                                 t          j        S t          j        S )zMouse button pressed.r   r   N      )get_pointerr~   r   SetEventInformationFlipYchrbuttonRightButtonPressEventr   rl   LeftButtonPressEventMiddleButtonPressEventFALSEr    rr   r_   mr|   r}   r   s          r$   r;   z)GtkVTKRenderWindowInteractor.OnButtonDown   s    ((//e
++AaD!A$e,/FFAt	= 	= 	=Q;;J,,...8Oq[[J++---8Oq[[J--///8O9r%   c           	         |                                  }|                     |          \  }}| j                            |d         |d         ||t	          d          dd           |j        }|dk    r%| j                                         t          j        S |dk    r%| j        	                                 t          j        S |dk    r%| j        
                                 t          j        S t          j        S )zMouse button released.r   r   Nr   r   )r   r~   r   r   r   r   RightButtonReleaseEventr   rl   LeftButtonReleaseEventMiddleButtonReleaseEventr   r   s          r$   r<   z'GtkVTKRenderWindowInteractor.OnButtonUp   s    ((//e
++AaD!A$e,/FFAt	= 	= 	=Q;;J..0008Oq[[J--///8Oq[[J//1118Oyr%   c           	         |                                  }|                     |          \  }}| j                            |d         |d         ||t	          d          dd           | j                                         t          j        S )zMouse has moved.r   r   N)r   r~   r   r   r   MouseMoveEventr   rl   r    rr   r_   r   r|   r}   s         r$   r=   z(GtkVTKRenderWindowInteractor.OnMouseMove   s|    ((//e
++AaD!A$e,/FFAt	= 	= 	=
!!###xr%   c           	      >   |                                   |                                 }|                     |          \  }}| j                            |d         |d         ||t          d          dd           | j                                         t          j        S )zEntering the vtkRenderWindow.r   r   N)	
grab_focusr   r~   r   r   r   
EnterEventr   rl   r   s         r$   r>   z$GtkVTKRenderWindowInteractor.OnEnter   s    ((//e
++AaD!A$e,/FFAt	= 	= 	=
xr%   c           	         |                                  }|                     |          \  }}| j                            |d         |d         ||t	          d          dd           | j                                         t          j        S )zLeaving the vtkRenderWindow.r   r   N)r   r~   r   r   r   
LeaveEventr   rl   r   s         r$   r?   z$GtkVTKRenderWindowInteractor.OnLeave   s|    ((//e
++AaD!A$e,/FFAt	= 	= 	=
xr%   c           	         |                                  }|                     |          \  }}|j        |j        }}t	          d          }|dk     rt	          |          }| j                            |d         |d         |||d|           | j                                         | j                                         t          j
        S )zKey pressed.r      r   )r   r~   keyvalstringr   r   r   KeyPressEvent	CharEventr   rl   	r    rr   r_   r   r|   r}   keycodekeysymkeys	            r$   r@   z'GtkVTKRenderWindowInteractor.OnKeyPress   s    ((//e,!ffS==g,,C
++AaD!A$e,/F	< 	< 	<
  """
xr%   c           	      `   |                                  }|                     |          \  }}|j        |j        }}t	          d          }|dk     rt	          |          }| j                            |d         |d         |||d|           | j                                         t          j	        S )zKey released.r   r   r   )
r   r~   r   r   r   r   r   KeyReleaseEventr   rl   r   s	            r$   OnKeyReleasez)GtkVTKRenderWindowInteractor.OnKeyRelease   s    ((//e,!ffS==g,,C
++AaD!A$e,/F	< 	< 	<
""$$$xr%   c                 J    | j         r| j                                         d S d S r'   )r   r   rk   rL   s    r$   rk   z'GtkVTKRenderWindowInteractor.Initialize   s0    > 	$J!!#####	$ 	$r%   r'   )rW   
__module____qualname____doc__r   r   r   rX   r   r   rb   rd   r8   r:   r9   rA   r~   r;   r<   r=   r>   r?   r@   r   rk   rP   r%   r$   r   r   "   sf       ) )! ! !0$ $ $G G G$	5 	5 	53 3 3  " " "( ( (              &  &          $ $ $ $ $r%   r   c                     ddl m}  ddlm}m}m} dd l}dd l}t          j	        t          j
                  }|                    d           |                    dt          j                   |                    dt          j                   |                    d           t          j        d	          }|                    |           |                                 t%                      }|                    d
d
           |                    |           |                                 |                                 |                                 |                    ddd            |             }|                    d            |            }	|	                    |                                            |            }
|
                    |	           |
                                                    ddd            |            }|                                                    |           |                     |
           t          j!        d          }|                    dt          j                   |                    |           |                                 |                                 t          j"                     d S )Nr   )vtkConeSource)vtkActorvtkPolyDataMappervtkRendererzA GtkVTKRenderWindow Demo!rw   r6   rZ   r   )spacingi  	ExitEventc                     |S r'   rP   )oexs      r$   rR   zmain.<locals>.<lambda>  s    Q r%   P   g      ?g      ?zQuit!clickedr'   )#vtkmodules.vtkFiltersSourcesr   vtkmodules.vtkRenderingCorer   r   r   vtkmodules.vtkRenderingOpenGL2vtkmodules.vtkInteractionStyler   	GtkWindowWINDOW_TOPLEVEL	set_titler7   mainquitset_border_widthGtkVBoxaddshowr   r   
pack_startrk   Startr   SetResolutionSetInputConnectionGetOutputPort	SetMapperGetPropertySetColorrb   AddRendererAddActor	GtkButtonmainloop)r   r   r   r   
vtkmoduleswindowvboxgvtkcone
coneMapper	coneActorrenquits                r$   mainr      s   ::::::TTTTTTTTTT)))))))) ]3.//F
1222
NN9cl+++
NN>3<000
B ;q!!!D
JJtIIKKK ())DNN3OODIIKKKOOJJLLL["6"6"6777 =??Dr""$$J!!$"4"4"6"6777

I
###$$S#s333
+--C&&s+++LL =!!DLLCL)))OODIIKKK KKMMMLNNNNNr%   __main__)r   r   rC   r   vtkmodules.vtkRenderingUIr   mathr   r   r   rW   rP   r%   r$   <module>r      s    8             F F F F F F S$ S$ S$ S$ S$5? S$ S$ S$l3 3 3l zDFFFFF r%   