* git mv src/wasm-lib rust Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv wasm-lib to workspace Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv kcl-lib Signed-off-by: Jess Frazelle <github@jessfraz.com> * mv derive docs Signed-off-by: Jess Frazelle <github@jessfraz.com> * resolve file paths Signed-off-by: Jess Frazelle <github@jessfraz.com> * clippy Signed-off-by: Jess Frazelle <github@jessfraz.com> * move more shit Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix more paths Signed-off-by: Jess Frazelle <github@jessfraz.com> * make yarn build:wasm work Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix scripts Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> * better references Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix cargo ci Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix reference Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix more ci Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix tests Signed-off-by: Jess Frazelle <github@jessfraz.com> * cargo sort Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix script Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fmt Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix a dep Signed-off-by: Jess Frazelle <github@jessfraz.com> * sort Signed-off-by: Jess Frazelle <github@jessfraz.com> * remove unused deps Signed-off-by: Jess Frazelle <github@jessfraz.com> * Revert "remove unused deps" This reverts commit fbabdb062e275fd5cbc1476f8480a1afee15d972. * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * deps; Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
56 lines
1.6 KiB
Rust
56 lines
1.6 KiB
Rust
//! Functions related to polar coordinates.
|
|
|
|
use anyhow::Result;
|
|
use kcl_derive_docs::stdlib;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{
|
|
errors::KclError,
|
|
execution::{ExecState, KclValue},
|
|
std::args::{Args, TyF64},
|
|
};
|
|
|
|
/// Data for polar coordinates.
|
|
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
|
|
#[ts(export)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct PolarCoordsData {
|
|
/// The angle of the line (in degrees).
|
|
pub angle: f64,
|
|
/// The length of the line.
|
|
pub length: TyF64,
|
|
}
|
|
|
|
/// Convert from polar/sphere coordinates to cartesian coordinates.
|
|
pub async fn polar(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
|
let data: PolarCoordsData = args.get_data()?;
|
|
let result = inner_polar(&data)?;
|
|
|
|
args.make_user_val_from_f64_array(result.to_vec(), &data.length.ty)
|
|
}
|
|
|
|
/// Convert polar/sphere (azimuth, elevation, distance) coordinates to
|
|
/// cartesian (x/y/z grid) coordinates.
|
|
///
|
|
/// ```no_run
|
|
/// exampleSketch = startSketchOn('XZ')
|
|
/// |> startProfileAt([0, 0], %)
|
|
/// |> line(end = polar({angle: 30, length: 5}), tag = $thing)
|
|
/// |> line(end = [0, 5])
|
|
/// |> line(end = [segEndX(thing), 0])
|
|
/// |> line(end = [-20, 10])
|
|
/// |> close()
|
|
///
|
|
/// example = extrude(exampleSketch, length = 5)
|
|
/// ```
|
|
#[stdlib {
|
|
name = "polar",
|
|
}]
|
|
fn inner_polar(data: &PolarCoordsData) -> Result<[f64; 2], KclError> {
|
|
let angle = data.angle.to_radians();
|
|
let x = data.length.n * angle.cos();
|
|
let y = data.length.n * angle.sin();
|
|
Ok([x, y])
|
|
}
|