KCL: Helper functions to get a plane's X and Y axis
This commit is contained in:
		
							
								
								
									
										45
									
								
								docs/kcl-std/functions/std-planes-xAxis.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								docs/kcl-std/functions/std-planes-xAxis.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										45
									
								
								docs/kcl-std/functions/std-planes-yAxis.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								docs/kcl-std/functions/std-planes-yAxis.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -46,6 +46,9 @@ layout: manual
 | 
			
		||||
  * [`sin`](/docs/kcl-std/functions/std-math-sin)
 | 
			
		||||
  * [`sqrt`](/docs/kcl-std/functions/std-math-sqrt)
 | 
			
		||||
  * [`tan`](/docs/kcl-std/functions/std-math-tan)
 | 
			
		||||
* [**std::planes**](/docs/kcl-std/modules/std-planes)
 | 
			
		||||
  * [`planes::xAxis`](/docs/kcl-std/functions/std-planes-xAxis)
 | 
			
		||||
  * [`planes::yAxis`](/docs/kcl-std/functions/std-planes-yAxis)
 | 
			
		||||
* [**std::sketch**](/docs/kcl-std/modules/std-sketch)
 | 
			
		||||
  * [`angledLine`](/docs/kcl-std/functions/std-sketch-angledLine)
 | 
			
		||||
  * [`angledLineThatIntersects`](/docs/kcl-std/functions/std-sketch-angledLineThatIntersects)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								docs/kcl-std/modules/std-planes.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								docs/kcl-std/modules/std-planes.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
---
 | 
			
		||||
title: "planes"
 | 
			
		||||
subtitle: "Module in std"
 | 
			
		||||
excerpt: ""
 | 
			
		||||
layout: manual
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Functions and constants
 | 
			
		||||
 | 
			
		||||
* [`planes::xAxis`](/docs/kcl-std/functions/std-planes-xAxis)
 | 
			
		||||
