
    +jTa                     
   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             dS dS )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dS )
EventTimerzSimple wx.Timer class.
    c                 R    t           j                            |            || _        dS )zNDefault class constructor.
        @param iren: current render window
        N)wxTimer__init__iren)selfr   s     c/DATA/AppData/hermes/venv/lib/python3.11/site-packages/vtkmodules/wx/wxVTKRenderWindowInteractor.pyr   zEventTimer.__init__@   s%     	$			    c                 8    | j                                          dS )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dS )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                 H	   d| _         	 t          |d                   }|d= n# t          $ r d}Y nw xY w	 |d         }|d= n# t          $ r t          j        }Y nw xY w	 |d         }|d= nB# t          $ r5 	 |                                }n# t          $ r t          j        }Y nw xY wY nw xY wt          j        t          j	        z  }	 ||d         z  }|d= n# t          $ r Y nw xY wt          j
        dk    r_g }	|}
|
r+|	                    |
           |
                                }
|
+|	                                 |	D ]}
|
                    d           t          j        d	k    rt          j        j        t          j        j        dt          j        j        dt          j        j        dt          j        j        d
t          j        j        g
}|r$|                    t          j        j                   	 t                              | ||||||           nY# t          j        $ r' t                              | |||||           |rd}Y n$w xY wt                              | |||||           t7                      | _        | j                            t=                                 | j                            d| j                    | j                            d| j!                   | j        "                                                    d| j#                   	 | j        "                                $                    |j%        |j&                   nI# t          $ r< | j        "                                $                    |d         |d                    Y nw xY w|rV| j        "                                '                                 | j        "                                (                                 d| _)        | *                                 d| _+        d| _,        d| _-        t          j.        t          j.        t          j/        t          j0        t          j/        t          j0        t          j1        t          j2        t          j3        t          j4        t          j5        d| _6        dS )zDefault 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!                        	   
   )70_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 	 	 	FFF		**~H: 	* 	* 	*)HHH	*	&f:D6

 	& 	& 	&&~~''! & & &~&	& !==	BwK'E7 	 	 	D	
 ;+%%AA "KKMM  " IIKKK  q				++ +0+3Q+5q+4a+6+8:J  <!!"+":;;;""4)..8 # : : : : &   ""4). # 0 0 0  F tVRXD%*  , , , 677

""O$5$5777
143CDDD
2D4EFFF
""$$001E151H	J 	J 	J	CJ&&((00T[IIII 	C 	C 	CJ&&((00a$q'BBBBB	C  	FJ&&((>>@@@J&&((CCEEE
 #  %&"  "!!1!1!1!1!/!/!/!~ " s   " 11A AAA* *
B)5B
	B)
B# B)"B##B)(B)C 
C"!C"1!H 3I	I	7M ANNc                    |                      t          j        | j                   |                      t          j        d            |                      t          j        | j                   |                      t          j        | j                   |                      t          j        | j                   |                      t          j	        | j
                   |                      t          j        | j
                   |                      t          j        | j
                   |                      t          j        | j                   |                      t          j        | j                   |                      t          j        | j                   |                      t          j        | j                   |                      t          j        | j                   |                      t          j        | j                   |                      t          j        | j                   t6          r<t9          t          d          r)|                      t          j        | j                   dS dS dS )zPBinds all the necessary events for navigation, sizing,
        drawing.
        c                     d S Nr   )es    r   <lambda>z8wxVTKRenderWindowInteractor.BindEvents.<locals>.<lambda>   s    T r   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777		""D$5666		"$d&7888		"/4?333		".$/222		""DO444		"#T%6777		"-///		"%t|444		"%t|444
 			"+t~...		"-...		"+t{+++  	-72'?@@ 	-IIb/+- - - - -	- 	- 	- 	-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__	  so     9 J))))TZ&& 	54:t,,, !8,"-/3"4 5 5 5r   c                 d    t          |           | _        | j                            dd           dS )z Creates a timer.
        r1   TN)r   _timerStartr   objevts      r   rM   z'wxVTKRenderWindowInteractor.CreateTimer  s1     !&&"d#####r   c                     dS )zDThe timer is a one shot timer so will expire automatically.
        r!   r   r   s      r   rN   z(wxVTKRenderWindowInteractor.DestroyTimer  s	     qr   c                     | j         |                                         }t          j        |          }|                     |           dS )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   sD     s33556N3qr   c                 <    t          j        | j        ||           dS )zFCalled when the CursorChangedEvent fires on the render
        window.N)r
   	CallAfterr   r   s      r   r(   z.wxVTKRenderWindowInteractor.CursorChangedEvent(  s!     	T-sC88888r   c                 l    t          j        t           j                  }|                     |           dS )zHides the cursor.N)r
   r   CURSOR_BLANKr   )r   r   s     r   
HideCursorz&wxVTKRenderWindowInteractor.HideCursor0  s+    N2?++qr   c                     | j                                         }| j        |                                         }t	          j        |          }|                     |           dS )zShows the cursor.N)rJ   rO   rb   r   r
   r   r   )r   rwr   r   s       r   
