rust changes to make three point confrom to same as others since we're not ready with name params yet
This commit is contained in:
@ -394,6 +394,18 @@ impl Args {
|
|||||||
> {
|
> {
|
||||||
FromArgs::from_args(self, 0)
|
FromArgs::from_args(self, 0)
|
||||||
}
|
}
|
||||||
|
pub(crate) fn get_circle_three_point_args(
|
||||||
|
&self,
|
||||||
|
) -> Result<
|
||||||
|
(
|
||||||
|
crate::std::shapes::CircleThreePointData,
|
||||||
|
crate::std::shapes::SketchOrSurface,
|
||||||
|
Option<TagNode>,
|
||||||
|
),
|
||||||
|
KclError,
|
||||||
|
> {
|
||||||
|
FromArgs::from_args(self, 0)
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn get_sketches(&self) -> Result<(SketchSet, Sketch), KclError> {
|
pub(crate) fn get_sketches(&self) -> Result<(SketchSet, Sketch), KclError> {
|
||||||
FromArgs::from_args(self, 0)
|
FromArgs::from_args(self, 0)
|
||||||
@ -1230,6 +1242,16 @@ impl<'a> FromKclValue<'a> for super::shapes::CircleData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> FromKclValue<'a> for super::shapes::CircleThreePointData {
|
||||||
|
fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
|
||||||
|
let obj = arg.as_object()?;
|
||||||
|
let_field_of!(obj, p1);
|
||||||
|
let_field_of!(obj, p2);
|
||||||
|
let_field_of!(obj, p3);
|
||||||
|
Some(Self { p1, p2, p3 })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a> FromKclValue<'a> for super::sketch::TangentialArcData {
|
impl<'a> FromKclValue<'a> for super::sketch::TangentialArcData {
|
||||||
fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
|
fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
|
||||||
let obj = arg.as_object()?;
|
let obj = arg.as_object()?;
|
||||||
|
|||||||
@ -139,7 +139,7 @@ async fn inner_helix(data: HelixData, exec_state: &mut ExecState, args: Args) ->
|
|||||||
args.batch_modeling_cmd(
|
args.batch_modeling_cmd(
|
||||||
exec_state.next_uuid(),
|
exec_state.next_uuid(),
|
||||||
ModelingCmd::from(mcmd::EntityMakeHelixFromParams {
|
ModelingCmd::from(mcmd::EntityMakeHelixFromParams {
|
||||||
radius: data.radius,
|
radius: LengthUnit(data.radius),
|
||||||
is_clockwise: !data.ccw,
|
is_clockwise: !data.ccw,
|
||||||
length: LengthUnit(length),
|
length: LengthUnit(length),
|
||||||
revolutions: data.revolutions,
|
revolutions: data.revolutions,
|
||||||
@ -156,7 +156,7 @@ async fn inner_helix(data: HelixData, exec_state: &mut ExecState, args: Args) ->
|
|||||||
args.batch_modeling_cmd(
|
args.batch_modeling_cmd(
|
||||||
exec_state.next_uuid(),
|
exec_state.next_uuid(),
|
||||||
ModelingCmd::from(mcmd::EntityMakeHelixFromEdge {
|
ModelingCmd::from(mcmd::EntityMakeHelixFromEdge {
|
||||||
radius: data.radius,
|
radius: LengthUnit(data.radius),
|
||||||
is_clockwise: !data.ccw,
|
is_clockwise: !data.ccw,
|
||||||
length: data.length.map(LengthUnit),
|
length: data.length.map(LengthUnit),
|
||||||
revolutions: data.revolutions,
|
revolutions: data.revolutions,
|
||||||
|
|||||||
@ -55,6 +55,20 @@ pub async fn circle(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// three point sketch circle
|
||||||
|
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
|
||||||
|
#[ts(export)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
// TODO: make sure the docs on the args below are correct.
|
||||||
|
pub struct CircleThreePointData {
|
||||||
|
/// first point
|
||||||
|
pub p1: [f64; 2],
|
||||||
|
/// second point
|
||||||
|
pub p2: [f64; 2],
|
||||||
|
/// third point
|
||||||
|
pub p3: [f64; 2],
|
||||||
|
}
|
||||||
|
|
||||||
/// Construct a 2-dimensional circle, of the specified radius, centered at
|
/// Construct a 2-dimensional circle, of the specified radius, centered at
|
||||||
/// the provided (x, y) origin point.
|
/// the provided (x, y) origin point.
|
||||||
///
|
///
|
||||||
@ -150,13 +164,11 @@ async fn inner_circle(
|
|||||||
|
|
||||||
/// Sketch a 3-point circle.
|
/// Sketch a 3-point circle.
|
||||||
pub async fn circle_three_point(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
pub async fn circle_three_point(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||||
let p1 = args.get_kw_arg("p1")?;
|
let (data, sketch_surface_or_group, tag): (CircleThreePointData, SketchOrSurface, Option<TagNode>) =
|
||||||
let p2 = args.get_kw_arg("p2")?;
|
args.get_circle_three_point_args()?;
|
||||||
let p3 = args.get_kw_arg("p3")?;
|
|
||||||
let sketch_surface_or_group = args.get_unlabeled_kw_arg("sketch_surface_or_group")?;
|
|
||||||
let tag = args.get_kw_arg_opt("tag");
|
let tag = args.get_kw_arg_opt("tag");
|
||||||
|
|
||||||
let sketch = inner_circle_three_point(p1, p2, p3, sketch_surface_or_group, tag, exec_state, args).await?;
|
let sketch = inner_circle_three_point(data, sketch_surface_or_group, tag, exec_state, args).await?;
|
||||||
Ok(KclValue::Sketch {
|
Ok(KclValue::Sketch {
|
||||||
value: Box::new(sketch),
|
value: Box::new(sketch),
|
||||||
})
|
})
|
||||||
@ -172,12 +184,10 @@ pub async fn circle_three_point(exec_state: &mut ExecState, args: Args) -> Resul
|
|||||||
/// ```
|
/// ```
|
||||||
#[stdlib {
|
#[stdlib {
|
||||||
name = "circleThreePoint",
|
name = "circleThreePoint",
|
||||||
keywords = true,
|
keywords = false,
|
||||||
unlabeled_first = true,
|
unlabeled_first = true,
|
||||||
arg_docs = {
|
arg_docs = {
|
||||||
p1 = "1st point to derive the circle.",
|
data = "Data containing the three points to derive the circle.",
|
||||||
p2 = "2nd point to derive the circle.",
|
|
||||||
p3 = "3rd point to derive the circle.",
|
|
||||||
sketch_surface_or_group = "Plane or surface to sketch on.",
|
sketch_surface_or_group = "Plane or surface to sketch on.",
|
||||||
tag = "Identifier for the circle to reference elsewhere.",
|
tag = "Identifier for the circle to reference elsewhere.",
|
||||||
}
|
}
|
||||||
@ -186,17 +196,15 @@ pub async fn circle_three_point(exec_state: &mut ExecState, args: Args) -> Resul
|
|||||||
/// Similar to inner_circle, but needs to retain 3-point information in the
|
/// Similar to inner_circle, but needs to retain 3-point information in the
|
||||||
/// path so it can be used for other features, otherwise it's lost.
|
/// path so it can be used for other features, otherwise it's lost.
|
||||||
async fn inner_circle_three_point(
|
async fn inner_circle_three_point(
|
||||||
p1: [f64; 2],
|
data: CircleThreePointData,
|
||||||
p2: [f64; 2],
|
|
||||||
p3: [f64; 2],
|
|
||||||
sketch_surface_or_group: SketchOrSurface,
|
sketch_surface_or_group: SketchOrSurface,
|
||||||
tag: Option<TagNode>,
|
tag: Option<TagNode>,
|
||||||
exec_state: &mut ExecState,
|
exec_state: &mut ExecState,
|
||||||
args: Args,
|
args: Args,
|
||||||
) -> Result<Sketch, KclError> {
|
) -> Result<Sketch, KclError> {
|
||||||
let center = calculate_circle_center(p1, p2, p3);
|
let center = calculate_circle_center(data.p1, data.p2, data.p3);
|
||||||
// It can be the distance to any of the 3 points - they all lay on the circumference.
|
// It can be the distance to any of the 3 points - they all lay on the circumference.
|
||||||
let radius = distance(center.into(), p2.into());
|
let radius = distance(center.into(), data.p2.into());
|
||||||
|
|
||||||
let sketch_surface = match sketch_surface_or_group {
|
let sketch_surface = match sketch_surface_or_group {
|
||||||
SketchOrSurface::SketchSurface(surface) => surface,
|
SketchOrSurface::SketchSurface(surface) => surface,
|
||||||
@ -242,9 +250,9 @@ async fn inner_circle_three_point(
|
|||||||
metadata: args.source_range.into(),
|
metadata: args.source_range.into(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
p1,
|
p1: data.p1,
|
||||||
p2,
|
p2: data.p2,
|
||||||
p3,
|
p3: data.p3,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut new_sketch = sketch.clone();
|
let mut new_sketch = sketch.clone();
|
||||||
@ -260,7 +268,6 @@ async fn inner_circle_three_point(
|
|||||||
Ok(new_sketch)
|
Ok(new_sketch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Type of the polygon
|
/// Type of the polygon
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema, Default)]
|
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema, Default)]
|
||||||
#[ts(export)]
|
#[ts(export)]
|
||||||
|
|||||||
Reference in New Issue
Block a user