
    +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             dS dS )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dS )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                 n   t           j        j                            |            |                     t           j                   t                      | _        d| _        d| _	        d| _
        |                                  |                     t           j                   |                     dd           d S )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     `/DATA/AppData/hermes/venv/lib/python3.11/site-packages/vtkmodules/gtk/GtkGLExtVTKRenderWindow.pyr   z$GtkGLExtVTKRenderWindowBase.__init__*   s    	&&t,,,  +++,.. #% & 	s}%%%c3'''''    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_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=   sd   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)-./0 *+ /	0
 45 -. -. 	/ 	/ 	/ 	/ 	/r   c                     | j         S N)r   r>   s    r   GetRenderWindowz+GtkGLExtVTKRenderWindowBase.GetRenderWindowQ   s    !!r   c                     | j                                                                          | j                                                                         S r@   )r   GetRenderersInitTraversalGetNextItemr>   s    r   GetRendererz'GtkGLExtVTKRenderWindowBase.GetRendererT   sD    ''))77999!..00<<>>>r   c                     || _         dS 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                     || _         dS rH   r   rK   s     r   SetStillUpdateRatez.GtkGLExtVTKRenderWindowBase.SetStillUpdateRateb   s     !%r   c                     | j         S rO   rR   r>   s    r   GetStillUpdateRatez.GtkGLExtVTKRenderWindowBase.GetStillUpdateRateg   s     $$r   c                 J    | j         r| j                                         d S d S r@   )r   r   Renderr>   s    r   rW   z"GtkGLExtVTKRenderWindowBase.Renderl   s1    > 	(%%'''''	( 	(r   c                 4   | j         dk    r|                                  t          j        dk    rt	          | j        j        j                  }nt	          | 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   sz    >QLLNNN|W$$T[/677T[/344,,V444DNxr   c                     | j         S r@   )r   r>   s    r   Createdz#GtkGLExtVTKRenderWindowBase.Created|   s
    ~r   c                     || _         | j                            |j        |j                   |                                  t          j        S r@   )r^   r   SetSizewidthheightrW   r   rc   )r   r^   events      r   r-   z'GtkGLExtVTKRenderWindowBase.OnConfigure   s:    ""5;===xr   c                 B    |                                   t          j        S r@   )rW   r   rc   r   s     r   r,   z$GtkGLExtVTKRenderWindowBase.OnExpose   s    xr   c                 n    |                                   | `|                                  t          j        S r@   )hider   destroyr   rc   r   s     r   r4   z%GtkGLExtVTKRenderWindowBase.OnDestroy   s)    		xr   c                 X    | j                             | j                   t          j        S )zMouse button pressed.)r   rM   r   r   rc   r   widrk   s      r   r.   z(GtkGLExtVTKRenderWindowBase.OnButtonDown   s#    //0GHHHxr   c                 X    | j                             | j                   t          j        S )zMouse button released.)r   rM   r   r   rc   rq   s      r   r/   z&GtkGLExtVTKRenderWindowBase.OnButtonUp   s#    //0EFFFxr   c                     t           j        S )zMouse has moved.r   rc   rq   s      r   r0   z'GtkGLExtVTKRenderWindowBase.OnMouseMove   	    x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	   !   sY       4 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dS )GtkGLExtVTKRenderWindowz An example of a fully functional GtkGLExtVTKRenderWindow that
    is based on the vtkRenderWidget.py provided with the VTK
    sources.c                 X   t                               |            d | _        d | _        d| _        d | _        d| _        d| _        t                      | _	        d | _
        t                      | _        | j                            ddd           d | _        d | _        d| _        d| _        d S )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22 $"! ! !$#*}}%%aA..."& r   c                 l    | j                             | j                   |                     ||          S r@   )r   rM   r   StartMotionr   rc   rq   s      r   r.   z$GtkGLExtVTKRenderWindow.OnButtonDown   s2    //0GHHHU+++r   c                 l    | j                             | j                   |                     ||          S r@   )r   rM   r   	EndMotionr   rc   rq   s      r   r/   z"GtkGLExtVTKRenderWindow.OnButtonUp   s0    //0EFFF~~c5)))r   Nc                    |j         t          j        z  t          j        k    r|j         t          j        z  t          j        k    r7|                                 }|                     |d         |d                    n|                                 }|                     |d         |d                    n|j         t          j        z  t          j        k    r7|                                 }|                     |d         |d                    ne|j         t          j        z  t          j        k    r7|                                 }| 	                    |d         |d                    n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@@@s~-#.@@$$&&1qt$$$$$$&&AaD!A$''''{S--#2BBB  ""AHHQqT1Q4    {S--#2BBB  ""AIIadAaD!!!!9xr   c                     |                                   |                                 }|                     |d         |d                    t          j        S r   )
