
    -iY%                     ,   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y)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 )
SceneGroupc                 h    t         |   |       || _        || _        |g d}|| _        || _        y )N)Gz?r   r   g      ?)super__init__rectscene_background_pixel_per_point)selfr   r   
backgroundpixel_per_pointparent	__class__s         Q/mnt/e/genesis-system/.venv/lib/python3.12/site-packages/trimesh/viewer/widget.pyr   zSceneGroup.__init__    s;     	 	
0J% /    c                    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        j0                  | j2                  j4                  j6                  d   ||z  ||       t        j(                  t        j8                         y )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_viewzSceneGroup._set_view2   s   4((+diinn<=T**1-		0@0@@AD))!,tyy>?T**1-		0@0@@A
(()
B&&'
T65&1hh\

**DJJ7((Q,)
8
dFE62
(()


$**++//2EFND#N
(r   c                    t        j                  t         j                         t        j                          t        j                  | j                  j
                         t        j                  | j                  d   | j                  d   | j                  d   | j                  d          t        j                          y )Nr   r   r      )	r   r0   r1   glPopMatrixr*   valuer/   r-   glPopAttribr   s    r   _unset_viewzSceneGroup._unset_viewJ   s|    
(()



(()
NN1NN1NN1NN1		
 	r   c                    | j                          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
                  j.                                     y N)r:   r   _gl_set_backgroundr   _gl_enable_depthr   r5   _gl_enable_color_material_gl_enable_blending_gl_enable_smooth_lines_gl_enable_lightingr   glClearGL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BITr2   r3   glMultMatrixfr   matrix_to_glnplinalginvcamera_transformr@   s    r   	set_statez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                 t    t        j                          t        j                          | j	                          y rC   )r   r=   r   _gl_unset_backgroundrA   r@   s    r   unset_statezSceneGroup.unset_statei   s$    
((*r   )N)r   r   N)	__name__
__module____qualname__r   r:   rA   rS   rV   __classcell__r   s   @r   r   r      s'    
 0$)0
$r   r   c                   ,     e Zd Zd fd	Zd Zd Z xZS )	MeshGroupc                 n    t         |   |       |t        j                  d      }|| _        || _        y )Nr   )r   r   rO   eye	transformtexture)r   r`   ra   r   r   s       r   r   zMeshGroup.__init__r   s1     q	I"r   c                 x   t        j                          t        j                  t        j                  | j
                               | j                  rht        j                  | j                  j                         t        j                  | j                  j                  | j                  j                         y y rC   )r   r2   rM   r   rN   r`   ra   r&   targetglBindTextureidr@   s    r   rS   zMeshGroup.set_statey   sm    

//?@<<KK++,T\\00$,,//B r   c                     | j                   r)t        j                  | j                   j                         t        j                          y rC   )ra   r   	glDisablerc   r=   r@   s    r   rV   zMeshGroup.unset_state   s)    <<LL,,-
r   )NNN)rW   rX   rY   r   rS   rV   rZ   r[   s   @r   r]   r]   q   s    Cr   r]   c                   j     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                 d   t         |           || _        d | _        i | _        i | _        i | _        i | _        | j                  j                  j                         | _
        | j                          |j                  dd       | _        |j                  dd      | _        |rt        d|       y )Nr   smoothTzunexpected kwargs: )r   r   r   _scene_group
mesh_groupvertex_listvertex_list_hashtexturesrR   copy_initial_camera_transform
reset_viewpopr   _smooth	TypeError)r   r   kwargsr   s      r   r   zSceneWidget.__init__   s    
    ")-)D)D)I)I)K&!::lD9zz(D11&:;; r   c                 b   | j                   t        j                  | j                  j	                               t        j                  | j                  j                               z  }t        | j                  | j                  | j                  || j                        | _         | j                   S )N)r   r   r   r   r   )rl   rO   arraywindowget_viewport_sizeget_sizer   r   r   r   group)r   r   s     r   scene_groupzSceneWidget.scene_group   s    $ hht{{'D'D'FG"(($$&K O !+YYjj++ /zz!D    r   c                     d | _         i | _        | j                  r:| j                  j                         \  }}|j	                          | j                  r:i | _        i | _        y rC   )rl   rm   rn   popitemdeletero   rp   )r   _vertexs      r   clearzSceneWidget.clear   sW     ((002IAvMMO  !#r   c                     dt        | j                  | j                  j                  j                  | j                  j
                  | j                  j                        i| _        | j                  d   j                  | j                  _	        y )Nball)posesizescalerc   )
