
    MiY%                     &   S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSKJrJr  \R                  " S\SS	9   " S
 S\R                   R"                  5      r " S S\R                   R"                  5      r " S S\R(                  5      rg)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                   J   ^  \ rS rSr   SU 4S jjrS rS rS rS rSr	U =r
$ )	
SceneGroup   c                 b   > [         TU ]  U5        Xl        X l        Uc  / SQnX0l        X@l        g )N)Gz?r   r   g      ?)super__init__rectscene_background_pixel_per_point)selfr   r   
backgroundpixel_per_pointparent	__class__s         o/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/trimesh/viewer/widget.pyr   SceneGroup.__init__    s3     	 	
0J% /    c                    [        U R                  S   U R                  R                  -  5      n[        U R                  S   U R                  R                  -  5      n[        U R                  S   U R                  R
                  -  5      n[        U R                  S   U R                  R                  -  5      n[        R                  " [        R                  5        [        R                  " [        R                  5        [        R                  " XX45        [        R                  " 5       U l        [        R                  " [        R                   U R                  5        [        R                  S-  " 5       U l        [        R                  " [        R$                  U R"                  5        [        R&                  " XX45        [        R(                  " [        R*                  5        [        R,                  " 5         [        R.                  " 5         SnSn[        R0                  " U R2                  R4                  R6                  S   X4-  XV5        [        R(                  " [        R8                  5        g )Nr         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_viewSceneGroup._set_view2   s   4((+diinn<=T**1-		0@0@@AD))!,tyy>?T**1-		0@0@@A
(()
B&&'
T51hh\

**DJJ7((Q,)
8
dE2
(()


$**++//2ENDN
(r   c                    [         R                  " [         R                  5        [         R                  " 5         [         R                  " U R                  R
                  5        [         R                  " U R                  S   U R                  S   U R                  S   U R                  S   5        [         R                  " 5         g )Nr   r   r      )	r   r2   r3   glPopMatrixr,   valuer1   r/   glPopAttribr   s    r   _unset_viewSceneGroup._unset_viewJ   s|    
(()



(()
NN1NN1NN1NN1		
 	r   c                    U R                  5         [        R                  " U R                  5        [        R                  " U R
                  R                  5        [        R                  " 5         [        R                  " 5         [        R                  " 5         [        R                  " U R
                  5        [        R                  " [        R                  [        R                  -  5        [        R                  " 5         [        R                   " 5         [        R"                  " [$        R&                  " [(        R*                  R-                  U R
                  R.                  5      5      5        g N)r<   r   _gl_set_backgroundr   _gl_enable_depthr   r7   _gl_enable_color_material_gl_enable_blending_gl_enable_smooth_lines_gl_enable_lightingr   glClearGL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BITr4   r5   glMultMatrixfr   matrix_to_glnplinalginvcamera_transformrC   s    r   	set_stateSceneGroup.set_stateW   s    &&t'7'78$$TZZ%6%67--/'')++-''

3


2))B,B,BBC


""299==1L1L#MN	
r   c                 x    [         R                  " 5         [        R                  " 5         U R	                  5         g rG   )r   r@   r   _gl_unset_backgroundrD   rC   s    r   unset_stateSceneGroup.unset_statei   s$    
((*r   )r   r,   r   r/   r   r   )N)r   r   N)__name__
__module____qualname____firstlineno__r   r<   rD   rW   r[   __static_attributes____classcell__r   s   @r   r   r      s,    
 0$)0
$ r   r   c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )	MeshGroupq   c                 n   > [         TU ]  U5        Uc  [        R                  " S5      nXl        X l        g )Nr    )r   r   rS   eye	transformtexture)r   ri   rj   r   r   s       r   r   MeshGroup.__init__r   s-     q	I"r   c                    [         R                  " 5         [         R                  " [        R                  " U R
                  5      5        U R                  (       aj  [         R                  " U R                  R                  5        [         R                  " U R                  R                  U R                  R                  5        g g rG   )r   r4   rQ   r   rR   ri   rj   r(   targetglBindTextureidrC   s    r   rW   MeshGroup.set_statey   sm    

//?@<<KK++,T\\00$,,//B r   c                     U R                   (       a*  [        R                  " U R                   R                  5        [        R                  " 5         g rG   )rj   r   	glDisablerm   r@   rC   s    r   r[   MeshGroup.unset_state   s)    <<LL,,-
r   )rj   ri   )NNN)	r]   r^   r_   r`   r   rW   r[   ra   rb   rc   s   @r   re   re   q   s    C r   re   c                   t   ^  \ rS rSrU 4S jr\S 5       rS rS rS r	S r
S rS	 rS
 rS rS rS rSrU =r$ )SceneWidget   c                 l  > [         TU ]  5         Xl        S U l        0 U l        0 U l        0 U l        0 U l        U R                  R                  R                  5       U l
        U R                  5         UR                  SS 5      U l        UR                  SS5      U l        U(       a  [        SU 35      eg )Nr   smoothTzunexpected kwargs: )r   r   r   _scene_group
mesh_groupvertex_listvertex_list_hashtexturesrV   copy_initial_camera_transform
reset_viewpopr   _smooth	TypeError)r   r   kwargsr   s      r   r   SceneWidget.__init__   s    
    ")-)D)D)I)I)K&!::lD9zz(D11&:;; r   c                 b   U R                   c  [        R                  " U R                  R	                  5       5      [        R                  " U R                  R                  5       5      -  n[        U R                  U R                  U R                  UU R                  S9U l         U R                   $ )N)r   r   r   r   r   )ry   rS   arraywindowget_viewport_sizeget_sizer   r   r   r   group)r   r   s     r   scene_groupSceneWidget.scene_group   s    $ hht{{'D'D'FG"(($$&K O !+YYjj++ /zz!D    r   c                     S U l         0 U l        U R                  (       a?  U R                  R                  5       u  pUR	                  5         U R                  (       a  M?  0 U l        0 U l        g rG   )ry   rz   r{   popitemdeleter|   r}   )r   _vertexs      r   clearSceneWidget.clear   sX     ((002IAMMO  !#r   c                    S[        U R                  U R                  R                  R                  U R                  R
                  U R                  R                  S90U l        U R                  S   R                  U R                  l	        g )Nball)posesizescalerm   )
r   r   r   r7   
resolutionr   centroidviewr   rV   rC   s    r   r   SceneWidget.reset_view   sh    I33ZZ&&11jj&&zz**	
	 '+ii&7&<&<

#r   c                     g)N)r   r    rC   s    r   do_claimSceneWidget.do_claim   s    r   c                    U R                   (       d  g U R                  R                  R                  nU H  nU R                  R                  U   u  p4X@R                   ;  a  M/  U R                   U   nX R                  ;   a  U R                  U   nO<[        UU R                  R                  U5      U R                  S9nX`R                  U'   U R                  R                  U[        R                  X`R                  5        M     g )Nri   rj   r   )r{   r   graphnodes_geometryrz   re   r}   getr   batchmigrater   GL_TRIANGLES)r   
node_names	node_nameri   geometry_namer{   rz   s          r   
do_regroupSceneWidget.do_regroup   s    ZZ%%44
#I'+zz'7'7	'B$I$4$44**=9KOO+!__Y7
&' MM--m<++

 .8	*JJ{BOOZT $r   c                    U R                   R                  U R                   R                  4nXR                  R                  R
                  :H  R                  5       (       d  XR                  R                  l        U R                  R                  R                  nU HI  nU R                  R                  U   u  pEU R                  R                  U   nU R                  X5Xd5        MK     g rG   )r   r$   r%   r   r7   r   allr   r   geometry_update_node)r   r   r   r   ri   r   r   s          r   do_drawSceneWidget.do_draw   s    iiootyy'7'78
jj//:::??AA+5JJ(ZZ%%44
#I'+zz'7'7	'B$Izz**=9HiL $r   c                     U R                   (       d  g U R                   R                  5        H  nUR                  5         M     S U l        0 U l        0 U l         0 U l        0 U l        g rG   )r{   valuesr   ry   rz   r|   r}   )r   r{   s     r   	do_undrawSceneWidget.do_undraw   sY    ++224K  5  "r   c                 T    [         R                  " XX#U5        U R                  5         g rG   )r   on_mouse_press_draw)r   xybuttons	modifierss        r   r   SceneWidget.on_mouse_press   s    ""4A	B

r   c           	         X-
  nX$-
  nU R                   R                  U R                   R                  pU R                   R                  U R                   R                  pXs=:  a  X-   ::  a  O  OXs=:  a  X-   ::  d5  O  U R
                  S   R                  [        R                  " X/5      5        [        R                  " XX#XEU5        U R                  5         g )Nr   )r   r"   r#   r$   r%   r   downrS   r   r   on_mouse_dragr   )r   r   r   dxdyr   r   x_prevy_prevr"   r#   r$   r%   s                r   r   SceneWidget.on_mouse_drag   s    yy~~tyy'7'7f		)9)9v--.v.IIf""288QF#34!!$1"yI

r   c                 T    [         R                  " XX#U5        U R                  5         g rG   )r   on_mouse_scrollr   )r   r   r   r   r   s        r   r   SceneWidget.on_mouse_scroll  s    ##DQB7

r   c                 f   [        U5      nU R                  R                  U5      U:w  ag  [        US5      (       aV  [        UR                  S5      (       a;  [
        R                  " UR                  R                  5      nUb  X`R                  U'   XR                  ;   a6  U R                  U   nXGl
        U R                  R                  U5      Ul        O<[        UU R                  R                  U5      U R                  S9nXpR                  U'   U R                  R                  U5      U:w  a  X R                  ;   a  U R                  U   R                  5         [
        R                   " X7U R"                  S9nU R$                  R&                  " U6 U R                  U'   XPR                  U'   g g )Nvisualmaterialr   )r   rx   )r   r|   r   hasattrr   r   material_to_texturer   r}   rz   ri   rj   re   r   r{   r   convert_to_vertexlistr   r   add_indexed)	r   r   r   r   ri   geometry_hash_newtexrz   argss	            r   r   SceneWidget._update_node  sg   *84  $$]37HHx**wx
/S/S33HOO4L4LM?36MM-0'3J#, !%!2!2=!AJ"#))-8''J
 *4OOI&  $$]37HH 0 00  /668 224<<D /3jj.D.Dd.KD]+3D!!-0 Ir   )
r   r   ry   r   rz   r   r}   r{   r|   r   )r]   r^   r_   r`   r   propertyr   r   r   r   r   r   r   r   r   r   r   ra   rb   rc   s   @r   ru   ru      sW    <* ! !	=U,	M	 E  Er   ru   )__doc__warningsglooeynumpyrS   pygletr   trimeshr   trimesh.viewer.trackballr   trimesh.viewer.windowedr   r   warnDeprecationWarninggraphicsGroupr   re   Widgetru   r   r   r   <module>r      s          . ? 5  O&& Od%% .^E&-- ^Er   