
    tjF                         d Z ddlZddlZddlZ ej                  d       ddlZddlZddlmZ ddlm	Z	m
Z
mZmZ  G d dej                  j                        Z G d d	e      Zd
 Zedk(  r e        yy)a  
Description:

  This provides a VTK widget for pyGtk.  This embeds a vtkRenderWindow
  inside a GTK widget.  This is based on GtkVTKRenderWindow.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)vtkActorvtkCellPickervtkPropertyvtkRenderWindowc                       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y)GtkGLExtVTKRenderWindowBasea|   A base class that enables one to embed a vtkRenderWindow into
    a pyGTK widget.  This class embeds the RenderWindow correctly.
    Provided are some empty methods that can be overloaded to provide
    a user defined interaction behaviour.  The event handling
    functions have names that are somewhat similar to the ones in the
    vtkInteractorStyle class included with VTK. c                 ^   t         j                  j                  j                  |        | j	                  t         j
                         t               | _        d| _        d| _	        d| _
        | j                          | j                  t         j                         | j                  dd       y )Nr      g-C6?i,  )gtkgtkglDrawingArea__init__set_double_bufferedFALSEr   _RenderWindow%_GtkGLExtVTKRenderWindowBase__Created_DesiredUpdateRate_StillUpdateRateConnectSignals	set_flags	CAN_FOCUSset_size_requestselfargss     S/DATA/.local/lib/python3.12/site-packages/vtkmodules/gtk/GtkGLExtVTKRenderWindow.pyr   z$GtkGLExtVTKRenderWindowBase.__init__*   s~    		&&t,  +,. #% & 	s}}%c3'    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   z*GtkGLExtVTKRenderWindowBase.ConnectSignals=   sC   Y/^T]]3&(8(89)4+<+<=+T__=*D,<,<=)4<<8)4<<8&8^T^^4))--.//0 **+ //	0
 445 --. --. 	/r   c                     | j                   S N)r   r>   s    r   GetRenderWindowz+GtkGLExtVTKRenderWindowBase.GetRenderWindowQ   s    !!!r   c                     | j                   j                         j                          | j                   j                         j                         S r@   )r   GetRenderersInitTraversalGetNextItemr>   s    r   GetRendererz'GtkGLExtVTKRenderWindowBase.GetRendererT   s;    '')779!!..0<<>>r   c                     || _         yKMirrors the method with the same name in
        vtkRenderWindowInteractor.Nr   r   rates     r   SetDesiredUpdateRatez0GtkGLExtVTKRenderWindowBase.SetDesiredUpdateRateX   s     #'r   c                     | j                   S rI   rJ   r>   s    r   GetDesiredUpdateRatez0GtkGLExtVTKRenderWindowBase.GetDesiredUpdateRate]   s     &&&r   c                     || _         yrH   r   rK   s     r   SetStillUpdateRatez.GtkGLExtVTKRenderWindowBase.SetStillUpdateRateb   s     !%r   c                     | j                   S rO   rR   r>   s    r   GetStillUpdateRatez.GtkGLExtVTKRenderWindowBase.GetStillUpdateRateg   s     $$$r   c                 R    | j                   r| j                  j                          y y r@   )r   r   Renderr>   s    r   rW   z"GtkGLExtVTKRenderWindowBase.Renderl   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   win32   )r   r    sysplatformstrwidgetwindowhandlexidr   SetWindowInfor   TRUE)r   r   win_ids      r   r+   z%GtkGLExtVTKRenderWindowBase.OnRealizep   s{    >>QLLN||W$T[[//667T[[//334,,V4DNxxr   c                     | j                   S r@   )r   r>   s    r   Createdz#GtkGLExtVTKRenderWindowBase.Created|   s    ~~r   c                     || _         | j                  j                  |j                  |j                         | j                          t        j                  S r@   )r^   r   SetSizewidthheightrW   r   rc   )r   r^   events      r   r-   z'GtkGLExtVTKRenderWindowBase.OnConfigure   s9    ""5;;=xxr   c                 B    | j                          t        j                  S r@   )rW   r   rc   r   s     r   r,   z$GtkGLExtVTKRenderWindowBase.OnExpose   s    xxr   c                 f    | j                          | `| j                          t        j                  S r@   )hider   destroyr   rc   r   s     r   r4   z%GtkGLExtVTKRenderWindowBase.OnDestroy   s#    		xxr   c                 l    | j                   j                  | j                         t        j                  S )zMouse button pressed.)r   rM   r   r   rc   r   widrk   s      r   r.   z(GtkGLExtVTKRenderWindowBase.OnButtonDown   s%    //0G0GHxxr   c                 l    | j                   j                  | j                         t        j                  S )zMouse button released.)r   rM   r   r   rc   rq   s      r   r/   z&GtkGLExtVTKRenderWindowBase.OnButtonUp   s%    //0E0EFxxr   c                 "    t         j                  S )zMouse has moved.r   rc   rq   s      r   r0   z'GtkGLExtVTKRenderWindowBase.OnMouseMove       xxr   c                 "    t         j                  S )zEntering the vtkRenderWindow.ru   rq   s      r   r1   z#GtkGLExtVTKRenderWindowBase.OnEnter   rv   r   c                 "    t         j                  S )zLeaving the vtkRenderWindow.ru   rq   s      r   r2   z#GtkGLExtVTKRenderWindowBase.OnLeave   rv   r   c                 "    t         j                  S )zKey pressed.ru   rq   s      r   r3   z&GtkGLExtVTKRenderWindowBase.OnKeyPress   rv   r   c                 "    t         j                  S )zKey released.ru   rq   s      r   OnKeyReleasez(GtkGLExtVTKRenderWindowBase.OnKeyRelease   rv   r   N)__name__
