
    tj+@                         d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	 ddl
Z
ddlmZ  G d de
j                        Zd	 Zed
k(  r e        yy)a  
A simple vtkTkRenderWidget for tkinter.

Created by David Gobbi, April 1999

May ??, 1999  - Modifications performed by Heather Drury,
                to rewrite _pan to match method in TkInteractor.tcl
May 11, 1999  - Major rewrite by David Gobbi to make the
                interactor bindings identical to the TkInteractor.tcl
                bindings.
July 14, 1999 - Added modification by Ken Martin for VTK 2.4, to
                use vtk widgets instead of Togl.
Aug 29, 1999  - Renamed file to vtkRenderWidget.py
Nov 14, 1999  - Added support for keyword 'rw'
Mar 23, 2000  - Extensive but backwards compatible changes,
                improved documentation

A few important notes:

This class is meant to be used as a base-class widget for
doing VTK rendering in Python.

In VTK (and C++) there is a very important distinction between
public ivars (attributes in pythonspeak), protected ivars, and
private ivars.  When you write a python class that you want
to 'look and feel' like a VTK class, you should follow these rules.

1) Attributes should never be public.  Attributes should always be
   either protected (prefixed with a single underscore) or private
   (prefixed with a double underscore).  You can provide access to
   attributes through public Set/Get methods (same as VTK).

2) Use a single underscore to denote a protected attribute, e.g.
   self._RenderWindow is protected (can be accessed from this
   class or a derived class).

3) Use a double underscore to denote a private attribute, e.g.
   self.__InExpose cannot be accessed outside of this class.

All attributes should be 'declared' in the __init__() function
i.e. set to some initial value.  Don't forget that 'None' means
'NULL' - the python/vtk wrappers guarantee their equivalence.
    )absolute_importN)vtkCellPickervtkPropertyvtkRenderWindow   )vtkLoadPythonTkWidgetsc                       e Zd ZdZi f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y)vtkTkRenderWidgeta4  
    A vtkTkRenderWidget for Python.

    Use GetRenderWindow() to get the vtkRenderWindow.

    Create with the keyword stereo=1 in order to generate a
    stereo-capable window.

    Create with the keyword focus_on_enter=1 to enable
    focus-follows-mouse.  The default is for a click-to-focus mode.
    c                    t        |j                         	 |d   }	 |d   r|j	                          |d= |j                  d      rd| _        |d= nd| _        |j                  d      |d<   t        j                  j                  | |d||       d| _        d| _        d	| _        d| _        d| _        d| _        t#               | _        d| _        t)               | _        | j*                  j-                  ddd       d| _        d| _        d
