KCL: involuteCircular can use diameter in addition to radius (#7519)

Mechanical engineers prefer using diameter over radius.
This commit is contained in:
Adam Chalmers
2025-06-19 09:09:24 -05:00
committed by GitHub
parent de6e0f6b18
commit 9eaacc2a51
7 changed files with 118 additions and 145 deletions

View File

@ -11,7 +11,7 @@ use parse_display::{Display, FromStr};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::shapes::get_radius;
use super::shapes::{get_radius, get_radius_labelled};
#[cfg(feature = "artifact-graph")]
use crate::execution::{Artifact, ArtifactId, CodeRef, StartSketchOnFace, StartSketchOnPlane};
use crate::{
@ -101,13 +101,26 @@ pub const NEW_TAG_KW: &str = "tag";
pub async fn involute_circular(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let sketch = args.get_unlabeled_kw_arg("sketch", &RuntimeType::sketch(), exec_state)?;
let start_radius: TyF64 = args.get_kw_arg("startRadius", &RuntimeType::length(), exec_state)?;
let end_radius: TyF64 = args.get_kw_arg("endRadius", &RuntimeType::length(), exec_state)?;
let start_radius: Option<TyF64> = args.get_kw_arg_opt("startRadius", &RuntimeType::length(), exec_state)?;
let end_radius: Option<TyF64> = args.get_kw_arg_opt("endRadius", &RuntimeType::length(), exec_state)?;
let start_diameter: Option<TyF64> = args.get_kw_arg_opt("startDiameter", &RuntimeType::length(), exec_state)?;
let end_diameter: Option<TyF64> = args.get_kw_arg_opt("endDiameter", &RuntimeType::length(), exec_state)?;
let angle: TyF64 = args.get_kw_arg("angle", &RuntimeType::angle(), exec_state)?;
let reverse = args.get_kw_arg_opt("reverse", &RuntimeType::bool(), exec_state)?;
let tag = args.get_kw_arg_opt("tag", &RuntimeType::tag_decl(), exec_state)?;
let new_sketch =
inner_involute_circular(sketch, start_radius, end_radius, angle, reverse, tag, exec_state, args).await?;
let new_sketch = inner_involute_circular(
sketch,
start_radius,
end_radius,
start_diameter,
end_diameter,
angle,
reverse,
tag,
exec_state,
args,
)
.await?;
Ok(KclValue::Sketch {
value: Box::new(new_sketch),
})
@ -123,8 +136,10 @@ fn involute_curve(radius: f64, angle: f64) -> (f64, f64) {
#[allow(clippy::too_many_arguments)]
async fn inner_involute_circular(
sketch: Sketch,
start_radius: TyF64,
end_radius: TyF64,
start_radius: Option<TyF64>,
end_radius: Option<TyF64>,
start_diameter: Option<TyF64>,
end_diameter: Option<TyF64>,
angle: TyF64,
reverse: Option<bool>,
tag: Option<TagNode>,
@ -133,6 +148,22 @@ async fn inner_involute_circular(
) -> Result<Sketch, KclError> {
let id = exec_state.next_uuid();
let longer_args_dot_source_range = args.source_range;
let start_radius = get_radius_labelled(
start_radius,
start_diameter,
args.source_range,
"startRadius",
"startDiameter",
)?;
let end_radius = get_radius_labelled(
end_radius,
end_diameter,
longer_args_dot_source_range,
"endRadius",
"endDiameter",
)?;
exec_state
.batch_modeling_cmd(
ModelingCmdMeta::from_args_id(&args, id),