Declare std::offsetPlane in KCL (#6344)
* Declare std::offsetPlane in KCL Signed-off-by: Nick Cameron <nrc@ncameron.org> * Use two axes to define planes in KCL Signed-off-by: Nick Cameron <nrc@ncameron.org> --------- Signed-off-by: Nick Cameron <nrc@ncameron.org>
This commit is contained in:
@ -1142,9 +1142,15 @@ impl Node<UnaryExpression> {
|
||||
}
|
||||
KclValue::Plane { value } => {
|
||||
let mut plane = value.clone();
|
||||
plane.z_axis.x *= -1.0;
|
||||
plane.z_axis.y *= -1.0;
|
||||
plane.z_axis.z *= -1.0;
|
||||
if plane.x_axis.x != 0.0 {
|
||||
plane.x_axis.x *= -1.0;
|
||||
}
|
||||
if plane.x_axis.y != 0.0 {
|
||||
plane.x_axis.y *= -1.0;
|
||||
}
|
||||
if plane.x_axis.z != 0.0 {
|
||||
plane.x_axis.z *= -1.0;
|
||||
}
|
||||
|
||||
plane.value = PlaneType::Uninit;
|
||||
plane.id = exec_state.next_uuid();
|
||||
@ -2637,7 +2643,6 @@ p = {
|
||||
origin = { x = 0, y = 0, z = 0 },
|
||||
xAxis = { x = 1, y = 0, z = 0 },
|
||||
yAxis = { x = 0, y = 1, z = 0 },
|
||||
zAxis = { x = 0, y = 0, z = 1 }
|
||||
}: Plane
|
||||
p2 = -p
|
||||
"#;
|
||||
@ -2649,7 +2654,11 @@ p2 = -p
|
||||
.get_from("p2", result.mem_env, SourceRange::default(), 0)
|
||||
.unwrap()
|
||||
{
|
||||
KclValue::Plane { value } => assert_eq!(value.z_axis.z, -1.0),
|
||||
KclValue::Plane { value } => {
|
||||
assert_eq!(value.x_axis.x, -1.0);
|
||||
assert_eq!(value.x_axis.y, 0.0);
|
||||
assert_eq!(value.x_axis.z, 0.0);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
@ -285,8 +285,6 @@ pub struct Plane {
|
||||
pub x_axis: Point3d,
|
||||
/// What should the plane's Y axis be?
|
||||
pub y_axis: Point3d,
|
||||
/// The z-axis (normal).
|
||||
pub z_axis: Point3d,
|
||||
#[serde(skip)]
|
||||
pub meta: Vec<Metadata>,
|
||||
}
|
||||
@ -319,13 +317,6 @@ impl Plane {
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
z_axis:
|
||||
Point3d {
|
||||
x: 0.0,
|
||||
y: 0.0,
|
||||
z: 1.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
..
|
||||
} => return PlaneData::XY,
|
||||
Self {
|
||||
@ -338,7 +329,7 @@ impl Plane {
|
||||
},
|
||||
x_axis:
|
||||
Point3d {
|
||||
x: 1.0,
|
||||
x: -1.0,
|
||||
y: 0.0,
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
@ -350,13 +341,6 @@ impl Plane {
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
z_axis:
|
||||
Point3d {
|
||||
x: 0.0,
|
||||
y: 0.0,
|
||||
z: -1.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
..
|
||||
} => return PlaneData::NegXY,
|
||||
Self {
|
||||
@ -381,13 +365,6 @@ impl Plane {
|
||||
z: 1.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
z_axis:
|
||||
Point3d {
|
||||
x: 0.0,
|
||||
y: -1.0,
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
..
|
||||
} => return PlaneData::XZ,
|
||||
Self {
|
||||
@ -400,7 +377,7 @@ impl Plane {
|
||||
},
|
||||
x_axis:
|
||||
Point3d {
|
||||
x: 1.0,
|
||||
x: -1.0,
|
||||
y: 0.0,
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
@ -412,13 +389,6 @@ impl Plane {
|
||||
z: 1.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
z_axis:
|
||||
Point3d {
|
||||
x: 0.0,
|
||||
y: 1.0,
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
..
|
||||
} => return PlaneData::NegXZ,
|
||||
Self {
|
||||
@ -443,13 +413,6 @@ impl Plane {
|
||||
z: 1.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
z_axis:
|
||||
Point3d {
|
||||
x: 1.0,
|
||||
y: 0.0,
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
..
|
||||
} => return PlaneData::YZ,
|
||||
Self {
|
||||
@ -463,7 +426,7 @@ impl Plane {
|
||||
x_axis:
|
||||
Point3d {
|
||||
x: 0.0,
|
||||
y: 1.0,
|
||||
y: -1.0,
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
@ -474,13 +437,6 @@ impl Plane {
|
||||
z: 1.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
z_axis:
|
||||
Point3d {
|
||||
x: -1.0,
|
||||
y: 0.0,
|
||||
z: 0.0,
|
||||
units: UnitLen::Mm,
|
||||
},
|
||||
..
|
||||
} => return PlaneData::NegYZ,
|
||||
_ => {}
|
||||
@ -491,7 +447,6 @@ impl Plane {
|
||||
origin: self.origin,
|
||||
x_axis: self.x_axis,
|
||||
y_axis: self.y_axis,
|
||||
z_axis: self.z_axis,
|
||||
}
|
||||
}
|
||||
|
||||
@ -504,7 +459,6 @@ impl Plane {
|
||||
origin: Point3d::new(0.0, 0.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(1.0, 0.0, 0.0, UnitLen::Mm),
|
||||
y_axis: Point3d::new(0.0, 1.0, 0.0, UnitLen::Mm),
|
||||
z_axis: Point3d::new(0.0, 0.0, 1.0, UnitLen::Mm),
|
||||
value: PlaneType::XY,
|
||||
meta: vec![],
|
||||
},
|
||||
@ -512,9 +466,8 @@ impl Plane {
|
||||
id,
|
||||
artifact_id: id.into(),
|
||||
origin: Point3d::new(0.0, 0.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(1.0, 0.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(-1.0, 0.0, 0.0, UnitLen::Mm),
|
||||
y_axis: Point3d::new(0.0, 1.0, 0.0, UnitLen::Mm),
|
||||
z_axis: Point3d::new(0.0, 0.0, -1.0, UnitLen::Mm),
|
||||
value: PlaneType::XY,
|
||||
meta: vec![],
|
||||
},
|
||||
@ -524,7 +477,6 @@ impl Plane {
|
||||
origin: Point3d::new(0.0, 0.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(1.0, 0.0, 0.0, UnitLen::Mm),
|
||||
y_axis: Point3d::new(0.0, 0.0, 1.0, UnitLen::Mm),
|
||||
z_axis: Point3d::new(0.0, -1.0, 0.0, UnitLen::Mm),
|
||||
value: PlaneType::XZ,
|
||||
meta: vec![],
|
||||
},
|
||||
@ -534,7 +486,6 @@ impl Plane {
|
||||
origin: Point3d::new(0.0, 0.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(-1.0, 0.0, 0.0, UnitLen::Mm),
|
||||
y_axis: Point3d::new(0.0, 0.0, 1.0, UnitLen::Mm),
|
||||
z_axis: Point3d::new(0.0, 1.0, 0.0, UnitLen::Mm),
|
||||
value: PlaneType::XZ,
|
||||
meta: vec![],
|
||||
},
|
||||
@ -544,7 +495,6 @@ impl Plane {
|
||||
origin: Point3d::new(0.0, 0.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(0.0, 1.0, 0.0, UnitLen::Mm),
|
||||
y_axis: Point3d::new(0.0, 0.0, 1.0, UnitLen::Mm),
|
||||
z_axis: Point3d::new(1.0, 0.0, 0.0, UnitLen::Mm),
|
||||
value: PlaneType::YZ,
|
||||
meta: vec![],
|
||||
},
|
||||
@ -552,18 +502,12 @@ impl Plane {
|
||||
id,
|
||||
artifact_id: id.into(),
|
||||
origin: Point3d::new(0.0, 0.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(0.0, 1.0, 0.0, UnitLen::Mm),
|
||||
x_axis: Point3d::new(0.0, -1.0, 0.0, UnitLen::Mm),
|
||||
y_axis: Point3d::new(0.0, 0.0, 1.0, UnitLen::Mm),
|
||||
z_axis: Point3d::new(-1.0, 0.0, 0.0, UnitLen::Mm),
|
||||
value: PlaneType::YZ,
|
||||
meta: vec![],
|
||||
},
|
||||
PlaneData::Plane {
|
||||
origin,
|
||||
x_axis,
|
||||
y_axis,
|
||||
z_axis,
|
||||
} => {
|
||||
PlaneData::Plane { origin, x_axis, y_axis } => {
|
||||
let id = exec_state.next_uuid();
|
||||
Plane {
|
||||
id,
|
||||
@ -571,7 +515,6 @@ impl Plane {
|
||||
origin,
|
||||
x_axis,
|
||||
y_axis,
|
||||
z_axis,
|
||||
value: PlaneType::Custom,
|
||||
meta: vec![],
|
||||
}
|
||||
@ -600,8 +543,6 @@ pub struct Face {
|
||||
pub x_axis: Point3d,
|
||||
/// What should the face's Y axis be?
|
||||
pub y_axis: Point3d,
|
||||
/// The z-axis (normal).
|
||||
pub z_axis: Point3d,
|
||||
/// The solid the face is on.
|
||||
pub solid: Box<Solid>,
|
||||
pub units: UnitLen,
|
||||
@ -679,7 +620,8 @@ impl Sketch {
|
||||
adjust_camera: false,
|
||||
planar_normal: if let SketchSurface::Plane(plane) = &self.on {
|
||||
// We pass in the normal for the plane here.
|
||||
Some(plane.z_axis.into())
|
||||
let normal = plane.x_axis.cross(&plane.y_axis);
|
||||
Some(normal.into())
|
||||
} else {
|
||||
None
|
||||
},
|
||||
@ -723,12 +665,6 @@ impl SketchSurface {
|
||||
SketchSurface::Face(face) => face.y_axis,
|
||||
}
|
||||
}
|
||||
pub(crate) fn z_axis(&self) -> Point3d {
|
||||
match self {
|
||||
SketchSurface::Plane(plane) => plane.z_axis,
|
||||
SketchSurface::Face(face) => face.z_axis,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
@ -969,6 +905,27 @@ impl Point3d {
|
||||
pub const fn is_zero(&self) -> bool {
|
||||
self.x == 0.0 && self.y == 0.0 && self.z == 0.0
|
||||
}
|
||||
|
||||
/// Calculate the cross product of this vector with another
|
||||
pub fn cross(&self, other: &Self) -> Self {
|
||||
let other = if other.units == self.units {
|
||||
other
|
||||
} else {
|
||||
&Point3d {
|
||||
x: self.units.adjust_to(other.x, self.units).0,
|
||||
y: self.units.adjust_to(other.y, self.units).0,
|
||||
z: self.units.adjust_to(other.z, self.units).0,
|
||||
units: self.units,
|
||||
}
|
||||
};
|
||||
|
||||
Self {
|
||||
x: self.y * other.z - self.z * other.y,
|
||||
y: self.z * other.x - self.x * other.z,
|
||||
z: self.x * other.y - self.y * other.x,
|
||||
units: self.units,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<[TyF64; 3]> for Point3d {
|
||||
|
@ -1043,10 +1043,6 @@ impl KclValue {
|
||||
.get("yAxis")
|
||||
.and_then(Point3d::from_kcl_val)
|
||||
.ok_or(CoercionError::from(self))?;
|
||||
let z_axis = value
|
||||
.get("zAxis")
|
||||
.and_then(Point3d::from_kcl_val)
|
||||
.ok_or(CoercionError::from(self))?;
|
||||
|
||||
let id = exec_state.mod_local.id_generator.next_uuid();
|
||||
let plane = Plane {
|
||||
@ -1055,7 +1051,6 @@ impl KclValue {
|
||||
origin,
|
||||
x_axis,
|
||||
y_axis,
|
||||
z_axis,
|
||||
value: super::PlaneType::Uninit,
|
||||
meta: meta.clone(),
|
||||
};
|
||||
|
Reference in New Issue
Block a user