Function truck_modeling::builder::try_wire_homotopy
source · Expand description
Returns a homotopic shell from wire0
to wire1
.
Examples
// connecting two squares.
use truck_modeling::*;
let v00 = builder::vertex(Point3::new(0.0, 0.0, 0.0));
let v01 = builder::vertex(Point3::new(1.0, 0.0, 0.0));
let v02 = builder::vertex(Point3::new(2.0, 0.0, 0.0));
let v10 = builder::vertex(Point3::new(0.0, 1.0, 0.0));
let v11 = builder::vertex(Point3::new(1.0, 1.0, 0.0));
let v12 = builder::vertex(Point3::new(2.0, 1.0, 0.0));
let wire0: Wire = vec![
builder::line(&v00, &v01),
builder::line(&v01, &v02),
]
.into();
let wire1: Wire = vec![
builder::line(&v10, &v11),
builder::line(&v11, &v12),
]
.into();
let shell = builder::try_wire_homotopy(&wire0, &wire1).unwrap();
assert_eq!(shell.len(), 2);
let boundary = shell.extract_boundaries();
assert_eq!(boundary.len(), 1);
assert_eq!(boundary[0].len(), 6);
// a triangular tube
use truck_modeling::*;
let v00 = builder::vertex(Point3::new(0.0, 0.0, 0.0));
let v01 = builder::vertex(Point3::new(1.0, 0.0, 0.0));
let v02 = builder::vertex(Point3::new(0.5, 0.5, 0.0));
let v10 = builder::vertex(Point3::new(0.0, 0.0, 1.0));
let v11 = builder::vertex(Point3::new(1.0, 0.0, 1.0));
let v12 = builder::vertex(Point3::new(0.5, 0.5, 1.0));
let wire0: Wire = vec![
builder::line(&v00, &v01),
builder::line(&v01, &v02),
builder::line(&v02, &v00),
]
.into();
let wire1: Wire = vec![
builder::line(&v10, &v11),
builder::line(&v11, &v12),
builder::line(&v12, &v10),
]
.into();
let shell = builder::try_wire_homotopy(&wire0, &wire1).unwrap();
assert_eq!(shell.len(), 3);
let boundary = shell.extract_boundaries();
assert_eq!(boundary.len(), 2);
assert_eq!(boundary[0].len(), 3);
assert_eq!(boundary[1].len(), 3);
Failures
If the wires have different numbers of edges, then return Error::NotSameNumberOfEdges
.
use truck_modeling::{*, errors::Error};
let v00 = builder::vertex(Point3::new(0.0, 0.0, 0.0));
let v01 = builder::vertex(Point3::new(1.0, 0.0, 0.0));
let v02 = builder::vertex(Point3::new(0.5, 0.5, 0.0));
let v10 = builder::vertex(Point3::new(0.0, 0.0, 1.0));
let v11 = builder::vertex(Point3::new(1.0, 0.0, 1.0));
let v12 = builder::vertex(Point3::new(0.5, 0.5, 1.0));
let wire0: Wire = vec![
builder::line(&v00, &v01),
builder::line(&v01, &v02),
]
.into();
let wire1: Wire = vec![
builder::line(&v10, &v11),
builder::line(&v11, &v12),
builder::line(&v12, &v10),
]
.into();
assert!(matches!(
builder::try_wire_homotopy(&wire0, &wire1),
Err(Error::NotSameNumberOfEdges),
));