#[macro_use]
extern crate failure;
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate log;
pub use self::combine_indices::CreateSingleIndexConfig;
pub use self::export::*;
use crate::bone::BoneInfluencesPerVertex;
pub use crate::bounding_box::BoundingBox;
use crate::material::PrincipledBSDF;
use crate::vertex_data::{VertexAttribute, VertexData};
pub use material::{Channel, MaterialInput};
use serde_json;
use serde_json::Error;
use std::collections::HashMap;
mod bone;
mod bounding_box;
mod combine_indices;
mod export;
mod individual_vertex;
mod material;
mod tangent;
mod triangulate;
mod vertex_data;
mod y_up;
#[cfg(test)]
mod test_utils;
#[derive(Debug, Fail)]
pub enum BlenderError {
#[fail(
display = "There was an issue while exporting meshes: Blender stderr output: {}",
_0
)]
Stderr(String),
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Default)]
#[serde(deny_unknown_fields)]
pub struct BlenderMesh {
pub vertex_positions: Vec<f32>,
pub vertex_position_indices: Vec<u16>,
pub num_vertices_in_each_face: Vec<u8>,
pub vertex_normals: Vec<f32>,
pub vertex_normal_indices: Option<Vec<u16>>,
pub vertex_uvs: Option<Vec<f32>>,
pub vertex_uv_indices: Option<Vec<u16>>,
pub armature_name: Option<String>,
pub vertex_group_indices: Option<Vec<u8>>,
pub vertex_group_weights: Option<Vec<f32>>,
bone_influences_per_vertex: Option<BoneInfluencesPerVertex>,
pub bounding_box: BoundingBox,
materials: HashMap<String, PrincipledBSDF>,
per_vertex_tangents: Option<VertexAttribute>,
face_tangents: Option<Vec<f32>>,
#[serde(default)]
vertex_data: VertexData,
}
impl BlenderMesh {
pub fn from_json(json_str: &str) -> Result<BlenderMesh, Error> {
serde_json::from_str(json_str)
}
}
#[cfg(test)]
#[macro_export]
#[cfg(test)]
macro_rules! concat_vecs {
( $( $vec:expr),* ) => {
{
let mut concatenated_vec = Vec::new();
$(
concatenated_vec.append(&mut $vec.clone());
)*
concatenated_vec
}
}
}