
    +j\                         d Z 	 ddlZddlZddlZddlZddlmZmZ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
          Zd Zed	k    r e             dS dS )
z
A simple VTK widget for wxPython.

Find wxPython info at http://wxPython.org

Created by David Gobbi, December 2001
Based on vtkTkRenderWindget.py

Updated to new wx namespace and some cleaning by Andrea Gavana,
December 2006

    N)vtkCellPickervtkPropertyvtkRenderWindow	__WXGTK__	__WXMSW__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 Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d-d)Z*d* Z+d+ Z,d, Z-d(S ).wxVTKRenderWindowz
    A wxRenderWindow for wxPython.
    Use GetRenderWindow() to get the vtkRenderWindow.
    Create with the keyword stereo=1 in order to
    generate a stereo-capable window.
    c           	      
   d| _         d| _        d| _        d| _        d| _        d| _        t                      | _        d| _        t                      | _
        | j
                            ddd           d| _        d| _        d| _        d| _        d| _        d| _        d| _        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# t2          $ 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g }	|}
|
r+|	                    |
           |
                                }
|
+|	                                 |	D ]}
|
                     d           tB          j"        dk    r2tB          #                    | |||||t,          j$        j%        g           n tB          #                    | |||||           tM                      | _'        | j'        (                    |j)        |j*                   |r2| j'        +                                 | j'        ,                                 d| _-        | .                    t,          j/        | j0                   | .                    t,          j1        d            | .                    t,          j2        | j3                   | .                    t,          j4        | j3                   | .                    t,          j5        | j3                   | .                    t,          j6        | j7                   | .                    t,          j8        | j7                   | .                    t,          j9        | j7                   | .                    t,          j:        | j;                   | .                    t,          j<        | j=                   | .                    t,          j>        | j?                   | .                    t,          j@        | jA                   | .                    t,          j@        | jB                   | .                    t,          jC        | jD                   | .                    t,          jE        | jF                   | .                    t,          jG        | jH                   | .                    t,          jI        | jJ                   | .                    t,          jK        | jL                   dS )zDefault class constructor.
        @param parent: parent window
        @param ID: window id
        @param **kw: wxPython keywords (position, size, style) plus the
        'stereo' keyword
        N      ?r         g-C6?stereoFpositionsizestyleGLCanvas)posr   r   
