
    t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        yy)
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-y().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                  j                  ddd       d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        	 t)        |d         }|d= 	 |d	   }|d	= 	 |d
   }|d
= t,        j6                  t,        j8                  z  }	 ||d   z  }|d= g }	|}
|
r$|	j;                  |
       |
j=                         }
|
r$|	j?                          |	D ]  }
|
jA                  d        tB        jD                  dk(  r6tB        jG                  | |||||t,        jH                  jJ                  g       ntB        jG                  | |||||       tM               | _'        | jN                  jQ                  |jR                  |jT                         |r4| jN                  jW                          | jN                  jY                          d| _-        | j]                  t,        j^                  | j`                         | j]                  t,        jb                  d        | j]                  t,        jd                  | jf                         | j]                  t,        jh                  | jf                         | j]                  t,        jj                  | jf                         | j]                  t,        jl                  | jn                         | j]                  t,        jp                  | jn                         | j]                  t,        jr                  | jn                         | j]                  t,        jt                  | jv                         | j]                  t,        jx                  | jz                         | j]                  t,        j|                  | j~                         | j]                  t,        j                  | j                         | j]                  t,        j                  | j                         | j]                  t,        j                  | j                         | j]                  t,        j                  | j                         | j]                  t,        j                  | j                         | j]                  t,        j                  | j                         | j]                  t,        j                  | j                         y# t*        $ r d}Y kw xY w# t*        $ r t,        j.                  }Y w xY w# t*        $ r5 	 |j1                         }n# t2        $ r t,        j4                  }Y nw xY wY w xY w# t*        $ r Y w xY w)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                      y N )es    L/DATA/.local/lib/python3.12/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   sU    !%"! ! !$ *}%%a!,"&  
!  #% &
	"X,'F8	**~H:	&f:D6
 !=!==	BwK'E7 HHQKA  	
		AFF1I  +tVRXD%*+-;;+I+I*J  L tVRXD%*  , -.""4::t{{;44699; 			",,-		"))>: 			"##T%7%78		"""D$6$67		"$$d&8&89		"//4#3#34		"..$"2"23		"""D$4$45		"--/		"%%t':':;		"%%t':':;		"++t{{+
 			"++t~~.		"--.		"++t||,		"++t{{+		"""DOO4		"##T%5%56q  	F	  	*))H	*  	&&~~'! &~~&	&  		sl   &T 8T& U +V T#"T#&UU	VU! V!U=:V<U==VV	VVc                     || _         y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                     || _         yrn   r-   rq   s     r   SetStillUpdateRatez$wxVTKRenderWindow.SetStillUpdateRate   s     !%r   c                     | j                   S ru   ry   rv   s    r   GetStillUpdateRatez$wxVTKRenderWindow.GetStillUpdateRate  s     $$$r   c                 N    t        j                  |       }| j                          y)z>Handles the wx.EVT_PAINT event for wxVTKRenderWindow.
        N)r0   PaintDCRender)rf   eventdcs      r   rI   zwxVTKRenderWindow.OnPaint
  s     ZZr   c                     t         j                  dk7  r/|j                         \  }}| j                  j	                  ||       | j                  |       | j                          y)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  sJ     ;;+%!MMOME6&&uf5Er   c                      yOverridable event.
        Nr   rf   r   s     r   r   zwxVTKRenderWindow.OnSize       	r   c                      yr   r   r   s     r   ra   zwxVTKRenderWindow.OnMove  r   r   c                 H    | j                  |       | j                  |       y)zMHandles the wx.EVT_ENTER_WINDOW event for
        wxVTKRenderWindow.
        N)UpdateRendererOnEnterWindowr   s     r   rV   z wxVTKRenderWindow._OnEnterWindow$  s      	E"5!r   c                     | j                   dk(  r4t        j                  j                         | _         | j	                          yyr   )r+   r0   Window	FindFocusSetFocusr   s     r   r   zwxVTKRenderWindow.OnEnterWindow,  s2     ??d" ii113DOMMO #r   c                 &    | j                  |       y)zMHandles the wx.EVT_LEAVE_WINDOW event for
        wxVTKRenderWindow.
        N)OnLeaveWindowr   s     r   rX   z wxVTKRenderWindow._OnLeaveWindow3  s     	5!r   c                 `    | j                   r"| j                   j                          d| _         yyr   )r+   r   r   s     r   r   zwxVTKRenderWindow.OnLeaveWindow9  s'     ??OO$$&"DO r   c                      yr   r   r   s     r   rc   zwxVTKRenderWindow.OnSetFocus@  r   r   c                      yr   r   r   s     r   re   zwxVTKRenderWindow.OnKillFocusE  r   r   c                 <   | j                   j                  | j                         |j                         rd}n(|j	                         rd}n|j                         rd}nd}|r)| j                  s|| _        t        r| j                          | j                  |       y)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    
 	//0G0GH??F^^FFF $,,!'D!!#% r   c                 
   | j                   s| j                  |       |j                         r| j                  |       y|j	                         r| j                  |       y|j                         r| j                  |       yyr   )r)   r   r   
OnLeftDownr   OnRightDownr   OnMiddleDownr   s     r   r   zwxVTKRenderWindow.OnButtonDownb  sf     zz&>>OOE"__U#e$  r   c                     | j                   s8|j                         rd| _         y|j                         rd| _         yd| _         yy)r   ZoomPanRotateN)r)   ControlDown	ShiftDownr   s     r   r   zwxVTKRenderWindow.OnLeftDownp  s;     zz  "#
""
%
 r   c                 ,    | j                   sd| _         yy)r   r   Nr)   r   s     r   r   zwxVTKRenderWindow.OnRightDown{  s     zzDJ r   c                 ,    | j                   sd| _         yy)r   r   Nr   r   s     r   r   zwxVTKRenderWindow.OnMiddleDown  s     zzDJ r   c                 V   | j                   j                  | j                         |j                         rd}n(|j	                         rd}n|j                         rd}nd}| j                  r,|| j                  k(  rt        r| j                          d| _        | j                  |       y)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    
 	//0E0EF==?F\\^F^^FF &D,>,>">!!#!%Dr   c                 ,   |j                         r| j                  |       nC|j                         r| j                  |       n!|j	                         r| j                  |       | j                  r| j                  r| j                          d| _        yr   )	r   OnLeftUpr   	OnRightUpr   
OnMiddleUpr)   r   r   r   s     r   r   zwxVTKRenderWindow.OnButtonUp  sf     <<>MM% ]]_NN5!^^OOE" ::$$
r   c                      yr   r   r   s     r   r   zwxVTKRenderWindow.OnLeftUp  r   r   c                      yr   r   r   s     r   r   zwxVTKRenderWindow.OnRightUp  r   r   c                      yr   r   r   s     r   r   zwxVTKRenderWindow.OnMiddleUp  r   r   c                     | j                   dk(  r| j                  |       y| j                   dk(  r| j                  |       y| j                   dk(  r| j                  |       yy)r   r   r   r   N)r)   r   r   r   r   s     r   rT   zwxVTKRenderWindow.OnMotion  sP     ::HHUOZZ8#KKZZ6!IIe "r   c                      yr   r   r   s     r   rZ   zwxVTKRenderWindow.OnChar  r   r   c                    |j                         t        d      k(  r| j                  |       |j                         t        d      k(  r| j                          |j                         t        d      k(  r| j	                          |j                         t        d      k(  r| j                  |       |j                         dk  r| j                  |       yy)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)LLNS)NN5!#KK $r   c                      y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                  j                                |j	                  | j                  j                                | j                         j                         r| j                  r| j                  r8| j                  | j                         k(  r| j                  j                          y| j                         r|| j                  j                  t        | j                                      | j                  j                          | j                         | _        | j                  j                          yyy)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  s    &&Ed11==?@ 3 3 A A CD##%--/4==}}$..2B!B""))+! ""44S9I5JK""..0 $ 0""))+ "	 4Ar   c                 d   |j                         }|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   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   
 JJLJJL--557&&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                   S )z&Returns the current renderer.
        )r   rv   s    r   GetCurrentRendererz$wxVTKRenderWindow.GetCurrentRenderer/  s     $$$r   c                    | j                   r|j                         }|j                         }| j                  j	                  | j
                  |z
         | j                  j                  || j                  z
         | j                  j                          || _        || _        | j                   j                          | j                          yy)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))!dkk/:335DKDK!!::<KKM !r   c                    | j                   r|j                         }|j                         }| 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)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++-&&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KKM} !r   c                    | j                   r|j                         }|j                         }| j                   }| j                  }t	        j
                  dd| j                  |z
  z        }| j                  |z  | _        |j                         r%|j                         |z  }|j                  |       n!|j                  |       |j                          || _        || _        | j                          yy)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 $ 1 1J >D++- & 7 7 9* D''6Z(113DKDKKKM) !r   Nc                 p    | j                   r| j                   j                          | j                          y)zResets the camera.
        N)r   ResetCamerar   r   s     r   r   zwxVTKRenderWindow.Reset  s(       !!--/r   c                    | j                   j                         }|j                         }|j                          t	        d|      D ]0  }|j                         }|j                         j                          2 | j                          y)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  sq     &&002++-	q#A&&(E<<> $ 	r   c                    | j                   j                         }|j                         }|j                          t	        d|      D ]0  }|j                         }|j                         j                          2 | j                          y)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  sq     &&002++-	q#A&&(E::< $ 	r   c                    | j                   rt|j                         }|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)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  s6      

A

A,,H\\F#1199;GWKK7Q;?C9OO%E!!T)''4/!!--d.E.EF''2243J3JK*.'$)!*.*;*;*G*G*I'''001H1HI!!--d.B.BCKKM3 !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7J''%%
""#

!0%	& 0"




!
"

,.%N%
"AF2

r   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      } |       }|j                         j                  |        |        }	|	j                  d
        |       }
|
j                  |	j!                                 |       }|j#                  |
       |j%                  |       |j'                          |j)                          y)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    s     ;TT)) &&-C HHT22CEub)F
-C
((-?Dq"$J!!$"4"4"67
I
#LL 
JJLLLNr   __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 II	;;+$$I
 {{k)
x		 x	x#J z " r   