use crate::dstv_element::ParseDstvError;
use crate::get_f64_from_str;
use crate::prelude::{DstvElement, PartFace};
use std::str::FromStr;
#[derive(Debug)]
pub struct Slot {
pub angle: f64,
pub slot_length: f64,
pub slot_width: f64,
pub diameter: f64,
pub depth: f64,
pub x_coord: f64,
pub y_coord: f64,
pub fl_code: PartFace,
}
impl DstvElement for Slot {
fn from_str(line: &str) -> Result<Self, ParseDstvError> {
let mut iter = line.split_whitespace();
let fl_code = PartFace::from_str(iter.next().ok_or(ParseDstvError::new("No Slot Found"))?)?;
let x_coord = get_f64_from_str(iter.next(), "x_coord")?;
let y_coord = get_f64_from_str(iter.next(), "y_coord")?;
let diameter = get_f64_from_str(iter.next(), "diameter")?;
let depth = get_f64_from_str(iter.next(), "depth")?;
let slot_length = get_f64_from_str(iter.next(), "slot_length")?;
let slot_width = get_f64_from_str(iter.next(), "slot_width")?;
let angle = get_f64_from_str(iter.next(), "angle")?;
Ok(Self {
angle,
slot_length,
slot_width,
diameter,
depth,
x_coord,
y_coord,
fl_code,
})
}
fn to_svg(&self) -> String {
format!(
"<rect x=\"{}\" y=\"{}\" width=\"{}\" height=\"{}\" fill=\"white\" rx=\"{}\" />",
self.x_coord,
self.y_coord,
self.slot_length + self.diameter,
self.diameter,
self.diameter / 2.0,
)
}
fn get_index(&self) -> usize {
2
}
fn get_facing(&self) -> &PartFace {
&self.fl_code
}
}