#![deny(non_camel_case_types)]
#![deny(unused_parens)]
#![deny(non_upper_case_globals)]
#![deny(unused_qualifications)]
#![warn(missing_docs)] #![deny(unused_results)]
#![allow(type_alias_bounds)]
#![warn(non_camel_case_types)]
#![allow(missing_copy_implementations)]
#![doc(html_root_url = "https://salva.rs/rustdoc/")]
#![doc(html_logo_url = "https://salva.rs/img/logo_salva_rustdoc.svg")]
extern crate nalgebra as na;
#[cfg(all(feature = "dim2", feature = "ncollide"))]
extern crate ncollide2d as ncollide;
#[cfg(all(feature = "dim3", feature = "ncollide"))]
extern crate ncollide3d as ncollide;
extern crate num_traits as num;
#[cfg(all(feature = "dim2", feature = "parry"))]
pub extern crate parry2d as parry;
#[cfg(all(feature = "dim3", feature = "parry"))]
pub extern crate parry3d as parry;
#[cfg(all(feature = "dim2", feature = "rapier"))]
pub extern crate rapier2d as rapier;
#[cfg(all(feature = "dim3", feature = "rapier"))]
pub extern crate rapier3d as rapier;
#[cfg(all(feature = "dim2", feature = "rapier-testbed"))]
extern crate rapier_testbed2d as rapier_testbed;
#[cfg(all(feature = "dim3", feature = "rapier-testbed"))]
extern crate rapier_testbed3d as rapier_testbed;
macro_rules! par_iter {
($t: expr) => {{
#[cfg(not(feature = "parallel"))]
let it = $t.iter();
#[cfg(feature = "parallel")]
let it = $t.par_iter();
it
}};
}
macro_rules! par_iter_mut {
($t: expr) => {{
#[cfg(not(feature = "parallel"))]
let it = $t.iter_mut();
#[cfg(feature = "parallel")]
let it = $t.par_iter_mut();
it
}};
}
macro_rules! par_reduce_sum {
($identity: expr, $t: expr) => {{
#[cfg(not(feature = "parallel"))]
let res = $t.fold($identity, |a, b| a + b);
#[cfg(feature = "parallel")]
let res = $t.reduce(|| $identity, |a, b| a + b);
res
}};
}
pub mod counters;
pub mod coupling;
pub mod geometry;
pub mod helper;
pub mod integrations;
pub mod kernel;
mod liquid_world;
pub mod object;
#[cfg(feature = "sampling")]
pub mod sampling;
pub mod solver;
mod timestep_manager;
pub(crate) mod z_order;
pub use crate::liquid_world::LiquidWorld;
pub use crate::timestep_manager::TimestepManager;
#[cfg(feature = "dim3")]
pub mod math {
use na::{
Dynamic, Isometry3, Matrix3, Matrix6, MatrixMN, MatrixSlice6xX, MatrixSliceMut6xX, Point3,
Rotation3, Translation3, UnitQuaternion, Vector3, Vector6, U3, U6,
};
pub const SPATIAL_DIM: usize = 6;
pub const ANGULAR_DIM: usize = 3;
pub const DIM: usize = 3;
pub type Real = f32;
pub type Dim = U3;
pub type SpatialDim = U6;
pub type AngularDim = U3;
pub type Point<Real> = Point3<Real>;
pub type AngularVector<Real> = Vector3<Real>;
pub type Vector<Real> = Vector3<Real>;
pub type SpatialVector<Real> = Vector6<Real>;
pub type Orientation<Real> = Vector3<Real>;
pub type Isometry<Real> = Isometry3<Real>;
pub type Rotation<Real> = UnitQuaternion<Real>;
pub type RotationMatrix<Real> = Rotation3<Real>;
pub type Translation<Real> = Translation3<Real>;
pub type AngularInertia<Real> = Matrix3<Real>;
pub type InertiaMatrix<Real> = Matrix6<Real>;
pub type Matrix<Real> = Matrix3<Real>;
pub type SpatialMatrix<Real> = Matrix6<Real>;
pub type Jacobian<Real> = MatrixMN<Real, U6, Dynamic>;
pub type JacobianSlice<'a, Real> = MatrixSlice6xX<'a, Real>;
pub type JacobianSliceMut<'a, Real> = MatrixSliceMut6xX<'a, Real>;
pub fn gcross_matrix(v: &Vector<Real>) -> Matrix<Real> {
v.cross_matrix()
}
}
#[cfg(feature = "dim2")]
pub mod math {
use na::{
Dynamic, Isometry2, Matrix1, Matrix2, Matrix3, MatrixMN, MatrixSlice3xX, MatrixSliceMut3xX,
Point2, Rotation2, RowVector2, Translation2, UnitComplex, Vector1, Vector2, Vector3, U1,
U2, U3,
};
pub const SPATIAL_DIM: usize = 3;
pub const ANGULAR_DIM: usize = 1;
pub const DIM: usize = 2;
pub type Real = f32;
pub type Dim = U2;
pub type AngularDim = U1;
pub type SpatialDim = U3;
pub type Point<Real> = Point2<Real>;
pub type SpatialVector<Real> = Vector3<Real>;
pub type AngularVector<Real> = Vector1<Real>;
pub type Vector<Real> = Vector2<Real>;
pub type Orientation<Real> = Vector1<Real>;
pub type Isometry<Real> = Isometry2<Real>;
pub type Rotation<Real> = UnitComplex<Real>;
pub type RotationMatrix<Real> = Rotation2<Real>;
pub type Translation<Real> = Translation2<Real>;
pub type AngularInertia<Real> = Matrix1<Real>;
pub type InertiaMatrix<Real> = Matrix3<Real>;
pub type Matrix<Real> = Matrix2<Real>;
pub type SpatialMatrix<Real> = Matrix3<Real>;
pub type Jacobian<Real> = MatrixMN<Real, U3, Dynamic>;
pub type JacobianSlice<'a, Real> = MatrixSlice3xX<'a, Real>;
pub type JacobianSliceMut<'a, Real> = MatrixSliceMut3xX<'a, Real>;
pub fn gcross_matrix(v: &Vector<Real>) -> RowVector2<Real> {
RowVector2::new(-v.y, v.x)
}
}