use crate::topology::{
BrepSolid, CoedgeRecord, EdgeRecord, FaceRecord, LoopRecord, ShellRecord, VertexRecord,
};
use crate::{
build_pcurve_on_surface_range, make_arc, make_extrusion, make_line, make_plane,
make_revolution, offset_surface, transform_brep, AffineTransform, NurbsCurve, NurbsSurface,
Vec3, Vec4,
};
use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet};
use std::collections::VecDeque;
const TAU: f64 = std::f64::consts::TAU;
mod parse;
mod bodies;
mod builder;
mod geometry;
#[cfg(test)]
mod tests;
use parse::*;
use bodies::*;
use builder::*;
use geometry::*;
pub fn import_step(text: &str) -> Result<Vec<BrepSolid>, String> {
let (solids, _failed, first_error) = collect_step_solids(text)?;
if solids.is_empty() {
return Err(first_error.unwrap_or_else(|| {
"step_import: no MANIFOLD_SOLID_BREP/FACETED_BREP/BREP_WITH_VOIDS body imported (unsupported or invalid representation)"
.into()
}));
}
Ok(solids)
}
pub fn import_step_report(text: &str) -> Result<(Vec<BrepSolid>, usize, Option<String>), String> {
collect_step_solids(text)
}