__module____qualname____doc__r   r   rA   rF   rM   rP   rS   rU   rW   r+   rf   r-   r,   r4   r.   r/   r0   r1   r2   r3   r{    r   r   r	   r	   !   sp    4(&/("?'
'
%
%
(


r   r	   c                       e Zd ZdZd Zd Zd ZddZddZddZ	d	 Z
d
 Zd Zd Zd Zd Zd ZddZddZd Zd Zd Zd Zd Zd Zd Zy)GtkGLExtVTKRenderWindowz An example of a fully functional GtkGLExtVTKRenderWindow that
    is based on the vtkRenderWidget.py provided with the VTK
    sources.c                 >   t         j                  |        d | _        d | _        d| _        d | _        d| _        d| _        t               | _	        d | _
        t               | _        | j                  j                  ddd       d | _        d | _        d| _        d| _        y )N      ?r   rZ   )r	   r   _CurrentRenderer_CurrentCamera_CurrentZoom_CurrentLight_ViewportCenterX_ViewportCenterYr   _Picker_PickedAssemblyr   _PickedPropertySetColor_PrePickedProperty	_OldFocus_LastX_LastYr   s     r   r   z GtkGLExtVTKRenderWindow.__init__   s    #,,T2 $"! ! !$#*}%%aA."& r   c                 p    | j                   j                  | j                         | j                  ||      S r@   )r   rM   r   StartMotionr   rc   rq   s      r   r.   z$GtkGLExtVTKRenderWindow.OnButtonDown   s/    //0G0GHU++r   c                 p    | j                   j                  | j                         | j                  ||      S r@   )r   rM   r   	EndMotionr   rc   rq   s      r   r/   z"GtkGLExtVTKRenderWindow.OnButtonUp   s-    //0E0EF~~c5))r   Nc                 R   |j                   t        j                  z  t        j                  k(  r|j                   t        j                  z  t        j                  k(  r8| j	                         }| j                  |d   |d          t        j                  S | j	                         }| j                  |d   |d          t        j                  S |j                   t        j                  z  t        j                  k(  r8| j	                         }| j                  |d   |d          t        j                  S |j                   t        j                  z  t        j                  k(  r8| j	                         }| j                  |d   |d          t        j                  S t        j                  S Nr   rZ   )stater   BUTTON1_MASK
SHIFT_MASKget_pointerPanRotateBUTTON2_MASKBUTTON3_MASKZoomr   r   rc   r   rr   rk   ms       r   r0   z#GtkGLExtVTKRenderWindow.OnMouseMove   s@   [[3+++0@0@@s~~-#..@$$&1qt$ xx $$&AaD!A$' xx {{S---#2B2BB  "AHHQqT1Q4  xx {{S---#2B2BB  "AIIadAaD! xx 99r   c                     | j                          | j                         }| j                  |d   |d          t        j                  S r   )
grab_focusr   UpdateRendererr   rc   )r   rr   rk   ws       r   r1   zGtkGLExtVTKRenderWindow.OnEnter   s;    AaD!A$'xxr   c                 r   |j                   t        j                  d      k(  s"|j                   t        j                  d      k(  r | j                          t        j
                  S |j                   t        j                  d      k(  s"|j                   t        j                  d      k(  r | j                          t        j
                  S |j                   t        j                  d      k(  s"|j                   t        j                  d      k(  r | j                          t        j
                  S |j                   t        j                  d      k(  s"|j                   t        j                  d      k(  r8| j                         }| j                  |d	   |d
          t        j
                  S t        j                  S )NrRr   WsSpPr   rZ   )keyvalr   keyval_from_nameResetr   rc   	WireframeSurfacer   	PickActorr   r   s       r   r3   z"GtkGLExtVTKRenderWindow.OnKeyPress   s*   
 LLC0055LLC0055JJL88Ollc22377llc22377NN88Ollc22377llc22377LLN88Ollc22377llc22377  "ANN1Q41&88O99r   c                     | j                   S r@   r   r>   s    r   GetZoomFactorz%GtkGLExtVTKRenderWindow.GetZoomFactor  s       r   c                     || _         y r@   r   )r   zfs     r   SetZoomFactorz%GtkGLExtVTKRenderWindow.SetZoomFactor  s
    r   c                     | j                   S r@   )r   r>   s    r   	GetPickerz!GtkGLExtVTKRenderWindow.GetPicker  s    ||r   c                    | j                   r^| j                   }|j                  | j                  j                                |j	                  | j                  j                                t        j                  |        y r@   )r   SetPositionr   GetPositionSetFocalPointGetFocalPointr	   rW   )r   lights     r   rW   zGtkGLExtVTKRenderWindow.Render  s^    &&Ed11==?@ 3 3 A A CD#**40r   c                 8   | j                   j                  j                         \  }}| j                  j	                         }|j                         }d| _        |j                          t        d|      D ]  }|j                         }d\  }	}