| _        d| _        d| _        d| _        d| _        | j=                          y# t        $ r t               }Y 7w xY w# t        $ r Y .w xY w)a}  
        Constructor.

        Keyword arguments:

          rw -- Use passed render window instead of creating a new one.

          stereo -- If True, generate a stereo-capable window.
          Defaults to False.

          focus_on_enter -- If True, use a focus-follows-mouse mode.
          Defaults to False where the widget will use a click-to-focus
          mode.
        rwstereofocus_on_enterr   r   r   r
   N      ?   g-C6?)r   tkKeyErrorr   StereoCapableWindowOnget_FocusOnEnterGetAddressAsStringtkinterWidget__init___CurrentRenderer_CurrentCamera_CurrentZoom_CurrentLight_ViewportCenterX_ViewportCenterYr   _Picker_PickedAssemblyr   _PickedPropertySetColor_PrePickedProperty	_OldFocus_DesiredUpdateRate_StillUpdateRate_LastX_LastY_vtkTkRenderWidget__InExposeBindTkRenderWidget)selfmastercnfkwrenderWindows        L/DATA/.local/lib/python3.12/site-packages/vtkmodules/tk/vtkTkRenderWidget.pyr   zvtkTkRenderWidget.__init__A   sm     	vyy)	-d8L	(|113h<
 66"#!"D#$!"D223DE4f.A3K $"! ! !$#*}%%a!,"& #% &   	!a  	-*,L	-  		s"   D= E =EE	E$#E$c                 v    |dk(  r| j                         S t        | j                  j                  dz   |z         )N_RenderWindowz has no attribute named )GetRenderWindowAttributeError	__class____name__)r,   attrs     r1   __getattr__zvtkTkRenderWidget.__getattr__   sD    
 ?"''))T^^44()+/0 1 	1    c                    | j                  d| fd       | j                  d| fd       | j                  d| fd       | j                  d| fd       | j                  d	| fd
       | j                  d| fd       | j                  d| fd       | j                  d| fd       | j                  d| fd       | j                  d| fd       | j                  d| fd       | j                  r+| j                  d| fd       | j                  d| fd       n| j                  d| fd       | j                  d| fd       y)z,
        Bind some default actions.
        z<ButtonPress>c                 N    |j                  | j                  | j                        S N)StartMotionxyess     r1   <lambda>z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    1==QSS#9r:   z<ButtonRelease>c                 N    |j                  | j                  | j                        S r=   )	EndMotionr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>       1;;qss133#7r:   z<B1-Motion>c                 N    |j                  | j                  | j                        S r=   )Rotater?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    188ACC#4r:   z<B2-Motion>c                 N    |j                  | j                  | j                        S r=   Panr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>       155QSS>r:   z<B3-Motion>c                 N    |j                  | j                  | j                        S r=   )Zoomr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    166!##acc?r:   z<Shift-B1-Motion>c                 N    |j                  | j                  | j                        S r=   rK   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   rM   r:   z<KeyPress-r>c                 N    |j                  | j                  | j                        S r=   )Resetr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    177133qss#3r:   z<KeyPress-u>c                 "    |j                         S r=   )	deiconifyrA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   
    1;;=r:   z<KeyPress-w>c                 "    |j                         S r=   )	WireframerA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   rU   r:   z<KeyPress-s>c                 "    |j                         S r=   )SurfacerA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s
    199;r:   z<KeyPress-p>c                 N    |j                  | j                  | j                        S r=   )	PickActorr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   rG   r:   z<Enter>c                 N    |j                  | j                  | j                        S r=   Enterr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>       qwwqss133'7r:   z<Leave>c                 N    |j                  | j                  | j                        S r=   )Leaver?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   r_   r:   c                 N    |j                  | j                  | j                        S r=   r]   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   r_   r:   z<Expose>c                 "    |j                         S r=   )ExposerA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s
    188:r:   N)bindr   r,   s    r1   r+   z$vtkTkRenderWidget.BindTkRenderWidget   s=    			/!9	;		#!7	9		-!4	6		-!1	3		-!2	4		%!1	3		.!3	5		.!0	2		.!0	2		.!.	0		.!7	9IIi!%79IIi!%79 IIo!%79		*!-	/r:   c                     | j                   S r=   )r   rf   s    r1   GetZoomFactorzvtkTkRenderWidget.GetZoomFactor   s       r:   c                     || _         yKMirrors the method with the same name in
        vtkRenderWindowInteractor.Nr&   r,   rates     r1   SetDesiredUpdateRatez&vtkTkRenderWidget.SetDesiredUpdateRate   s     #'r:   c                     | j                   S rk   rl   rf   s    r1   GetDesiredUpdateRatez&vtkTkRenderWidget.GetDesiredUpdateRate   s     &&&r:   c                     || _         yrj   r'   rm   s     r1   SetStillUpdateRatez$vtkTkRenderWidget.SetStillUpdateRate   s     !%r:   c                     | j                   S rq   rt   rf   s    r1   GetStillUpdateRatez$vtkTkRenderWidget.GetStillUpdateRate   s     $$$r:   c                 p    | j                   j                  | j                  d      dd  }t        d|z        S )Nr4      z_%s_vtkRenderWindow_p)r   call_wr   )r,   addrs     r1   r4   z!vtkTkRenderWidget.GetRenderWindow   s3    ww||DGG%67;6=>>r:   c                     | j                   S r=   )r    rf   s    r1   	GetPickerzvtkTkRenderWidget.GetPicker   s    ||r:   c                     | j                   sTd| _         | j                  j                  d      s| j                          | j                  j	                          d| _         y y )Nr   vtkCocoaRenderWindowr   )r*   r3   IsAupdateRenderrf   s    r1   rd   zvtkTkRenderWidget.Expose   sL    DO&&**+AB%%'DO  r:   c                    | j                   r^| j                   }|j                  | j                  j                                |j	                  | j                  j                                | j                  j                          y r=   )r   SetPositionr   GetPositionSetFocalPointGetFocalPointr3   r   )r,   lights     r1   r   zvtkTkRenderWidget.Render   sb    &&Ed11==?@ 3 3 A A CD!!#r:   c                 *   | 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       @)winfo_widthwinfo_heightr3   GetRenderersGetNumberOfItemsr   InitTraversalrangeGetNextItemfloatGetViewportr   r   GetActiveCamerar   	GetLightsr   r(   r)   )r,   r?   r@   windowXwindowY	renderersnumRenderersirenderervxvyvpxminvpyminvpxmaxvpymaxlightss                   r1   UpdateRendererz vtkTkRenderWidget.UpdateRenderer   s   
 ""$##%&&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 r=   )r   rf   s    r1   GetCurrentRendererz$vtkTkRenderWidget.GetCurrentRenderer
  s    $$$r:   c                 r    | j                         | _        | j                          | j                  ||       y r=   )	focus_getr%   focusr>   r,   r?   r@   s      r1   r^   zvtkTkRenderWidget.Enter  s)    ~~'

