
    TiY%                     
   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ  ej        ded	            G d
 dej        j                  Z G d dej        j                  Z G d dej                  ZdS )z
widget.py
-------------

A widget which can visualize trimesh.Scene objects in a glooey window.

Check out an example in `examples/widget.py`
    N)gl)	rendering)	Trackball)SceneViewer_geometry_hashz`trimesh.viewer.widget` is deprecated and will be removed in January 2026, please vendor `widget.py` into your own project. It will be moved to the `examples` of trimesh and will no longer be importable!   )category
stacklevelc                   >     e Zd Z	 	 	 d fd	Zd Zd Zd Zd Z xZS )	
SceneGroupN   r   c                     t                                          |           || _        || _        |g d}|| _        || _        d S )N)Gz?r   r   g      ?)super__init__rectscene_background_pixel_per_point)selfr   r   
backgroundpixel_per_pointparent	__class__s         O/DATA/AppData/hermes/venv/lib/python3.11/site-packages/trimesh/viewer/widget.pyr   zSceneGroup.__init__    sR     	   	
000J% /    c                 2   t          | j        d         | j        j        z            }t          | j        d         | j        j        z            }t          | j        d         | j        j        z            }t          | j        d         | j        j        z            }t          j        t          j	                   t          j
        t          j                   t          j        ||||           t          j                    | _        t          j        t          j        | j                   t          j        dz              | _        t          j        t          j        | j                   t          j        ||||           t          j        t          j                   t          j                     t          j                     d}d}t          j        | j        j        j        d         ||z  ||           t          j        t          j                   d S )Nr   r      g{Gz?g     @@)intr   r   leftbottomwidthheightr   glPushAttribGL_ENABLE_BITglEnableGL_SCISSOR_TEST	glScissorGLint_modeglGetIntegervGL_MATRIX_MODE	_viewportGL_VIEWPORT