attribList)r   r   r   c                     d S N )es    Y/DATA/AppData/hermes/venv/lib/python3.11/site-packages/vtkmodules/wx/wxVTKRenderWindow.py<lambda>z,wxVTKRenderWindow.__init__.<locals>.<lambda>   s    T     )M_CurrentRenderer_CurrentCamera_CurrentZoom_CurrentLight_ViewportCenterX_ViewportCenterYr   _Picker_PickedActorr   _PickedPropertySetColor_PrePickedProperty_LastX_LastY_Mode_ActiveButton_wxVTKRenderWindow__OldFocus_DesiredUpdateRate_StillUpdateRateboolKeyErrorwxDefaultPositionGetSizeAttributeErrorDefaultSizeWANTS_CHARSNO_FULL_REPAINT_ON_RESIZEappend	GetParentreverseShow	baseClass__name____init__glcanvasWX_GL_DOUBLEBUFFERr   _RenderWindowSetSizewidthheightStereoCapableWindowOnSetStereoTypeToCrystalEyes_wxVTKRenderWindow__handleBind	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_MOTIONOnMotionEVT_ENTER_WINDOW_OnEnterWindowEVT_LEAVE_WINDOW_OnLeaveWindowEVT_CHAROnChar	OnKeyDown
EVT_KEY_UPOnKeyUpEVT_SIZE_OnSizeEVT_MOVEOnMoveEVT_SET_FOCUS
OnSetFocusEVT_KILL_FOCUSOnKillFocus)selfparentIDargskwr   r   r   r   lps              r   r=   zwxVTKRenderWindow.__init__m   s    !%"! ! !$ *}}%%a!,,,"&  
!  #% &
	"X,''F8 	 	 	FFF		**~H: 	* 	* 	*)HHH	*	&f:D6

 	& 	& 	&&~~''! & & &~&	& !==	BwK'E7 	 	 	D	
  	HHQKKKA  	 	
		 	 	AFF1IIII ++tVRXD%*+-;+I*J  L L L L tVRXD%*  , , , -..""4:t{;;; 	<4466699;;; 			",---		")>>::: 			"#T%7888		""D$6777		"$d&8999		"/4#3444		".$"2333		""D$4555		"-///		"%t':;;;		"%t':;;;		"+t{+++
 			"+t~...		"-...		"+t|,,,		"+t{+++		""DO444		"#T%566666sl   -C CCC% %C>=C>D 
ED.-E.EEEEE*E9 9
FFc                     || _         dS TMirrors the method with the same name in
        vtkRenderWindowInteractor.
        Nr,   rf   rates     r   SetDesiredUpdateRatez&wxVTKRenderWindow.SetDesiredUpdateRate   s     #'r   c                     | j         S ro   rp   rf   s    r   GetDesiredUpdateRatez&wxVTKRenderWindow.GetDesiredUpdateRate   s     &&r   c                     || _         dS rn   r-   rq   s     r   SetStillUpdateRatez$wxVTKRenderWindow.SetStillUpdateRate   s     !%r   c                     | j         S ru   ry   rv   s    r   GetStillUpdateRatez$wxVTKRenderWindow.GetStillUpdateRate  s     $$r   c                 V    t          j        |           }|                                  dS )z>Handles the wx.EVT_PAINT event for wxVTKRenderWindow.
        N)r0   PaintDCRender)rf   eventdcs      r   rI   zwxVTKRenderWindow.OnPaint
  s$     Zr   c                     t           j        dk    r2|                                \  }}| j                            ||           |                     |           |                                  dS )z=Handles the wx.EVT_SIZE event for wxVTKRenderWindow.
        r   N)r0   Platformr2   r@   rA   OnSizer   )rf   r   rB   rC   s       r   r_   zwxVTKRenderWindow._OnSize  s^     ;+%%!MMOOME6&&uf555Er   c                     dS Overridable event.
        Nr   rf   r   s     r   r   zwxVTKRenderWindow.OnSize  	     	r   c                     dS r   r   r   s     r   ra   zwxVTKRenderWindow.OnMove  r   r   c                 Z    |                      |           |                     |           dS )zMHandles the wx.EVT_ENTER_WINDOW event for
        wxVTKRenderWindow.
        N)UpdateRendererOnEnterWindowr   s     r   rV   z wxVTKRenderWindow._OnEnterWindow$  s2     	E"""5!!!!!r   c                     | j         dk    r9t          j                                        | _         |                                  dS dS r   )r+   r0   Window	FindFocusSetFocusr   s     r   r   zwxVTKRenderWindow.OnEnterWindow,  s?     ?d"" i1133DOMMOOOOO #"r   c                 0    |                      |           dS )zMHandles the wx.EVT_LEAVE_WINDOW event for
        wxVTKRenderWindow.
        N)OnLeaveWindowr   s     r   rX   z wxVTKRenderWindow._OnLeaveWindow3  s     	5!!!!!r   c                 X    | j         r"| j                                          d| _         dS dS r   )r+   r   r   s     r   r   zwxVTKRenderWindow.OnLeaveWindow9  s7     ? 	#O$$&&&"DOOO	# 	#r   c                     dS r   r   r   s     r   rc   zwxVTKRenderWindow.OnSetFocus@  r   r   c                     dS r   r   r   s     r   re   zwxVTKRenderWindow.OnKillFocusE  r   r   c                 R   | j                             | j                   |                                rd}n0|                                rd}n|                                rd}nd}|r)| j        s"|| _        t          r|                                  | 	                    |           dS )zXHandles the wx.EVT_LEFT/RIGHT/MIDDLE_DOWN events for
        wxVTKRenderWindow.
        RightLeftMiddleN)
r@   rs   r,   	RightDownLeftDown
MiddleDownr*   _useCaptureCaptureMouseOnButtonDownrf   r   buttons      r   rL   zwxVTKRenderWindow._OnButtonDownJ  s    
 	//0GHHH?? 	FF^^ 	FF 	FFF  	$$, 	$!'D $!!###%     r   c                 @   | j         s|                     |           |                                r|                     |           dS |                                r|                     |           dS |                                r|                     |           dS dS r   )r)   r   r   
OnLeftDownr   OnRightDownr   OnMiddleDownr   s     r   r   zwxVTKRenderWindow.OnButtonDownb  s     z 	'&&&>> 	%OOE"""""__ 	%U##### 	%e$$$$$	% 	%r   c                     | j         sC|                                r	d| _         dS |                                r	d| _         dS d| _         dS dS )r   ZoomPanRotateN)r)   ControlDown	ShiftDownr   s     r   r   zwxVTKRenderWindow.OnLeftDownp  s_     z 	&  "" &#


"" &"


%


	& 	&r   c                 &    | j         s	d| _         dS dS )r   r   Nr)   r   s     r   r   zwxVTKRenderWindow.OnRightDown{  s#     z 	 DJJJ	  	 r   c                 &    | j         s	d| _         dS dS )r   r   Nr   r   s     r   r   zwxVTKRenderWindow.OnMiddleDown  s#     z 	DJJJ	 	r   c                 d   | j                             | j                   |                                rd}n0|                                rd}n|                                rd}nd}| j        r-|| j        k    r"t          r|                                  d| _        | 	                    |           dS )zVHandles the wx.EVT_LEFT/RIGHT/MIDDLE_UP events for
        wxVTKRenderWindow.
        r   r   r   N)