|dkD  rt        |      |dz
  z  }	|dkD  r|t        |      z
  dz
  |dz
  z  }
|j                         \  }}}}|	|k\  sf|	|k  sl|
|k\  sr|
|k  sx|| _        t        |      ||z
  z  dz  |z   | _        t        |      ||z
  z  dz  |z   | _        | j                  j                         | _        | j                  j!                         }|j                          |j                         | _         n || _        || _        y)z
        UpdateRenderer will identify the renderer under the mouse and set
        up _CurrentRenderer, _CurrentCamera, and _CurrentLight.
        Nr   )r   r   rZ   g       @)r^   r_   get_sizer   rC   GetNumberOfItemsr   rD   rangerE   floatGetViewportr   r   GetActiveCamerar   	GetLightsr   r   r   )r   xywindowXwindowY	renderersnumRenderersirenderervxvyvpxminvpyminvpxmaxvpymaxlightss                   r   r   z&GtkGLExtVTKRenderWindow.UpdateRenderer  s   
  ;;--668&&335	 113 $!q&A ,,.HEBr!1Xwqy)!eAh&q(7195,4,@,@,B)VF6&fvfv(0%(-gv(Fs(J)/)0%(-gv(Fs(J)/)0%&*&;&;&K&K&M#..88:$$&%+%7%7%9") ', r   c                     | j                   c| j                  j                         }|j                         }|j	                          t        d|      D ]  }|j                         } n | _         | j                   S Nr   )r   r   rC   r   rD   r   rE   )r   r   r   r   r   s        r   GetCurrentRendererz*GtkGLExtVTKRenderWindow.GetCurrentRenderer?  st      (**779I$557L##%1\*$002 + %-D!$$$r   c                 |    | j                   %| j                         }|j                         | _         | j                   S r@   )r   r   r   )r   r   s     r   GetCurrentCameraz(GtkGLExtVTKRenderWindow.GetCurrentCameraK  s9    &..0H"*":":"<D"""r   c                 v    |j                   }|j                  }| j                  ||       t        j                  S r@   )r   r   r   r   rc   )r   rr   rk   r   r   s        r   r   z#GtkGLExtVTKRenderWindow.StartMotionQ  s-    GGGGAa xxr   c                 Z    | j                   r| j                          t        j                  S r@   )r   rW   r   rc   rq   s      r   r   z!GtkGLExtVTKRenderWindow.EndMotionW  s      KKMxxr   c                 b   | j                   r| j                  j                  | j                  |z
         | j                  j	                  || j
                  z
         | j                  j                          || _        || _        | j                   j                          | j                          y y r@   )	r   r   Azimuthr   	Elevationr   OrthogonalizeViewUpResetCameraClippingRangerW   )r   r   r   s      r   r   zGtkGLExtVTKRenderWindow.Rotate\  s      ''a8))!dkk/:335DKDK!!::<KKM !r   c                    | j                   r| j                   }| j                  }|j                         \  }}}|j                         \  }}	}