* [`planes::yAxis`](/docs/kcl-std/functions/std-planes-yAxis)
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,7 @@ You might also want the [KCL language reference](/docs/kcl-lang) or the [KCL gui
 | 
			
		||||
* [`appearance::appearance`](/docs/kcl-std/modules/std-appearance)
 | 
			
		||||
* [`array`](/docs/kcl-std/modules/std-array)
 | 
			
		||||
* [`math`](/docs/kcl-std/modules/std-math)
 | 
			
		||||
* [`planes::planes`](/docs/kcl-std/modules/std-planes)
 | 
			
		||||
* [`sketch`](/docs/kcl-std/modules/std-sketch)
 | 
			
		||||
* [`solid`](/docs/kcl-std/modules/std-solid)
 | 
			
		||||
* [`sweep::sweep`](/docs/kcl-std/modules/std-sweep)
 | 
			
		||||
 | 
			
		||||
@ -97,6 +97,8 @@ pub const TEST_NAMES: &[&str] = &[
 | 
			
		||||
    "std-offsetPlane-2",
 | 
			
		||||
    "std-offsetPlane-3",
 | 
			
		||||
    "std-offsetPlane-4",
 | 
			
		||||
    "std-planes-xAxis-0",
 | 
			
		||||
    "std-planes-yAxis-0",
 | 
			
		||||
    "std-sketch-planeOf-0",
 | 
			
		||||
    "std-sketch-circle-0",
 | 
			
		||||
    "std-sketch-circle-1",
 | 
			
		||||
 | 
			
		||||
@ -92,6 +92,7 @@ pub(crate) fn read_std(mod_name: &str) -> Option<&'static str> {
 | 
			
		||||
        "math" => Some(include_str!("../std/math.kcl")),
 | 
			
		||||
        "sketch" => Some(include_str!("../std/sketch.kcl")),
 | 
			
		||||
        "turns" => Some(include_str!("../std/turns.kcl")),
 | 
			
		||||
        "planes" => Some(include_str!("../std/planes.kcl")),
 | 
			
		||||
        "types" => Some(include_str!("../std/types.kcl")),
 | 
			
		||||
        "solid" => Some(include_str!("../std/solid.kcl")),
 | 
			
		||||
        "units" => Some(include_str!("../std/units.kcl")),
 | 
			
		||||
 | 
			
		||||
@ -424,6 +424,14 @@ pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProp
 | 
			
		||||
            |e, a| Box::pin(crate::std::appearance::hex_string(e, a)),
 | 
			
		||||
            StdFnProps::default("std::appearance::hexString"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("planes", "xAxis") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::planes::x_axis(e, a)),
 | 
			
		||||
            StdFnProps::default("std::planes::xAxis"),
 | 
			
		||||
        ),
 | 
			
		||||
        ("planes", "yAxis") => (
 | 
			
		||||
            |e, a| Box::pin(crate::std::planes::y_axis(e, a)),
 | 
			
		||||
            StdFnProps::default("std::planes::yAxis"),
 | 
			
		||||
        ),
 | 
			
		||||
        (module, fn_name) => {
 | 
			
		||||
            panic!("No implementation found for {module}::{fn_name}, please add it to this big match statement")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,30 @@ use crate::{
 | 
			
		||||
    std::Args,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Get the axes of a plane
 | 
			
		||||
pub async fn x_axis(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let plane: Plane = args.get_unlabeled_kw_arg("plane", &RuntimeType::plane(), exec_state)?;
 | 
			
		||||
    let plane_meta = plane.meta.clone();
 | 
			
		||||
    let axis = plane.info.x_axis;
 | 
			
		||||
    Ok(KclValue::from_point3d(
 | 
			
		||||
        [axis.x, axis.y, axis.z],
 | 
			
		||||
        axis.units.into(),
 | 
			
		||||
        plane_meta.clone(),
 | 
			
		||||
    ))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Get the axes of a plane
 | 
			
		||||
pub async fn y_axis(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let plane: Plane = args.get_unlabeled_kw_arg("plane", &RuntimeType::plane(), exec_state)?;
 | 
			
		||||
    let plane_meta = plane.meta.clone();
 | 
			
		||||
    let axis = plane.info.y_axis;
 | 
			
		||||
    Ok(KclValue::from_point3d(
 | 
			
		||||
        [axis.x, axis.y, axis.z],
 | 
			
		||||
        axis.units.into(),
 | 
			
		||||
        plane_meta.clone(),
 | 
			
		||||
    ))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Find the plane of a given face.
 | 
			
		||||
pub async fn plane_of(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
 | 
			
		||||
    let solid = args.get_unlabeled_kw_arg("solid", &RuntimeType::solid(), exec_state)?;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										38
									
								
								rust/kcl-lib/std/planes.kcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								rust/kcl-lib/std/planes.kcl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
/// Find X axis of a plane.
 | 
			
		||||
///```kcl
 | 
			
		||||
/// mySolid = startSketchOn(XZ)
 | 
			
		||||
///   |> polygon(numSides = 3, radius = 1, center = [3, 2])
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
/// 
 | 
			
		||||
/// target = planeOf(mySolid, face = END)
 | 
			
		||||
/// 
 | 
			
		||||
/// xTarget = planes::xAxis(target)
 | 
			
		||||
/// assert(xTarget[0], isEqualTo = 1)
 | 
			
		||||
/// assert(xTarget[1], isEqualTo = 0)
 | 
			
		||||
/// assert(xTarget[2], isEqualTo = 0)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn xAxis(
 | 
			
		||||
  /// The solid whose face is being queried.
 | 
			
		||||
  @plane: Plane,
 | 
			
		||||
): Point3d {}
 | 
			
		||||
 | 
			
		||||
/// Find Y axis of a plane.
 | 
			
		||||
///```kcl
 | 
			
		||||
/// mySolid = startSketchOn(XZ)
 | 
			
		||||
///   |> polygon(numSides = 3, radius = 1, center = [3, 2])
 | 
			
		||||
///   |> extrude(length = 5)
 | 
			
		||||
/// 
 | 
			
		||||
/// target = planeOf(mySolid, face = END)
 | 
			
		||||
/// 
 | 
			
		||||
/// yTarget = planes::yAxis(target)
 | 
			
		||||
/// assert(yTarget[0], isEqualTo = 0)
 | 
			
		||||
/// assert(yTarget[1], isEqualTo = 0)
 | 
			
		||||
/// assert(yTarget[2], isEqualTo = 1)
 | 
			
		||||
/// ```
 | 
			
		||||
@(impl = std_rust)
 | 
			
		||||
export fn yAxis(
 | 
			
		||||
  /// The solid whose face is being queried.
 | 
			
		||||
  @plane: Plane,
 | 
			
		||||
): Point3d {}
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ export import * from "std::transform"
 | 
			
		||||
export import "std::turns"
 | 
			
		||||
export import "std::sweep"
 | 
			
		||||
export import "std::appearance"
 | 
			
		||||
export import "std::planes"
 | 
			
		||||
 | 
			
		||||
/// An abstract 3d plane aligned with the X and Y axes. Its normal is the positive Z axis.
 | 
			
		||||
export XY = {
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 60 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 60 KiB  | 
		Reference in New Issue
	
	Block a user