Ar:   c                 X    | j                   d k7  r| j                   j                          y y r=   )r%   r   r   s      r1   ra   zvtkTkRenderWidget.Leave  s#    NNd"NN  " #r:   c                 z    | j                         j                  | j                         | j                  ||       y r=   )r4   ro   r&   r   r   s      r1   r>   zvtkTkRenderWidget.StartMotion  s/    33D4K4KLAa r:   c                     | j                         j                  | j                         | j                  r| j	                          y y r=   )r4   ro   r'   r   r   r   s      r1   rF   zvtkTkRenderWidget.EndMotion  s6    33D4I4IJ  KKM !r:   c                 b   | j                   r| j                  j                  | j                  |z
         | j                  j	                  || j
                  z
         | j                  j                          || _        || _        | j                   j                          | j                          y y r=   )	r   r   Azimuthr(   	Elevationr)   OrthogonalizeViewUpResetCameraClippingRanger   r   s      r1   rI   zvtkTkRenderWidget.Rotate  s      ''a8))!dkk/:335DKDK!!::<KKM !r:   c                    | j                   r| j                   }| j                  }|j                         \  }}}|j                         \  }}	}
|j	                         rH|j                  ||	|
d       |j                          |j                         \  }}}|j                  ||z
  | j                  z   ||z   | j                  z
  |       |j                          |j                         \  }}}}|j                  |||       |j                  |||d       |j                          |j                         \  }}}|j                  ||z
  | j                  z   ||z   | j                  z
  |       |j                          |j                         \  }}}}|j                  |||       n|j                         \  }}	}
|j                  ||	|
d       |j                          |j                         }|d   }| j                  || j                  z
  z   }| j                   || j                  z
  z
  }|j                  |||       |j                          |j                         \  }}}}|dk7  r||z  }||z  }||z  }|j                  ||z
  |z   |	|z
  |	z   |
|z
  |
z          |j                  ||z
  |z   |	|z
  |z   |
|z
  |z          || _	        || _
        | j#                          y y )Nr              )r   r   r   r   GetParallelProjectionSetWorldPointWorldToDisplayGetDisplayPointSetDisplayPointr(   r)   DisplayToWorldGetWorldPointr   r   r   r   r   )r,   r?   r@   r   camerapPoint0pPoint1pPoint2fPoint0fPoint1fPoint2fxfyfzfwdPoint