|j	                         rH|j                  ||	|
d       |j                          |j                         \  }}}|j                  ||z
  | j                  z   ||z   | j                  z
  |       |j                          |j                         \  }}}}|j                  |||       |j                  |||d       |j                          |j                         \  }}}|j                  ||z
  | j                  z   ||z   | j                  z
  |       |j                          |j                         \  }}}}|j                  |||       n|j                         \  }}	}
|j                  ||	|
d       |j                          |j                         }|d   }| j                  || j                  z
  z   }| j                   || j                  z
  z
  }|j                  |||       |j                          |j                         \  }}}}|dk7  r||z  }||z  }||z  }|j                  ||z
  |z   |	|z
  |	z   |
|z
  |
z          |j                  ||z
  |z   |	|z
  |z   |
|z
  |z          || _	        || _
        | j#                          y y )Nr              )r   r   r   r   GetParallelProjectionSetWorldPointWorldToDisplayGetDisplayPointSetDisplayPointr   r   DisplayToWorldGetWorldPointr   r   r   r   rW   )r   r   r   r   camerapPoint0pPoint1pPoint2fPoint0fPoint1fPoint2fxfyfzfwdPoint
focalDepthaPoint0aPoint1rPoint0rPoint1rPoint2rPoint3s                          r   r   zGtkGLExtVTKRenderWindow.Pani  s     ,,H((F(.(:(:(<%WWW(.(<(<(>%WWW,,.&&wwwsC'')#3352b((Adkk)9)+Adkk)9)+- '')&4462b$$R2.&&wwwsC'')#3352b((Adkk)9)+Adkk)9)+- '')&4462b""2b, -3,@,@,B)&&wwwsC'')!113#AY
//1t{{?C//1t{{?C((D'')4<4J4J4L1sN%goG%goG%goG$$g&77%B&-&77%B&-&77%BD ""Gg$5#@$+g$5#@$+g$5#@B DKDKKKMy !r   c                    | j                   r| j                   }| j                  }t        j                  dd| j                  |z
  z        }| j
                  |z  | _        |j                         r%|j                         |z  }|j                  |       n!|j                  |       |j                          || _        || _        | j                          y y )NgRQ?      ?)r   r   mathpowr   r   r   GetParallelScaleSetParallelScaleDollyr   r   rW   )r   r   r   r   r   
zoomFactorparallelScales          r   r   zGtkGLExtVTKRenderWindow.Zoom  s      ,,H((F$T[[1_(=?J $ 1 1J >D++- & 7 7 9* D''6Z(113DKDKKKM% !r   c                 p    | j                   r| j                   j                          | j                          y r@   )r   ResetCamerarW   r>   s    r   r   zGtkGLExtVTKRenderWindow.Reset  s&      !!--/r   c                    | j                   j                         }|j                         }|j                          t	        d|      D ]0  }|j                         }|j                         j                          2 | j                          y r   )	r   	GetActorsr   rD   r   rE   GetPropertySetRepresentationToWireframerW   r   actors	numActorsr   actors        r   r   z!GtkGLExtVTKRenderWindow.Wireframe  so    &&002++-	q#A&&(E<<> $ 	r   c                    | j                   j                         }|j                         }|j                          t	        d|      D ]0  }|j                         }|j                         j                          2 | j                          y r   )	r   r  r   rD   r   rE   r  SetRepresentationToSurfacerW   r  s        r   r   zGtkGLExtVTKRenderWindow.Surface  so    &&002++-	q#A&&(E::< $ 	r   c                    | j                   r^| j                   }| j                  }| j                  j                  j	                         \  }}|j                  |||z
  dz
  d|       |j                         }| j                  d k7  r`| j                  d k7  rQ| j                  j                  | j                         | j                  j                  | j                         d | _        |d k7  rp|| _        | j                  j                         | _        | j                  j                  | j                         | j                  j                  | j                         | j                          y y )NrZ   r   )r   r   r^   r_   r   PickGetAssemblyr   r   SetProperty
UnRegisterr  Registerr   rW   )r   r   r   r   pickerr   r   assemblys           r   r   z!GtkGLExtVTKRenderWindow.PickActor  s$     ,,H\\F#{{11::<OGGKK7Q;?C9))+H$$,''4/$$001H1HI''2243J3JK*.'D '/$*.*>*>*J*J*L'''001H1HI$$001E1EFKKM/ !r   r@   )r|   r}   r~   r   r   r.   r/   r0   r1   r3   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sw    .

&2!1#J
%#
=~*r   r   c                     ddl m}  ddlm}m}m} dd l}dd l}t        j                         }|j                  d       |j                  dt        j                         |j                  dt        j                         |j                  d       t               }|j                          t        j                   d	      }|j                          |j#                  |       t        j$                  d
      }|j                          |j#                  |       |j'                  |       |j)                  dd        |        }	|	j+                  d        |       }
|
j-                  |	j/                                 |       }|j1                  |
       |j3                         j5                  ddd        |       }|j7                         j9                  |       |j;                  |       |j                          t        j<                          y )Nr   )vtkConeSource)r   vtkPolyDataMappervtkRendererzA GtkGLExtVTKRenderWindow Demo!ro   r)   
      )spacingz	My Buttoni  P   r  r   )vtkmodules.vtkFiltersSourcesr"  vtkmodules.vtkRenderingCorer   r#  r$  vtkmodules.vtkRenderingOpenGL2vtkmodules.vtkInteractionStyler   Window	set_titler*   mainquitset_border_widthr   showVBox
pack_startButtonaddr   SetResolutionSetInputConnectionGetOutputPort	SetMapperr  r   rA   AddRendererAddActormainloop)r"  r   r#  r$  
vtkmodulesr_   vtkgtkvboxbuttoncone
coneMapper	coneActorrens                r   mainrE    sv   :TT)) ZZ\F
67
NN9cll+
NN>3<<0
B$&F
KKM88ADIIKOOFZZ$F
KKMOOF
JJt
C% ?Dr"$J!!$"4"4"67
I
#$$S#s3
-C
((-LL KKMLLNr   __main__)r   r  r[   pygtkrequirer   	gtk.gtkglr   r*  r   r   r   r   r   r   r	   r   rE  r|   r   r   r   <module>rJ     sr   .   e  
   ] ]J#))"7"7 JZA9 AH
+\ zF r   