glViewportglMatrixModeGL_PROJECTIONglPushMatrixglLoadIdentitygluPerspectiver   camerafovGL_MODELVIEW)r   r!   r"   r#   r$   nearfars          r   	_set_viewzSceneGroup._set_view2   s   4(+din<==T*1-	0@@AAD)!,ty>??T*1-	0@@AA
()))
B&'''
T65&111h\\

*DJ777(Q,))
888
dFE6222
()))


$*+/2EFND#NNN
(((((r   c                 P   t          j        t           j                   t          j                     t          j        | j        j                   t          j        | j        d         | j        d         | j        d         | j        d                    t          j                     d S )Nr   r   r      )	r   r1   r2   glPopMatrixr+   valuer0   r.   glPopAttribr   s    r   _unset_viewzSceneGroup._unset_viewJ   s    
()))


()))
N1N1N1N1		
 	
 	
 	r   c                 |   |                                   t          j        | j                   t          j        | j        j                   t          j                     t          j                     t          j	                     t          j
        | j                   t          j        t          j        t          j        z             t          j                     t          j                     t          j        t%          j        t(          j                            | j        j                                       d S N)r;   r   _gl_set_backgroundr   _gl_enable_depthr   r6   _gl_enable_color_material_gl_enable_blending_gl_enable_smooth_lines_gl_enable_lightingr   glClearGL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BITr3   r4   glMultMatrixfr   matrix_to_glnplinalginvcamera_transformrA   s    r   	set_statezSceneGroup.set_stateW   s    &t'7888$TZ%6777-///')))+---'
333

2)B,BBCCC


"29==1L#M#MNN	
 	
 	
 	
 	
r   c                 z    t          j                     t          j                     |                                  d S rD   )r   r>   r   _gl_unset_backgroundrB   rA   s    r   unset_statezSceneGroup.unset_statei   s7    
(***r   )Nr   N)	__name__
__module____qualname__r   r;   rB   rT   rW   __classcell__r   s   @r   r   r      s        
 0 0 0 0 0 0$) ) )0  
 
 
$      r   r   c                   ,     e Zd Zd fd	Zd Zd Z xZS )	MeshGroupNc                     t                                          |           |t          j        d          }|| _        || _        d S )Nr   )r   r   rP   eye	transformtexture)r   ra   rb   r   r   s       r   r   zMeshGroup.__init__r   s@       q		I"r   c                 "   t          j                     t          j        t          j        | j                             | j        rIt          j        | j        j                   t          j	        | j        j        | j        j
                   d S d S rD   )r   r3   rN   r   rO   ra   rb   r'   targetglBindTextureidrA   s    r   rT   zMeshGroup.set_statey   s|    

/??@@@< 	CK+,,,T\0$,/BBBBB	C 	Cr   c                 v    | j         rt          j        | j         j                   t          j                     d S rD   )rb   r   	glDisablerd   r>   rA   s    r   rW   zMeshGroup.unset_state   s5    < 	.L,---
r   )NNN)rX   rY   rZ   r   rT   rW   r[   r\   s   @r   r^   r^   q   s^             C C C      r   r^   c                   p     e Zd Z fdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Z xZS )SceneWidgetc                    t                                                       || _        d | _        i | _        i | _        i | _        i | _        | j        j        	                                | _
        |                                  |                    dd           | _        |                    dd          | _        |rt          d|           d S )Nr   smoothTzunexpected kwargs: )r   r   r   _scene_group
mesh_groupvertex_listvertex_list_hashtexturesrS   copy_initial_camera_transform
reset_viewpopr   _smooth	TypeError)r   r   kwargsr   s      r   r   zSceneWidget.__init__   s    
    ")-)D)I)I)K)K&!::lD99zz(D11 	<:&::;;;	< 	<r   c                 &   | j         t          j        | j                                                  t          j        | j                                                  z  }t          | j        | j        | j	        || j
                  | _         | j         S )N)r   r   r   r   r   )rm   rP   arraywindowget_viewport_sizeget_sizer   r   r   r   group)r   r   s     r   scene_groupzSceneWidget.scene_group   s    $ ht{'D'D'F'FGG"($$&&K K O !+Yj+ /z! ! !D   r   c                     d | _         i | _        | j        r7| j                                        \  }}|                                 | j        7i | _        i | _        d S rD   )rm   rn   ro   popitemdeleterp   rq   )r   _vertexs      r   clearzSceneWidget.clear   sc      	(0022IAvMMOOO  	 !#r   c                     dt          | j        | j        j        j        | j        j        | j        j                  i| _        | j        d         j        | j        _	        d S )Nball)posesizescalerd   )
r   rs   r   r6   
resolutionr   centroidviewr   rS   rA   s    r   rt   zSceneWidget.reset_view   s\    I3Z&1j&z*	  
	 '+i&7&<
###r   c                     dS )N)r   r    rA   s    r   do_claimzSceneWidget.do_claim   s    tr   c                    | j         sd S | j        j        j        }|D ]}| j        j        |         \  }}|| j         vr!| j         |         }|| j        v r| j        |         }n9t          || j                            |          | j                  }|| j        |<   | j	        
                    |t          j        || j	                   d S )Nra   rb   r   )ro   r   graphnodes_geometryrn   r^   rq   getr   batchmigrater   GL_TRIANGLES)r   
node_names	node_namera   geometry_namero   rn   s          r   
do_regroupzSceneWidget.do_regroup   s     	FZ%4
# 	U 	UI'+z'7	'B$I}D$444*=9KDO++!_Y7

&' M--m<<+  

 .8	*J{BOZTTTT	U 	Ur   c                 P   | j         j        | j         j        f}|| j        j        j        k                                    s|| j        j        _        | j        j        j        }|D ]A}| j        j        |         \  }}| j        j	        |         }| 
                    ||||           Bd S rD   )r   r#   r$   r   r6   r   allr   r   geometry_update_node)r   r   r   r   ra   r   r   s          r   do_drawzSceneWidget.do_draw   s    ioty'78
dj/::??AA 	6+5DJ(Z%4
# 	M 	MI'+z'7	'B$I}z*=9Hi)LLLL	M 	Mr   c                     | j         sd S | j                                         D ]}|                                 d | _        i | _        i | _         i | _        i | _        d S rD   )ro   valuesr   rm   rn   rp   rq   )r   ro   s     r   	do_undrawzSceneWidget.do_undraw   so     	F+2244 	! 	!K      "r   c                 ^    t          j        | ||||           |                                  d S rD   )r   on_mouse_press_draw)r   xybuttons	modifierss        r   r   zSceneWidget.on_mouse_press   s,    "4Aw	BBB

r   c           	         ||z
  }||z
  }| j         j        | j         j        }
}	| j         j        | j         j        }}|	|cxk     r	|	|z   k    rn n|
|cxk     r	|
|z   k    s6n | j        d                             t          j        ||g                     t          j
        | ||||||           |                                  d S )Nr   )r   r!   r"   r#   r$   r   downrP   rz   r   on_mouse_dragr   )r   r   r   dxdyr   r   x_prevy_prevr!   r"   r#   r$   s                r   r   zSceneWidget.on_mouse_drag   s    RRy~ty'7f	)9vv---------V....v....If""28QF#3#3444!$1b"gyIII

r   c                 ^    t          j        | ||||           |                                  d S rD   )r   on_mouse_scrollr   )r   r   r   r   r   s        r   r   zSceneWidget.on_mouse_scroll  s,    #D!QB777

r   c                    t          |          }| j                            |          |k    rOt          |d          r?t          |j        d          r*t          j        |j        j                  }|
|| j        |<   || j	        v r4| j	        |         }||_
        | j                            |          |_        n9t          || j                            |          | j                  }|| j	        |<   | j                            |          |k    rg|| j        v r| j        |                                          t          j        ||| j                  } | j        j        | | j        |<   || j        |<   d S d S )Nvisualmaterialr   )r~   rl   )r   rp   r   hasattrr   r   material_to_texturer   rq   rn   ra   rb   r^   r   ro   r   convert_to_vertexlistrv   r   add_indexed)	r   r   r   r   ra   geometry_hash_newtexrn   argss	            r   r   zSceneWidget._update_node  s   *844 $$]337HHHx** 7wx
/S/S 73HO4LMM?36DM-0''3J#,J !%!2!2=!A!AJ"#))-88'  J
 *4DOI& $$]337HHH 000 /66888 2
4<  D /Edj.Dd.KD]+3DD!-000 IHr   )rX   rY   rZ   r   propertyr   r   rt   r   r   r   r   r   r   r   r   r[   r\   s   @r   rj   rj      s        < < < < <* ! ! X!  	= 	= 	=  U U U,	M 	M 	M	 	 	       E  E  E  E  E  E  Er   rj   )__doc__warningsglooeynumpyrP   pygletr   trimeshr   trimesh.viewer.trackballr   trimesh.viewer.windowedr   r   warnDeprecationWarninggraphicsGroupr   r^   Widgetrj   r   r   r   <module>r      s_                       . . . . . . ? ? ? ? ? ? ? ? 5     O O O O O& O O Od    %   .^E ^E ^E ^E ^E&- ^E ^E ^E ^E ^Er   