#[derive(Copy, Clone, Debug)]
pub struct Vertex {
position: [f32; 3],
color: [f32; 4],
xy_normal: [f32; 2],
is_perimeter: bool,
}
impl Vertex {
#[allow(dead_code)]
pub fn new(position: [f32; 3], color: [f32; 4], xy_normal: [f32; 2], is_perimeter: bool)
-> Vertex
{
Vertex { position: position, color: color, xy_normal: xy_normal, is_perimeter: is_perimeter }
}
pub fn scale(mut self, scale_by: &[f32; 3]) -> Vertex {
self.position = scale(&self.position, scale_by);
self
}
pub fn shift(mut self, shift_by: &[f32; 3]) -> Vertex {
self.position = shift(&self.position, shift_by);
self
}
#[allow(dead_code)]
pub fn color(mut self, color: [f32; 4]) -> Vertex {
self.color = color;
self
}
pub fn transform(self, scale_by: &[f32; 3], shift_by: &[f32; 3]) -> Vertex {
self.scale(scale_by).shift(shift_by)
}
#[allow(dead_code)]
pub fn set_color(&mut self, color: [f32; 4]) {
self.color = color;
}
#[allow(dead_code)]
pub fn position(&self) -> &[f32; 3] {
&self.position
}
#[allow(dead_code)]
pub fn is_perimeter(&self) -> bool {
self.is_perimeter
}
}
implement_vertex!(Vertex, position, color, xy_normal);
fn shift(position: &[f32; 3], shift_by: &[f32; 3]) -> [f32; 3] {
[
position[0] + shift_by[0],
position[1] + shift_by[1],
position[2] + shift_by[2],
]
}
fn scale(position: &[f32; 3], scale_by: &[f32; 3]) -> [f32; 3] {
[
position[0] * scale_by[0],
position[1] * scale_by[1],
position[2] * scale_by[2],
]
}