@@ -888,6 +888,42 @@ def get_trimesh(self):
888888 """
889889 return self ._vmesh .trimesh
890890
891+ # ------------------------------------------------------------------------------------
892+ # -------------------------------- real-time state -----------------------------------
893+ # ------------------------------------------------------------------------------------
894+
895+ @gs .assert_built
896+ def get_pos (self ):
897+ """
898+ Get the position of the geom in world frame.
899+ """
900+ tensor = torch .empty (self ._solver ._batch_shape (3 , True ), dtype = gs .tc_float , device = gs .device )
901+ self ._kernel_get_pos (tensor )
902+ if self ._solver .n_envs == 0 :
903+ tensor = tensor .squeeze (0 )
904+ return tensor
905+
906+ @ti .kernel
907+ def _kernel_get_pos (self , tensor : ti .types .ndarray ()):
908+ for i , i_b in ti .ndrange (3 , self ._solver ._B ):
909+ tensor [i_b , i ] = self ._solver .vgeoms_state [self ._idx , i_b ].pos [i ]
910+
911+ @gs .assert_built
912+ def get_quat (self ):
913+ """
914+ Get the quaternion of the geom in world frame.
915+ """
916+ tensor = torch .empty (self ._solver ._batch_shape (4 , True ), dtype = gs .tc_float , device = gs .device )
917+ self ._kernel_get_quat (tensor )
918+ if self ._solver .n_envs == 0 :
919+ tensor = tensor .squeeze (0 )
920+ return tensor
921+
922+ @ti .kernel
923+ def _kernel_get_quat (self , tensor : ti .types .ndarray ()):
924+ for i , i_b in ti .ndrange (4 , self ._solver ._B ):
925+ tensor [i_b , i ] = self ._solver .vgeoms_state [self ._idx , i_b ].quat [i ]
926+
891927 # ------------------------------------------------------------------------------------
892928 # ----------------------------------- properties -------------------------------------
893929 # ------------------------------------------------------------------------------------
0 commit comments