ShowCursorz&wxVTKRenderWindowInteractor.ShowCursor5  sU    Z''))r22445N3qr   c                     d}	 t          j                    }|r:t          |          }|                    d          sd|z   }d|dd         ddd}n# t          $ r Y nw xY w|S )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<  s     	3  A  3FF||D)) !qA #$ABB%%%2  	 	 	 D		" s   A 
A! A!c                 8    t           r| j        rd| _        dS dS dS )zThis 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]  s4      	$4? 	$#DOOO	$ 	$ 	$ 	$r   c                 V   |                                  t          j        |           }| j                                                            |                                            | j        s|                                 }|r3| j	        r,| j                                        
                    |           |                                 | _        | j                                                            t          | j                             d| _	        |                                  dS )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 	
""$$,,T\\^^<<< } 	& !!##A =T' =
**,,99!<<< !NN,,DMJ&&((66s4=7I7IJJJ "&Dr   c                 b   |                                  	 |                                \  }}n9#  |                                j        }|                                j        }Y nxY w| j                            ||           | j                                         |                                  dS )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     	

	,!MMOOME66	,MMOO)E]]__+FFF
5&)))
!!### 	s	   . 4A$c           	      J   |                                  | j                            |                                |                                |                                |                                t          d          dd           | j                                         dS )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  s     	


++EJJLL%**,,,1,=,=,?,?,1OO,=,=,/FFAt	= 	= 	= 	
!!#####r   c           	      J   |                                  | j                            |                                |                                |                                |                                t          d          dd           | j                                         dS )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       	


++EJJLL%**,,,1,=,=,?,?oo!ffa	 	 	 	
r   c           	      J   |                                  | j                            |                                |                                |                                |                                t          d          dd           | j                                         dS )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           	         |                                  |                                |                                }}| j                            |                                |                                ||t          d          dd           d}|                                r| j        	                                 d}n_|
                                r| j                                         d}n/|                                r| j                                         d}t          r+| j        s&d| _        || _        |                                  dS dS dS )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  sN    	

''))5??+<+<e
++EJJLL%**,,,0%QD	J 	J 	J ?? 	J,,...FF^^ 	J++---FF 	J--///F  	 t 	 "DO)/D&	  	  	  	 r   c           	         |                                  d}|                                rd}n-|                                rd}n|                                rd}t          r-| j        r&|| j        k    r|                                  d| _        |                                |	                                }}| j
                            |                                |                                ||t          d          dd           |dk    r| j
                                         dS |dk    r| j
                                         dS |dk    r| j
                                         dS dS )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  so    	

==?? 	FF\\^^ 	FF^^ 	F  	$4? 	$222#DO''))5??+<+<e
++EJJLL%**,,,0%QD	J 	J 	J WJ..00000vJ--/////xJ//11111  r   c           	         |                                  |                                |                                }}| j                            |                                |                                ||t          d          dd           |                                dk    r| j        	                                 dS | j        
                                 dS )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
++EJJLL%**,,,0%QD	J 	J 	J!!##a''J--/////J..00000r   c           	         |                                  |                                |                                }}|                                d}}t	          d          }|dk     rt	          |          }| j                                        \  }}| j                            |||||d|           | j                                         | j        	                                 dS )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!ffS==g,,C z**,,1
&&q!'+UC'-	/ 	/ 	/ 	
  """
r   c           	         |                                  |                                |                                }}|                                d}}t	          d          }|dk     rt	          |          }| j                            |                                |                                |||d|           | j        	                                 dS )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!ffS==g,,C
++EJJLL%**,,,0%a,2	4 	4 	4 	
""$$$$$r   c                 4    | j                                         S )z5Returns the render window (vtkRenderWindow).
        )rJ   rO   r   s    r   rO   z+wxVTKRenderWindowInteractor.GetRenderWindowU  s     z))+++r   c                 R   d}| j         s*t          j        |           }|r|                                }|rl| j        rJ| j        |                                 k    r-| j                                                                         dS |                                 r| j	        r| j                                        
                    t          |                                                      |                                 }|r,| j                                                            |           | j                                                                         |                                 | _        | j                                                                         dS dS dS dS )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    ( 	6 ,T22I 6 !* 3 3 5 5 	6} 6$..2B2B!B!B
**,,3355555!! 6d&8 6 
**,,>>(())+ + + %%'' AJ..00==a@@@ 
**,,88::: !% 0 0
**,,3355555)	6 	66 6 6 6r   c                 .    t          |          | _        dS )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    $ %)NN!!!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 D DL"- "- "-J
5 
5 
5$ $ $  
  9 9 9  
    B
$ 
$ 
$     D  ($ $ $           !  !  ! H#2 #2 #2L1 1 1"  2% % %(, , ,
"6 "6 "6H3 3 3 3 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                  }|                    |d
t          j                   |                    |           |                                 |                    d
           |                    d|fd            |            }	|                                                    |	            |             }
|
                    d            |            }|                    |
                                            |            }|                    |           |	                    |           |                                 |                                 dS )z(Like it says, just a simple example
    r   )vtkConeSource)vtkActorvtkPolyDataMappervtkRendererNFr   )  r	  )r   r!   	ExitEventc                 *    |                                 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TTTTTTTT)))))))) &--C HT2<9MMME(33FK$$E	IIfa###	NN5	LLNNN MM!
{$A$A$ABBB
+--C
((---=??Dq""$$J!!$"4"4"6"6777

I
###LL 
JJLLLLLNNNNNr   __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 7 7 7 7 7 F F F F F F I	;+$I
 {k)
       $B	3 B	3 B	3 B	3 B	3) B	3 B	3 B	3L2 2 2h z**,,,,, r   