grab_focusr   UpdateRendererr   rc   )r   rr   rk   ws       r   r1   zGtkGLExtVTKRenderWindow.OnEnter   sH    AaD!A$'''xr   c                 .   |j         t          j        d          k    s|j         t          j        d          k    r |                                  t          j        S |j         t          j        d          k    s|j         t          j        d          k    r |                                  t          j        S |j         t          j        d          k    s|j         t          j        d          k    r |                                  t          j        S |j         t          j        d          k    s|j         t          j        d          k    rB|                                 }| 	                    |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?   
 LC05555LC05555JJLLL8Olc237777lc237777NN8Olc237777lc237777LLNNN8Olc237777lc237777  ""ANN1Q41&&&8O9r   c                     | j         S r@   r   r>   s    r   GetZoomFactorz%GtkGLExtVTKRenderWindow.GetZoomFactor  s      r   c                     || _         d S 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                                                   t                              |            d S r@   )r   SetPositionr   GetPositionSetFocalPointGetFocalPointr	   rW   )r   lights     r   rW   zGtkGLExtVTKRenderWindow.Render  sv     	E&Ed1==??@@@ 3 A A C CDDD#**400000r   c                    | j         j                                        \  }}| j                                        }|                                }d| _        |                                 t          d|          D ]6}|	                                }d\  }	}
|dk    rt          |          |dz
  z  }	|dk    r|t          |          z
  dz
  |dz
  z  }
|                                \  }}}}|	|k    r|	|k    r|
|k    r|
|k    r|| _        t          |          ||z
  z  dz  |z   | _        t          |          ||z
  z  dz  |z   | _        | j                                        | _        | j                                        }|                                 |	                                | _         n8|| _        || _        dS )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8&3355	 1133 $!!!q&& 	 	A ,,..HEBr!1XXwqy)!eAhh&q(7195,4,@,@,B,B)VF6&fvfv(0%(-gv(Fs(J)/)0%(-gv(Fs(J)/)0%&*&;&K&K&M&M#.88::$$&&&%+%7%7%9%9"r   c                     | j         o| j                                        }|                                }|                                 t          d|          D ]}|                                } || _         | j         S Nr   )r   r   rC   r   rD   r   rE   )r   r   r   r   r   s        r   GetCurrentRendererz*GtkGLExtVTKRenderWindow.GetCurrentRenderer?  s     (*7799I$5577L##%%%1\**  $0022$,D!$$r   c                 x    | j         -|                                 }|                                | _         | j         S r@   )r   r   r   )r   r   s     r   GetCurrentCameraz(GtkGLExtVTKRenderWindow.GetCurrentCameraK  s9    &..00H"*":":"<"<D""r   c                 b    |j         }|j        }|                     ||           t          j        S r@   )r   r   r   r   rc   )r   rr   rk   r   r   s        r   r   z#GtkGLExtVTKRenderWindow.StartMotionQ  s-    GGAa   xr   c                 P    | j         r|                                  t          j        S r@   )r   rW   r   rc   rq   s      r   r   z!GtkGLExtVTKRenderWindow.EndMotionW  s!      	KKMMMxr   c                 H   | j         r| j                            | j        |z
             | j                            || j        z
             | j                                         || _        || _        | j                                          |                                  d S d S r@   )	r   r   Azimuthr   	Elevationr   OrthogonalizeViewUpResetCameraClippingRangerW   )r   r   r   s      r   r   zGtkGLExtVTKRenderWindow.Rotate\  s      
	''a888))!dk/:::33555DKDK!::<<<KKMMMMM
	 
	r   c                 :   | j         r| j         }| j        }|                                \  }}}|                                \  }}	}
|                                rl|                    ||	|
d           |                                 |                                \  }}}|                    ||z
  | j	        z   ||z   | j
        z
  |           |                                 |                                \  }}}}|                    |||           |                    |||d           |                                 |                                \  }}}|                    ||z
  | j	        z   ||z   | j
        z
  |           |                                 |                                \  }}}}|                    |||           n/|                                \  }}	}
|                    ||	|
d           |                                 |                                }|d         }| j        || j	        z
  z   }| j        || j
        z
  z
  }|                    |||           |                                 |                                \  }}}}|dk    r||z  }||z  }||z  }|                    ||z
  |z   |	|z
  |	z   |
|z
  |
z              |                    ||z
  |z   |	|z
  |z   |
|z
  |z              || _	        || _
        |                                  d S d S )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,,.. 0B&&wwwsCCC'')))#33552b((Adk)9)+Adk)9)+- - - '')))&44662b$$R2...&&wwwsCCC'')))#33552b((Adk)9)+Adk)9)+- - - '')))&44662b""2b,,,, -3,@,@,B,B)&&wwwsCCC'')))!1133#AY
/1t{?C/1t{?C((DDD'')))4<4J4J4L4L1sNN%goG%goG%goG$$g&77%B&-&77%B&-&77%BD D D ""Gg$5#@$+g$5#@$+g$5#@B B B DKDKKKMMMMMy<	 <	r   c                    | j         r| j         }| j        }t          j        dd| j        |z
  z            }| j        |z  | _        |                                r-|                                |z  }|                    |           n)|	                    |           |
                                 || _        || _        |                                  d S d S )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 $ 1J >D++-- 4 & 7 7 9 9* D''6666Z(((11333DKDKKKMMMMM%	 	r   c                 n    | j         r| j                                          |                                  d S r@   )r   ResetCamerarW   r>   s    r   r   zGtkGLExtVTKRenderWindow.Reset  s3      	0!--///r   c                 J   | j                                         }|                                }|                                 t	          d|          D ]<}|                                }|                                                                 =|                                  d S r   )	r   	GetActorsr   rD   r   rE   GetPropertySetRepresentationToWireframerW   r   actors	numActorsr   actors        r   r   z!GtkGLExtVTKRenderWindow.Wireframe  s    &0022++--	q## 	? 	?A&&((E<<>>>>r   c                 J   | j                                         }|                                }|                                 t	          d|          D ]<}|                                }|                                                                 =|                                  d S r   )	r   r  r   rD   r   rE   r  SetRepresentationToSurfacerW   r  s        r   r   zGtkGLExtVTKRenderWindow.Surface  s    &0022++--	q## 	= 	=A&&((E::<<<<r   c                    | j         r;| j         }| j        }| j        j                                        \  }}|                    |||z
  dz
  d|           |                                }| j        d k    rP| j        d k    rE| j        	                    | j                   | j        
                    | j                   d | _        |d k    rc|| _        | j                                        | _        | j                            | j                   | j        	                    | j                   |                                  d S d S )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  s8     	,H\F#{1::<<OGGKK7Q;?C999))++H$,,'4//$001HIII'2243JKKK*.'D  '/$*.*>*J*J*L*L''001HIII$001EFFFKKMMMMM/	 	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      s          .  
  
   &      2! ! !    1 1 1# # #J
% 
% 
%# # #      
  = = =~  *          r   r   c                     ddl m}  ddlm}m}m} dd l}dd l}t          j	                    }|
                    d           |                    dt          j                   |                    dt          j                   |                    d           t                      }|                                 t          j        d	          }|                                 |                    |           t          j        d
          }|                                 |                    |           |                    |           |                    dd            |             }	|	                    d            |            }
|
                    |	                                            |            }|                    |
           |                                                    ddd            |            }|                                                    |           |                    |           |                                 t          j                     d S )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    s8   ::::::TTTTTTTTTT)))))))) Z\\F
6777
NN9cl+++
NN>3<000
B$&&F
KKMMM8ADIIKKKOOFZ$$F
KKMMMOOF
JJt
C%%% =??Dr""$$J!!$"4"4"6"6777

I
###$$S#s333
+--C
((---LL KKMMMLNNNNNr   __main__)r   r  r[   pygtkrequirer   	gtk.gtkglr   r*  r   r   r   r   r   r   r	   r   rE  r|   r   r   r   <module>rJ     s/   .          e    



           ] ] ] ] ] ] ] ] ] ] ] ]J J J J J#)"7 J J JZA A A A A9 A A AH
+ + +\ zDFFFFF r   