r   rr   r   r5   
resolutionr   centroidviewr   rR   r@   s    r   rs   zSceneWidget.reset_view   sh    I33ZZ&&11jj&&zz**	
	 '+ii&7&<&<

#r   c                      y)N)r   r    r@   s    r   do_claimzSceneWidget.do_claim   s    r   c                    | j                   sy | j                  j                  j                  }|D ]  }| j                  j                  |   \  }}|| j                   vr.| j                   |   }|| j                  v r| j                  |   }n@t        || j                  j                  |      | j                        }|| j                  |<   | j                  j                  |t        j                  || j                          y )Nr`   ra   r   )rn   r   graphnodes_geometryrm   r]   rp   getr~   batchmigrater   GL_TRIANGLES)r   
node_names	node_namer`   geometry_namern   rm   s          r   
do_regroupzSceneWidget.do_regroup   s    ZZ%%44
# 	UI'+zz'7'7	'B$I}D$4$44**=9KDOO+!__Y7
&' MM--m<++

 .8	*JJ{BOOZT	Ur   c                    | j                   j                  | j                   j                  f}|| j                  j                  j
                  k(  j                         s|| j                  j                  _        | j                  j                  j                  }|D ]K  }| j                  j                  |   \  }}| j                  j                  |   }| j                  ||||       M y rC   )r   r"   r#   r   r5   r   allr   r   geometry_update_node)r   r   r   r   r`   r   r   s          r   do_drawzSceneWidget.do_draw   s    iiootyy'7'78
djj//:::??A+5DJJ(ZZ%%44
# 	MI'+zz'7'7	'B$I}zz**=9Hi)L	Mr   c                     | j                   sy | j                   j                         D ]  }|j                           d | _        i | _        i | _         i | _        i | _        y rC   )rn   valuesr   rl   rm   ro   rp   )r   rn   s     r   	do_undrawzSceneWidget.do_undraw   s^    ++224 	!K 	!  "r   c                 V    t        j                  | ||||       | j                          y rC   )r   on_mouse_press_draw)r   xybuttons	modifierss        r   r   zSceneWidget.on_mouse_press   s!    ""4Aw	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  s5n | j
                  d   j                  t        j                  ||g             t        j                  | ||||||       | j                          y )Nr   )r   r    r!   r"   r#   r   downrO   ry   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yy~~tyy'7'7f		)9)9vv--V.v.IIf""288QF#34!!$1b"gyI

r   c                 V    t        j                  | ||||       | j                          y rC   )r   on_mouse_scrollr   )r   r   r   r   r   s        r   r   zSceneWidget.on_mouse_scroll  s!    ##D!QB7

r   c                 Z   t        |      }| j                  j                  |      |k7  r\t        |d      rPt        |j                  d      r:t        j                  |j                  j                        }||| j                  |<   || j                  v r7| j                  |   }||_
        | j                  j                  |      |_        n@t        || j                  j                  |      | j                        }|| j                  |<   | j                  j                  |      |k7  r|| j                  v r| j                  |   j                          t        j                   ||| j"                        } | j$                  j&                  | | j                  |<   || j                  |<   y y )Nvisualmaterialr   )r}   rk   )r   ro   r   hasattrr   r   material_to_texturer   rp   rm   r`   ra   r]   r~   rn   r   convert_to_vertexlistru   r   add_indexed)	r   r   r   r   r`   geometry_hash_newtexrm   argss	            r   r   zSceneWidget._update_node  sr   *84  $$]37HHx*wx
/S33HOO4L4LM?36DMM-0'3J#,J !%!2!2=!AJ"#))-8''J
 *4DOOI&  $$]37HH 0 00  /668 22
4<<D /Edjj.D.Dd.KD]+3DD!!-0 Ir   )rW   rX   rY   r   propertyr~   r   rs   r   r   r   r   r   r   r   r   rZ   r[   s   @r   ri   ri      sQ    <* ! !	=U,	M	 Er   ri   )__doc__warningsglooeynumpyrO   pygletr   trimeshr   trimesh.viewer.trackballr   trimesh.viewer.windowedr   r   warnDeprecationWarninggraphicsGroupr   r]   Widgetri   r   r   r   <module>r      s          . ? 5  O&& Od%% .^E&-- ^Er   