pub struct ViewerSharedState<M: Deref<Target = MjModel>> { /* private fields */ }Expand description
Internal state that is used by MjViewer to store
MjData-related state. This is separate from MjViewer
to allow use in multi-threaded programs, where the physics part
runs in another thread and syncs the state with the viewer
running in the main thread.
The state can be obtained through MjViewer::state, which will return an Arc<Mutex<ViewerSharedState>>
instance. For scoped access, you may also use MjViewer::with_state_lock.
Implementations§
Sourcepub fn running(&self) -> bool
pub fn running(&self) -> bool
Checks whether the viewer is still running or is supposed to run.
Sourcepub fn user_scene(&self) -> &MjvScene<M>
pub fn user_scene(&self) -> &MjvScene<M>
Returns an immutable reference to a user scene for drawing custom visual-only geoms.
Geoms in the user scene are preserved between calls to ViewerSharedState::sync_data.
Sourcepub fn user_scene_mut(&mut self) -> &mut MjvScene<M>
pub fn user_scene_mut(&mut self) -> &mut MjvScene<M>
Returns a mutable reference to a user scene for drawing custom visual-only geoms.
Geoms in the user scene are preserved between calls to ViewerSharedState::sync_data.
Sourcepub fn sync_data_full(&mut self, data: &mut MjData<M>)
pub fn sync_data_full(&mut self, data: &mut MjData<M>)
Same as ViewerSharedState::sync_data, except it copies the entire MjData
struct (including large Jacobian and other arrays), not just the state needed for visualization.
Sourcepub fn sync_data(&mut self, data: &mut MjData<M>)
pub fn sync_data(&mut self, data: &mut MjData<M>)
Syncs the state of viewer’s internal MjData with data.
Synchronization happens in two steps.
First the viewer checks if any changes have been made to the internal MjData
since the last call to this method (since the last sync). Any changes made are
directly copied to the parameter data.
Then the data’s state overwrites the internal MjData’s state.
Note that users must afterward call MjViewer::render for the scene
to be rendered and the UI to be processed.
If you require everything to be synced for use in a UI callback,
you need to call appropriate functions/methods to calculate them (e.g., data.forward()).
Alternatively, you can opt-in into syncing the entire MjData struct by calling
ViewerSharedState::sync_data_full instead.
The following are NOT SYNCHRONIZED:
- Jacobian matrices;
- mass matrices.
Trait Implementations§
Auto Trait Implementations§
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.