r@   rs   r-   RightUpLeftUpMiddleUpr*   r   ReleaseMouse
OnButtonUpr   s      r   rP   zwxVTKRenderWindow._OnButtonUp  s    
 	//0EFFF==?? 	FF\\^^ 	FF^^ 	FFF  	&&D,>">"> $!!###!%Dr   c                 R   |                                 r|                     |           nS|                                r|                     |           n)|                                r|                     |           | j        r| j        r|                                  d| _        dS r   )	r   OnLeftUpr   	OnRightUpr   
OnMiddleUpr)   r   r   r   s     r   r   zwxVTKRenderWindow.OnButtonUp  s     <<>> 	#MM%    ]]__ 	#NN5!!!!^^ 	#OOE""" : 	$ 


r   c                     dS r   r   r   s     r   r   zwxVTKRenderWindow.OnLeftUp  r   r   c                     dS r   r   r   s     r   r   zwxVTKRenderWindow.OnRightUp  r   r   c                     dS r   r   r   s     r   r   zwxVTKRenderWindow.OnMiddleUp  r   r   c                     | j         dk    r|                     |           dS | j         dk    r|                     |           dS | j         dk    r|                     |           dS dS )r   r   r   r   N)r)   r   r   r   r   s     r   rT   zwxVTKRenderWindow.OnMotion  sv     :HHUOOOOOZ8##KKZ6!!IIe "!r   c                     dS r   r   r   s     r   rZ   zwxVTKRenderWindow.OnChar  r   r   c                 0   |                                 t          d          k    r|                     |           |                                 t          d          k    r|                                  |                                 t          d          k    r|                                  |                                 t          d          k    r|                     |           |                                 dk     r|                     |           dS dS )zBHandles the wx.EVT_KEY_DOWN events for wxVTKRenderWindow.
        rwsrl      N)
GetKeyCodeordReset	WireframeSurface	PickActorrZ   r   s     r   r[   zwxVTKRenderWindow.OnKeyDown  s     S))JJuS))NNS))LLNNNS))NN5!!!##KK $#r   c                     dS r   r   r   s     r   r]   zwxVTKRenderWindow.OnKeyUp  r   r   c                     | j         S )z)Returns the current zoom factor.
        )r   rv   s    r   GetZoomFactorzwxVTKRenderWindow.GetZoomFactor  s       r   c                     | j         S )z5Returns the render window (vtkRenderWindow).
        )r@   rv   s    r   GetRenderWindowz!wxVTKRenderWindow.GetRenderWindow  s     !!r   c                     | j         S )z4Returns the current picker (vtkCellPicker).
        )r"   rv   s    r   	GetPickerzwxVTKRenderWindow.GetPicker  s     |r   c                    | j         r_| j         }|                    | j                                                   |                    | j                                                   |                                                                 r| j        r| j        r8| j        | 	                                k    r| j
                                         dS | 	                                r| j
                            t          | 	                                                     | j
                                         | 	                                | _        | j
                                         dS dS dS )z2Actually renders the VTK scene on screen.
        N)r   SetPositionr   GetPositionSetFocalPointGetFocalPointGetUpdateRegionIsEmptyrF   	GetHandler@   r   SetNextWindowInfostrWindowRemap)rf   lights     r   r   zwxVTKRenderWindow.Render  sT     	E&Ed1==??@@@ 3 A A C CDDD##%%--// 	,4= 	,} ,$..2B2B!B!B"))+++++!! 	, "44S9I9I5J5JKKK"..000 $ 0 0"))+++++	, 	,	, 	,r   c                    |                                 }|                                }| 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   r   g       @)GetXGetYr@   r2   GetRenderersGetNumberOfItemsr   InitTraversalrangeGetNextItemfloatGetViewportr    r!   GetActiveCamerar   	GetLightsr   r'   r(   )rf   r   xywindowXwindowY	renderersnumRenderersirenderervxvyvpxminvpyminvpxmaxvpymaxlightss                    r   r   z wxVTKRenderWindow.UpdateRenderer  s   
 JJLLJJLL-5577&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         S )z&Returns the current renderer.
        )r   rv   s    r   GetCurrentRendererz$wxVTKRenderWindow.GetCurrentRenderer/  s     $$r   c                    | j         r|                                }|                                }| j                            | j        |z
             | j                            || j        z
             | j                                         || _        || _        | j         	                                 | 
                                 dS dS )z$Rotates the scene (camera).
        N)r   r   r   r   Azimuthr'   	Elevationr(   OrthogonalizeViewUpResetCameraClippingRanger   )rf   r   r   r   s       r   r   zwxVTKRenderWindow.Rotate4  s       	

