use super::{diagram::render_cut_diagram, html::cutting_sheet_html};
use indicatrix::{geometry::meet_solver::SolvedTier, optics::materials::GemMaterial};
use indicatrix_cut_core::Design;
use std::path::Path;
const SHEET_DIAGRAM_WIDTH: u32 = 900;
const SHEET_DIAGRAM_HEIGHT: u32 = 360;
pub const DIAGRAM_EXPORT_WIDTH: u32 = 1800;
pub const DIAGRAM_EXPORT_HEIGHT: u32 = 720;
pub fn write_cutting_sheet_html(
design: &Design,
solved: &[SolvedTier],
dest: &Path,
custom: &[GemMaterial],
) -> Result<(), String> {
let diagram = render_cut_diagram(design, solved, SHEET_DIAGRAM_WIDTH, SHEET_DIAGRAM_HEIGHT);
let html = cutting_sheet_html(design, solved, diagram.as_ref(), custom);
if let Some(parent) = dest.parent() {
let _ = std::fs::create_dir_all(parent);
}
std::fs::write(dest, html).map_err(|e| format!("Failed to write {}: {e}", dest.display()))
}
pub fn write_diagram_png(
design: &Design,
solved: &[SolvedTier],
dest: &Path,
) -> Result<(), String> {
let Some(image) =
render_cut_diagram(design, solved, DIAGRAM_EXPORT_WIDTH, DIAGRAM_EXPORT_HEIGHT)
else {
return Err(
"This design does not currently close to a solid -- nothing to diagram.".to_string(),
);
};
if let Some(parent) = dest.parent() {
let _ = std::fs::create_dir_all(parent);
}
std::fs::write(dest, &image.png_bytes)
.map_err(|e| format!("Failed to write {}: {e}", dest.display()))
}