focalDepthaPoint0aPoint1rPoint0rPoint1rPoint2rPoint3s                          r1   rL   zvtkTkRenderWidget.Pan,  s     ,,H((F(.(:(:(<%WWW(.(<(<(>%WWW,,.&&wwwsC'')#3352b((Adkk)9)+Adkk)9)+- '')&4462b$$R2.&&wwwsC'')#3352b((Adkk)9)+Adkk)9)+- '')&4462b""2b, -3,@,@,B)&&wwwsC'')!113#AY
//1t{{?C//1t{{?C((D'')4<4J4J4L1sN%goG%goG%goG$$g&77%B&-&77%B&-&77%BD ""Gg$5#@$+g$5#@$+g$5#@B DKDKKKMy !r:   c                    | j                   r| j                   }| j                  }t        j                  dd| j                  |z
  z        }| j
                  |z  | _        |j                         r%|j                         |z  }|j                  |       n!|j                  |       |j                          || _        || _        | j                          y y )NgRQ?g      ?)r   r   mathpowr)   r   r   GetParallelScaleSetParallelScaleDollyr   r(   r   )r,   r?   r@   r   r   
zoomFactorparallelScales          r1   rO   zvtkTkRenderWidget.Zoomk  s      ,,H((F$T[[1_(=?J $ 1 1J >D++- & 7 7 9* D''6Z(113DKDKKKM% !r:   c                 p    | j                   r| j                   j                          | j                          y r=   )r   ResetCamerar   r   s      r1   rR   zvtkTkRenderWidget.Reset  s&      !!--/r:   c                    | j                   j                         }|j                         }|j                          t	        d|      D ]0  }|j                         }|j                         j                          2 | j                          y Nr   )	r   	GetActorsr   r   r   r   GetPropertySetRepresentationToWireframer   r,   actors	numActorsr   actors        r1   rW   zvtkTkRenderWidget.Wireframe  so    &&002++-	q#A&&(E<<> $ 	r:   c                    | j                   j                         }|j                         }|j                          t	        d|      D ]0  }|j                         }|j                         j                          2 | j                          y r   )	r   r   r   r   r   r   r   SetRepresentationToSurfacer   r   s        r1   rY   zvtkTkRenderWidget.Surface  so    &&002++-	q#A&&(E::< $ 	r:   c                    | j                   rG| 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 )Nr   r   )r   r    r   PickGetAssemblyr!   r$   SetProperty
UnRegisterr   Registerr"   r   )r,   r?   r@   r   pickerr   assemblys          r1   r[   zvtkTkRenderWidget.PickActor  s     ,,H\\F'')GKK7Q;?C9))+H$$,''4/$$001H1HI''2243J3JK*.'D '/$*.*>*>*J*J*L'''001H1HI$$001E1EFKKM/ !r:   N)r7   
__module____qualname____doc__r   r9   r+   rh   ro   rr   ru   rw   r4   r~   rd   r   r   r   r^   ra   r>   rF   rI   rL   rO   rR   rW   rY   r[    r:   r1   r
   r
   5   s    
 $& D"L1#/J!'
'
%
%
? $$L%
#!
=~*r:   r
   c                     ddl m}  ddlm}m}m} ddl}ddl}t        j                         }t        |dd      } |       }|j                         j                  |        |        }|j                  d        |       }	|	j                  |j                                 |       }
|
j!                  |	       |j#                  |
       |j%                          |j'                          y)z(Like it says, just a simple example
    r   )vtkConeSource)vtkActorvtkPolyDataMappervtkRendererNi,  )widthheight   )vtkmodules.vtkFiltersSourcesr   vtkmodules.vtkRenderingCorer   r   r   vtkmodules.vtkRenderingOpenGL2vtkmodules.vtkInteractionStyler   Tkr
   r4   AddRendererSetResolutionSetInputConnectionGetOutputPort	SetMapperAddActorpackmainloop)r   r   r   r   
vtkmodulesrootpanerencone
coneMapper	coneActors              r1   vtkRenderWidgetConeExampler    s     ;TT)) ::<D T37D
-C&&s+?Dq"$J!!$"4"4"67
I
#LL 	IIK 	MMOr:   __main__)r   
__future__r   r   ossysr   r   r   r   r   r   r   r
   r  r7   r   r:   r1   <module>r     sP   *X '   S S  :} }@"H z  r:   