
    +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             dS dS )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dS )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         }n# t          $ r t                      }Y nw xY w	 |d         r|                                 |d= n# t          $ r Y nw xY w|                    d          rd| _        |d= nd| _        |                    d          |d<   t          j	        
                    | |d||           d| _        d| _        d	| _        d| _        d| _        d| _        t#                      | _        d| _        t)                      | _        | j                            ddd           d| _        d| _        d
| _        d| _        d| _        d| _        d| _        |                                  dS )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        Y/DATA/AppData/hermes/venv/lib/python3.11/site-packages/vtkmodules/tk/vtkTkRenderWidget.pyr   zvtkTkRenderWidget.__init__A   s     	vy)))	-d8LL 	- 	- 	-*,,LLL	-	(|  11333h< 	 	 	D	 66"## 	#!"D#$$!"D223DEE4f.A3KKK $"! ! !$#*}}%%a!,,,"& #% &   	!!!!!s    ::A 
A+*A+c                 t    |dk    r|                                  S t          | j        j        dz   |z             )N_RenderWindowz has no attribute named )GetRenderWindowAttributeError	__class____name__)r,   attrs     r1   __getattr__zvtkTkRenderWidget.__getattr__   sJ    
 ?""'')))T^4()+/0 1 1 	1    c                    |                      d| fd           |                      d| fd           |                      d| fd           |                      d| fd           |                      d	| fd
           |                      d| fd           |                      d| fd           |                      d| fd           |                      d| fd           |                      d| fd           |                      d| fd           | j        r3|                      d| fd           |                      d| fd           n|                      d| fd           |                      d| fd           dS )z,
        Bind some default actions.
        z<ButtonPress>c                 B    |                     | j        | j                  S N)StartMotionxyess     r1   <lambda>z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    1==QS#9#9 r:   z<ButtonRelease>c                 B    |                     | j        | j                  S r=   )	EndMotionr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>       1;;qs13#7#7 r:   z<B1-Motion>c                 B    |                     | j        | j                  S r=   )Rotater?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    188AC#4#4 r:   z<B2-Motion>c                 B    |                     | j        | j                  S r=   Panr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>       155QS>> r:   z<B3-Motion>c                 B    |                     | j        | j                  S r=   )Zoomr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    166!#ac?? r:   z<Shift-B1-Motion>c                 B    |                     | j        | j                  S r=   rK   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   rM   r:   z<KeyPress-r>c                 B    |                     | j        | j                  S r=   )Resetr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    17713qs#3#3 r:   z<KeyPress-u>c                 *    |                                 S r=   )	deiconifyrA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>       1;;== r:   z<KeyPress-w>c                 *    |                                 S r=   )	WireframerA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   rU   r:   z<KeyPress-s>c                 *    |                                 S r=   )SurfacerA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    199;; r:   z<KeyPress-p>c                 B    |                     | j        | j                  S r=   )	PickActorr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   rG   r:   z<Enter>c                 B    |                     | j        | j                  S r=   Enterr?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>       qwwqs13'7'7 r:   z<Leave>c                 B    |                     | j        | j                  S r=   )Leaver?   r@   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   r_   r:   c                 B    |                     | j        | j                  S r=   r]   rA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   r_   r:   z<Expose>c                 *    |                                 S r=   )ExposerA   s     r1   rD   z6vtkTkRenderWidget.BindTkRenderWidget.<locals>.<lambda>   s    188:: r:   N)bindr   r,   s    r1   r+   z$vtkTkRenderWidget.BindTkRenderWidget   s>    			/!999	; 	; 	;		#!777	9 	9 	9		-!444	6 	6 	6		-!111	3 	3 	3		-!222	4 	4 	4		%!111	3 	3 	3		.!333	5 	5 	5		.!000	2 	2 	2		.!000	2 	2 	2		.!...	0 	0 	0		.!777	9 	9 	9 	9IIi!%7779 9 9IIi!%7779 9 9 9 IIo!%7779 9 9		*!---	/ 	/ 	/ 	/ 	/r:   c                     | j         S r=   )r   rf   s    r1   GetZoomFactorzvtkTkRenderWidget.GetZoomFactor   s      r:   c                     || _         dS 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                     || _         dS rj   r'   rm   s     r1   SetStillUpdateRatez$vtkTkRenderWidget.SetStillUpdateRate   s     !%r:   c                     | j         S rq   rt   rf   s    r1   GetStillUpdateRatez$vtkTkRenderWidget.GetStillUpdateRate   s     $$r:   c                 v    | j                             | j        d          dd          }t          d|z            S )Nr4      z_%s_vtkRenderWindow_p)r   call_wr   )r,   addrs     r1   r4   z!vtkTkRenderWidget.GetRenderWindow   s7    w||DG%677;6=>>>r:   c                     | j         S r=   )r    rf   s    r1   	GetPickerzvtkTkRenderWidget.GetPicker   s
    |r:   c                     | j         sWd| _         | j                            d          s|                                  | j                                         d| _         d S d S )Nr   vtkCocoaRenderWindowr   )r*   r3   IsAupdateRenderrf   s    r1   rd   zvtkTkRenderWidget.Expose   sd     	 DO&**+ABB %%'''DOOO	  	 r:   c                    | j         r_| j         }|                    | j                                                   |                    | j                                                   | j                                         d S r=   )r   SetPositionr   GetPositionSetFocalPointGetFocalPointr3   r   )r,   lights     r1   r   zvtkTkRenderWidget.Render   sw     	E&Ed1==??@@@ 3 A A C CDDD!!#####r:   c                    |                                  }|                                 }| 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       @)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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 r=   )r   rf   s    r1   GetCurrentRendererz$vtkTkRenderWidget.GetCurrentRenderer
  s    $$r:   c                     |                                  | _        |                                  |                     ||           d S r=   )	focus_getr%   focusr>   r,   r?   r@   s      r1   r^   zvtkTkRenderWidget.Enter  s<    ~~''

Ar:   c                 R    | j         d k    r| j                                          d S d S r=   )r%   r   r   s      r1   ra   zvtkTkRenderWidget.Leave  s1    Nd""N  """"" #"r:   c                     |                                                      | j                   |                     ||           d S r=   )r4   ro   r&   r   r   s      r1   r>   zvtkTkRenderWidget.StartMotion  sA    33D4KLLLAa     r:   c                     |                                                      | j                   | j        r|                                  d S d S r=   )r4   ro   r'   r   r   r   s      r1   rF   zvtkTkRenderWidget.EndMotion  sK    33D4IJJJ  	KKMMMMM	 	r:   c                 H   | j         r| j                            | j        |z
             | j                            || j        z
             | j                                         || _        || _        | j                                          |                                  d S d S r=   )	r   r   Azimuthr(   	Elevationr)   OrthogonalizeViewUpResetCameraClippingRanger   r   s      r1   rI   zvtkTkRenderWidget.Rotate  s      
	''a888))!dk/:::33555DKDK!::<<<KKMMMMM
	 
	r:   c                 :   | j         r| j         }| j        }|                                \  }}}|                                \  }}	}
|                                rl|                    ||	|
d           |                                 |                                \  }}}|                    ||z
  | j	        z   ||z   | j
        z
  |           |                                 |                                \  }}}}|                    |||           |                    |||d           |                                 |                                \  }}}|                    ||z
  | j	        z   ||z   | j
        z
  |           |                                 |                                \  }}}}|                    |||           n/|                                \  }}	}
|                    ||	|
d           |                                 |                                }|d         }| j        || j	        z
  z   }| j        || j
        z
  z
  }|                    |||           |                                 |                                \  }}}}|dk    r||z  }||z  }||z  }|                    ||z
  |z   |	|z
  |	z   |
|z
  |
z              |                    ||z
  |z   |	|z
  |z   |
|z
  |z              || _	        || _
        |                                  d S d S )Nr              )r   r   r   r   GetParallelProjectionSetWorldPointWorldToDisplayGetDisplayPointSetDisplayPointr(   r)   DisplayToWorldGetWorldPointr   r   r   r   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,,.. 0B&&wwwsCCC'')))#33552b((Adk)9)+Adk)9)+- - - '')))&44662b$$R2...&&wwwsCCC'')))#33552b((Adk)9)+Adk)9)+- - - '')))&44662b""2b,,,, -3,@,@,B,B)&&wwwsCCC'')))!1133#AY
/1t{?C/1t{?C((DDD'')))4<4J4J4L4L1sNN%goG%goG%goG$$g&77%B&-&77%B&-&77%BD D D ""Gg$5#@$+g$5#@$+g$5#@B B B DKDKKKMMMMMy<	 <	r:   c                    | j         r| j         }| j        }t          j        dd| j        |z
  z            }| j        |z  | _        |                                r-|                                |z  }|                    |           n)|	                    |           |
                                 || _        || _        |                                  d S d S )NgRQ?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 $ 1J >D++-- 4 & 7 7 9 9* D''6666Z(((11333DKDKKKMMMMM%	 	r:   c                 n    | j         r| j                                          |                                  d S r=   )r   ResetCamerar   r   s      r1   rR   zvtkTkRenderWidget.Reset  s3      	0!--///r:   c                 J   | j                                         }|                                }|                                 t	          d|          D ]<}|                                }|                                                                 =|                                  d S Nr   )	r   	GetActorsr   r   r   r   GetPropertySetRepresentationToWireframer   r,   actors	numActorsr   actors        r1   rW   zvtkTkRenderWidget.Wireframe  s    &0022++--	q## 	? 	?A&&((E<<>>>>r:   c                 J   | j                                         }|                                }|                                 t	          d|          D ]<}|                                }|                                                                 =|                                  d S r   )	r   r   r   r   r   r   r   SetRepresentationToSurfacer   r   s        r1   rY   zvtkTkRenderWidget.Surface  s    &0022++--	q## 	= 	=A&&((E::<<<<r:   c                 r   | j         r.| 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 )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99))++H$,,'4//$001HIII'2243JKKK*.'D  '/$*.*>*J*J*L*L''001HIII$001EFFFKKMMMMM/	 	r:   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" D" D" D"L1 1 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          } |            }|                                                    |            |             }|                    d            |            }	|	                    |                                            |            }
|
                    |	           |                    |
           |                                 |                                 dS )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TTTTTTTT)))))))) :<<D T3777D
+--C&&s+++=??Dq""$$J!!$"4"4"6"6777

I
###LL 	IIKKK 	MMOOOOOr:   __main__)r   
__future__r   r   ossysr   r   r   r   r   r   r   r
   r  r7   r   r:   r1   <module>r     s   * *X ' & & & & &             S S S S S S S S S S  : : : : : :} } } } } } } }@" " "H z      r:   