use crate::{
mjModel, mjData, mjvScene, mjvOption, mjvCamera, mjvPerturb, mjvGeom, mjvFigure,
mjtGeom,
};
pub fn mjv_defaultOption() -> mjvOption {
let mut c = std::mem::MaybeUninit::<mjvOption>::uninit();
unsafe { crate::bindgen::mjv_defaultOption(c.as_mut_ptr()); }
unsafe { c.assume_init() }
}
pub fn mjv_defaultFigure() -> crate::mjvFigure {
let mut c = std::mem::MaybeUninit::<mjvFigure>::uninit();
unsafe { crate::bindgen::mjv_defaultFigure(c.as_mut_ptr()); }
unsafe { c.assume_init() }
}
pub fn mjv_initGeom(
type_: mjtGeom,
size: Option<[f64; 3]>,
pos: Option<[f64; 3]>,
mat: Option<[f64; 9]>,
rgba: Option<[f32; 4]>,
) -> mjvGeom {
let mut c = std::mem::MaybeUninit::<mjvGeom>::uninit();
unsafe {
crate::bindgen::mjv_initGeom(
c.as_mut_ptr(),
type_.0 as i32,
size.map_or(std::ptr::null(), |a| &a),
pos.map_or(std::ptr::null(), |a| &a),
mat.map_or(std::ptr::null(), |a| &a),
rgba.map_or(std::ptr::null(), |a| &a),
);
}
unsafe { c.assume_init() }
}
pub fn mjv_connector(
geom: &mut mjvGeom,
type_: crate::bindgen::mjtGeom,
width: f64,
from: [f64; 3],
to: [f64; 3],
) {
unsafe {
crate::bindgen::mjv_connector(
geom,
type_.0 as i32,
width,
&from,
&to,
);
}
}
pub fn mjv_defaultScene() -> mjvScene {
let mut c = Box::<crate::bindgen::mjvScene>::new_uninit();
unsafe { crate::bindgen::mjv_defaultScene(c.as_mut_ptr()); }
mjvScene::from_raw(Box::into_raw(unsafe { c.assume_init() }))
}
pub fn mjv_makeScene(
model: &mjModel,
scene: &mut mjvScene,
maxgeom: usize,
) {
unsafe {
crate::bindgen::mjv_makeScene(
model.as_ptr(),
scene.as_mut_ptr(),
maxgeom as i32,
);
}
}
pub fn mjv_freeScene(scene: &mut mjvScene) {
unsafe { crate::bindgen::mjv_freeScene(scene.as_mut_ptr()); }
drop(unsafe { Box::from_raw(scene.as_mut_ptr()) });
}
pub fn mjv_updateScene(
model: &mjModel,
data: &mut mjData,
opt: &mjvOption,
pert: Option<&mjvPerturb>,
cam: &mut mjvCamera,
catmask: crate::bindgen::mjtCatBit,
scene: &mut mjvScene,
) {
unsafe {
crate::bindgen::mjv_updateScene(
model.as_ptr(),
data.as_mut_ptr(),
opt,
pert.map_or(std::ptr::null(), |p| p),
cam,
catmask.0 as i32,
scene.as_mut_ptr(),
);
}
}
pub fn mjv_copyModel(dest: &mut mjModel, src: &mjModel) {
unsafe { crate::bindgen::mjv_copyModel(dest.as_mut_ptr(), src.as_ptr()) }
}
pub fn mjv_addGeoms(
model: &mjModel,
data: &mut mjData,
opt: &mjvOption,
pert: &mjvPerturb,
catmask: crate::bindgen::mjtCatBit,
scene: &mut mjvScene,
) {
unsafe {
crate::bindgen::mjv_addGeoms(
model.as_ptr(),
data.as_mut_ptr(),
opt,
pert,
catmask.0 as i32,
scene.as_mut_ptr(),
);
}
}
pub fn mjv_makeLights(
model: &mjModel,
data: &mjData,
scene: &mut mjvScene,
) {
unsafe {
crate::bindgen::mjv_makeLights(
model.as_ptr(),
data.as_ptr(),
scene.as_mut_ptr(),
);
}
}
pub fn mjv_updateCamera(
model: &mjModel,
data: &mjData,
cam: &mut mjvCamera,
scene: &mut mjvScene,
) {
unsafe {
crate::bindgen::mjv_updateCamera(
model.as_ptr(),
data.as_ptr(),
cam,
scene.as_mut_ptr(),
);
}
}
pub fn mjv_updateSkin(
model: &mjModel,
data: &mjData,
scene: &mut mjvScene,
) {
unsafe {
crate::bindgen::mjv_updateSkin(
model.as_ptr(),
data.as_ptr(),
scene.as_mut_ptr(),
);
}
}