ViewerSharedState

Struct ViewerSharedState 

Source
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§

Source§

impl<M: Deref<Target = MjModel> + Clone> ViewerSharedState<M>

Source

pub fn running(&self) -> bool

Checks whether the viewer is still running or is supposed to run.

Source

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.

Source

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.

Source

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.

Source

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.

Synchronization of data is performed via mjv_copyData, which only copies fields required for visualization purposes.

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§

Source§

impl<M: Debug + Deref<Target = MjModel>> Debug for ViewerSharedState<M>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<M> Freeze for ViewerSharedState<M>
where M: Freeze,

§

impl<M> RefUnwindSafe for ViewerSharedState<M>
where M: RefUnwindSafe,

§

impl<M> Send for ViewerSharedState<M>

§

impl<M> Sync for ViewerSharedState<M>

§

impl<M> Unpin for ViewerSharedState<M>
where M: Unpin,

§

impl<M> UnwindSafe for ViewerSharedState<M>
where M: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more