A

A''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 )z!Pans the scene (camera).
        r              N)r   r   r   r   r   r   GetParallelProjectionSetWorldPointWorldToDisplayGetDisplayPointSetDisplayPointr'   r(   DisplayToWorldGetWorldPointr   r   r    r!   r   )rf   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wxVTKRenderWindow.PanE  s      >	

A

A,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KKMMMMM}>	 >	r   c                    | j         r|                                }|                                }| j         }| j        }t	          j        dd| j        |z
  z            }| j        |z  | _        |                                r-|	                                |z  }|
                    |           n)|                    |           |                                 || _        || _        |                                  dS dS )z"Zooms the scene (camera).
        gRQ?g      ?N)r   r   r   r   mathpowr(   r   r  GetParallelScaleSetParallelScaleDollyr   r'   r   )rf   r   r   r   r   r	  
zoomFactorparallelScales           r   r   zwxVTKRenderWindow.Zoom  s       	

A

A,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   Nc                 n    | j         r| j                                          |                                  dS )zResets the camera.
        N)r   ResetCamerar   r   s     r   r   zwxVTKRenderWindow.Reset  s5       	0!--///r   c                 J   | j                                         }|                                }|                                 t	          d|          D ]<}|                                }|                                                                 =|                                  dS )z<Sets the current actor representation as wireframe.
        r   N)	r   	GetActorsr   r   r   r   GetPropertySetRepresentationToWireframer   rf   actors	numActorsr   actors        r   r   zwxVTKRenderWindow.Wireframe  s     &0022++--	q## 	? 	?A&&((E<<>>>>r   c                 J   | j                                         }|                                }|                                 t	          d|          D ]<}|                                }|                                                                 =|                                  dS )z:Sets the current actor representation as surface.
        r   N)	r   r'  r   r   r   r   r(  SetRepresentationToSurfacer   r*  s        r   r   zwxVTKRenderWindow.Surface  s     &0022++--	q## 	= 	=A&&((E::<<<<r   c                    | j         r^|                                }|                                }| 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 )zPicks an actor.
        r   r  N)r   r   r   r"   r@   r2   PickGetActorr#   r&   SetProperty
UnRegisterr(  Registerr$   r   )	rf   r   r   r   r   pickerr   r   r-  s	            r   r   zwxVTKRenderWindow.PickActor  sO      	

A

A,H\F#199;;GWKK7Q;?C999OO%%E!T))'4//!--d.EFFF'2243JKKK*.'$)!*.*;*G*G*I*I''001HIII!--d.BCCCKKMMMMM3	 	r   r   ).r<   
__module____qualname____doc__r=   rs   rw   rz   r|   rI   r_   r   ra   rV   r   rX   r   rc   re   rL   r   r   r   r   rP   r   r   r   r   rT   rZ   r[   r]   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   e   s        C7 C7 C7J' ' '' ' '% % %% % %      
  " " "  " " "# # #  
  
! ! !0% % %	& 	& 	&         0  "  
  
  
    
    
! ! !
" " "
  
, , ,.% % %N% % %
  "A A AF  2   
 
 

 
 
    r   r	   c                  h   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          } |            }|                                                    |            |             }	|	                    d
            |            }
|
                    |	                                            |            }|                    |
           |                    |           |                                 |                                 dS )z)Like it says, just a simple example.
    r   )vtkConeSource)vtkActorvtkPolyDataMappervtkRendererNFr	   )  r@  )r      )vtkmodules.vtkFiltersSourcesr;  vtkmodules.vtkRenderingCorer<  r=  r>  vtkmodules.vtkRenderingOpenGL2vtkmodules.vtkInteractionStyler0   AppFramer	   r   AddRendererSetResolutionSetInputConnectionGetOutputPort	SetMapperAddActorr:   MainLoop)r;  r<  r=  r>  
vtkmodulesappframewidgetrencone
coneMapper	coneActors               r   wxVTKRenderWindowConeExamplerW    sN    ;:::::TTTTTTTTTT)))))))) &--C HT22CCCEub))F
+--C
((---=??Dq""$$J!!$"4"4"6"6777

I
###LL 
JJLLLLLNNNNNr   __main__)r9  r  ossysr0   rC  r   r   r   r   r;   r   wx.glcanvasr>   r   r   r	   rW  r<   r   r   r   <module>r\     s	   >B             				 S S S S S S S S S S I	;+$I
 {k)
x	 x	 x	 x	 x		 x	 x	 x	x# # #J z  """"" r   