Compare commits

...

2 Commits

Author SHA1 Message Date
327cea7d73 I don't know why I can't capture startSketchOn(-XY) 2025-04-23 21:57:14 +10:00
3b7f301961 Declare std::offsetPlane in KCL
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-04-23 14:39:05 +12:00
80 changed files with 1313 additions and 1819 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -74,7 +74,7 @@ layout: manual
* [`map`](kcl/map)
* [`max`](kcl/max)
* [`min`](kcl/min)
* [`offsetPlane`](kcl/offsetPlane)
* [`offsetPlane`](kcl/std-offsetPlane)
* [`patternCircular2d`](kcl/patternCircular2d)
* [`patternCircular3d`](kcl/patternCircular3d)
* [`patternLinear2d`](kcl/patternLinear2d)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

122
docs/kcl/std-offsetPlane.md Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -161521,643 +161521,6 @@
"exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 70, length = min(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)"
]
},
{
"name": "offsetPlane",
"summary": "Offset a plane by a distance along its normal.",
"description": "For example, if you offset the 'XZ' plane by 10, the new plane will be parallel to the 'XZ' plane and 10 units away from it.",
"tags": [],
"keywordArguments": true,
"args": [
{
"name": "plane",
"type": "PlaneData",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "PlaneData",
"description": "Orientation data that can be used to construct a plane, not a plane in itself.",
"oneOf": [
{
"description": "The XY plane.",
"type": "string",
"enum": [
"XY"
]
},
{
"description": "The opposite side of the XY plane.",
"type": "string",
"enum": [
"-XY"
]
},
{
"description": "The XZ plane.",
"type": "string",
"enum": [
"XZ"
]
},
{
"description": "The opposite side of the XZ plane.",
"type": "string",
"enum": [
"-XZ"
]
},
{
"description": "The YZ plane.",
"type": "string",
"enum": [
"YZ"
]
},
{
"description": "The opposite side of the YZ plane.",
"type": "string",
"enum": [
"-YZ"
]
},
{
"description": "A defined plane.",
"type": "object",
"required": [
"plane"
],
"properties": {
"plane": {
"type": "object",
"required": [
"origin",
"xAxis",
"yAxis",
"zAxis"
],
"properties": {
"origin": {
"description": "Origin of the plane.",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
},
"xAxis": {
"description": "What should the planes X axis be?",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
},
"yAxis": {
"description": "What should the planes Y axis be?",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
},
"zAxis": {
"description": "The z-axis (normal).",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
}
}
}
},
"additionalProperties": false
}
],
"definitions": {
"Point3d": {
"type": "object",
"required": [
"units",
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "number",
"format": "double"
},
"y": {
"type": "number",
"format": "double"
},
"z": {
"type": "number",
"format": "double"
},
"units": {
"$ref": "#/components/schemas/UnitLen"
}
}
},
"UnitLen": {
"description": "A unit of length.",
"oneOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Mm"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Cm"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"M"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Inches"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Feet"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Yards"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Unknown"
]
}
}
}
]
}
}
},
"required": true,
"includeInSnippet": true,
"description": "The plane (e.g. XY) which this new plane is created from.",
"labelRequired": false
},
{
"name": "offset",
"type": "number",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "TyF64",
"type": "number",
"format": "double",
"definitions": {
"Point3d": {
"type": "object",
"required": [
"units",
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "number",
"format": "double"
},
"y": {
"type": "number",
"format": "double"
},
"z": {
"type": "number",
"format": "double"
},
"units": {
"$ref": "#/components/schemas/UnitLen"
}
}
},
"UnitLen": {
"description": "A unit of length.",
"oneOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Mm"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Cm"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"M"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Inches"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Feet"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Yards"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Unknown"
]
}
}
}
]
}
}
},
"required": true,
"includeInSnippet": true,
"description": "Distance from the standard plane this new plane will be created at.",
"labelRequired": true
}
],
"returnValue": {
"name": "",
"type": "Plane",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "Plane",
"type": "object",
"required": [
"artifactId",
"id",
"origin",
"value",
"xAxis",
"yAxis",
"zAxis"
],
"properties": {
"id": {
"description": "The id of the plane.",
"type": "string",
"format": "uuid"
},
"artifactId": {
"description": "The artifact ID.",
"allOf": [
{
"$ref": "#/components/schemas/ArtifactId"
}
]
},
"value": {
"$ref": "#/components/schemas/PlaneType"
},
"origin": {
"description": "Origin of the plane.",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
},
"xAxis": {
"description": "What should the plane's X axis be?",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
},
"yAxis": {
"description": "What should the plane's Y axis be?",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
},
"zAxis": {
"description": "The z-axis (normal).",
"allOf": [
{
"$ref": "#/components/schemas/Point3d"
}
]
}
},
"definitions": {
"ArtifactId": {
"type": "string",
"format": "uuid"
},
"PlaneType": {
"description": "Type for a plane.",
"oneOf": [
{
"type": "string",
"enum": [
"XY",
"XZ",
"YZ"
]
},
{
"description": "A custom plane.",
"type": "string",
"enum": [
"Custom"
]
},
{
"description": "A custom plane which has not been sent to the engine. It must be sent before it is used.",
"type": "string",
"enum": [
"Uninit"
]
}
]
},
"Point3d": {
"type": "object",
"required": [
"units",
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "number",
"format": "double"
},
"y": {
"type": "number",
"format": "double"
},
"z": {
"type": "number",
"format": "double"
},
"units": {
"$ref": "#/components/schemas/UnitLen"
}
}
},
"UnitLen": {
"description": "A unit of length.",
"oneOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Mm"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Cm"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"M"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Inches"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Feet"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Yards"
]
}
}
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"Unknown"
]
}
}
}
]
}
}
},
"required": true,
"includeInSnippet": true,
"labelRequired": true
},
"unpublished": false,
"deprecated": false,
"examples": [
"// Loft a square and a circle on the `XY` plane using offset.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])",
"// Loft a square and a circle on the `XZ` plane using offset.\nsquareSketch = startSketchOn(XZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(XZ, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])",
"// Loft a square and a circle on the `YZ` plane using offset.\nsquareSketch = startSketchOn(YZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(YZ, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])",
"// Loft a square and a circle on the `-XZ` plane using offset.\nsquareSketch = startSketchOn(-XZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(-XZ, offset = -150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])",
"// A circle on the XY plane\nstartSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = 10, center = [0, 0])\n\n// Triangle on the plane 4 units above\nstartSketchOn(offsetPlane(XY, offset = 4))\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> close()"
]
},
{
"name": "patternCircular2d",
"summary": "Repeat a 2-dimensional sketch some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.",

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -6,7 +6,7 @@ uses-engine = { max-threads = 4 }
after-engine = { max-threads = 12 }
[profile.default]
slow-timeout = { period = "90s", terminate-after = 1 }
slow-timeout = { period = "180s", terminate-after = 1 }
[profile.ci]
slow-timeout = { period = "50s", terminate-after = 5 }

View File

@ -6,11 +6,12 @@
mod tests;
mod unbox;
use std::collections::HashMap;
use std::{collections::HashMap, fs};
use convert_case::Casing;
use inflector::{cases::camelcase::to_camel_case, Inflector};
use once_cell::sync::Lazy;
use proc_macro2::Span;
use quote::{format_ident, quote, quote_spanned, ToTokens};
use regex::Regex;
use serde::Deserialize;
@ -21,6 +22,16 @@ use syn::{
};
use unbox::unbox;
#[proc_macro_attribute]
pub fn stdlib(attr: proc_macro::TokenStream, item: proc_macro::TokenStream) -> proc_macro::TokenStream {
do_output(do_stdlib(attr.into(), item.into()))
}
#[proc_macro_attribute]
pub fn for_each_std_mod(_attr: proc_macro::TokenStream, item: proc_macro::TokenStream) -> proc_macro::TokenStream {
do_for_each_std_mod(item.into()).into()
}
/// Describes an argument of a stdlib function.
#[derive(Deserialize, Debug)]
struct ArgMetadata {
@ -73,11 +84,6 @@ struct StdlibMetadata {
args: HashMap<String, ArgMetadata>,
}
#[proc_macro_attribute]
pub fn stdlib(attr: proc_macro::TokenStream, item: proc_macro::TokenStream) -> proc_macro::TokenStream {
do_output(do_stdlib(attr.into(), item.into()))
}
fn do_stdlib(
attr: proc_macro2::TokenStream,
item: proc_macro2::TokenStream,
@ -86,6 +92,31 @@ fn do_stdlib(
do_stdlib_inner(metadata, attr, item)
}
fn do_for_each_std_mod(item: proc_macro2::TokenStream) -> proc_macro2::TokenStream {
let item: syn::ItemFn = syn::parse2(item.clone()).unwrap();
let mut result = proc_macro2::TokenStream::new();
for name in fs::read_dir("kcl-lib/std").unwrap().filter_map(|e| {
let e = e.unwrap();
let filename = e.file_name();
filename.to_str().unwrap().strip_suffix(".kcl").map(str::to_owned)
}) {
let mut item = item.clone();
item.sig.ident = syn::Ident::new(&format!("{}_{}", item.sig.ident, name), Span::call_site());
let stmts = &item.block.stmts;
//let name = format!("\"{name}\"");
let block = quote! {
{
const STD_MOD_NAME: &str = #name;
#(#stmts)*
}
};
item.block = Box::new(syn::parse2(block).unwrap());
result.extend(Some(item.into_token_stream()));
}
result
}
fn do_output(res: Result<(proc_macro2::TokenStream, Vec<Error>), Error>) -> proc_macro::TokenStream {
match res {
Err(err) => err.to_compile_error().into(),
@ -671,6 +702,7 @@ fn normalize_comment_string(s: String) -> Vec<String> {
/// Represent an item without concern for its body which may (or may not)
/// contain syntax errors.
#[derive(Clone)]
struct ItemFnForSignature {
pub attrs: Vec<Attribute>,
pub vis: Visibility,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -61,8 +61,10 @@ impl CollectionVisitor {
format!("std::{}::", self.name)
};
let mut dd = match var.kind {
VariableKind::Fn => DocData::Fn(FnData::from_ast(var, qual_name, preferred_prefix)),
VariableKind::Const => DocData::Const(ConstData::from_ast(var, qual_name, preferred_prefix)),
VariableKind::Fn => DocData::Fn(FnData::from_ast(var, qual_name, preferred_prefix, name)),
VariableKind::Const => {
DocData::Const(ConstData::from_ast(var, qual_name, preferred_prefix, name))
}
};
dd.with_meta(&var.outer_attrs);
@ -79,7 +81,7 @@ impl CollectionVisitor {
} else {
format!("std::{}::", self.name)
};
let mut dd = DocData::Ty(TyData::from_ast(ty, qual_name, preferred_prefix));
let mut dd = DocData::Ty(TyData::from_ast(ty, qual_name, preferred_prefix, name));
dd.with_meta(&ty.outer_attrs);
for a in &ty.outer_attrs {
@ -114,6 +116,16 @@ impl DocData {
}
}
/// The name of the module in which the item is declared, e.g., `sketch`
#[allow(dead_code)]
pub fn module_name(&self) -> &str {
match self {
DocData::Fn(f) => &f.module_name,
DocData::Const(c) => &c.module_name,
DocData::Ty(t) => &t.module_name,
}
}
#[allow(dead_code)]
pub fn file_name(&self) -> String {
match self {
@ -132,6 +144,7 @@ impl DocData {
}
}
/// The path to the module through which the item is accessed, e.g., `std::sketch`
#[allow(dead_code)]
pub fn mod_name(&self) -> String {
let q = match self {
@ -217,6 +230,8 @@ pub struct ConstData {
/// Code examples.
/// These are tested and we know they compile and execute.
pub examples: Vec<(String, ExampleProperties)>,
pub module_name: String,
}
impl ConstData {
@ -224,6 +239,7 @@ impl ConstData {
var: &crate::parsing::ast::types::VariableDeclaration,
mut qual_name: String,
preferred_prefix: &str,
module_name: &str,
) -> Self {
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Const);
@ -263,6 +279,7 @@ impl ConstData {
summary: None,
description: None,
examples: Vec::new(),
module_name: module_name.to_owned(),
}
}
@ -334,6 +351,8 @@ pub struct FnData {
pub examples: Vec<(String, ExampleProperties)>,
#[allow(dead_code)]
pub referenced_types: Vec<String>,
pub module_name: String,
}
impl FnData {
@ -341,6 +360,7 @@ impl FnData {
var: &crate::parsing::ast::types::VariableDeclaration,
mut qual_name: String,
preferred_prefix: &str,
module_name: &str,
) -> Self {
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Fn);
let crate::parsing::ast::types::Expr::FunctionExpression(expr) = &var.declaration.init else {
@ -375,6 +395,7 @@ impl FnData {
description: None,
examples: Vec::new(),
referenced_types: referenced_types.into_iter().collect(),
module_name: module_name.to_owned(),
}
}
@ -654,6 +675,8 @@ pub struct TyData {
pub examples: Vec<(String, ExampleProperties)>,
#[allow(dead_code)]
pub referenced_types: Vec<String>,
pub module_name: String,
}
impl TyData {
@ -661,6 +684,7 @@ impl TyData {
ty: &crate::parsing::ast::types::TypeDeclaration,
mut qual_name: String,
preferred_prefix: &str,
module_name: &str,
) -> Self {
let name = ty.name.name.clone();
qual_name.push_str(&name);
@ -684,6 +708,7 @@ impl TyData {
description: None,
examples: Vec::new(),
referenced_types: referenced_types.into_iter().collect(),
module_name: module_name.to_owned(),
}
}
@ -1009,6 +1034,8 @@ fn collect_type_names_from_primitive(ty: &PrimitiveType) -> String {
#[cfg(test)]
mod test {
use kcl_derive_docs::for_each_std_mod;
use super::*;
#[test]
@ -1047,18 +1074,28 @@ mod test {
);
}
#[tokio::test(flavor = "multi_thread", worker_threads = 5)]
async fn test_examples() -> miette::Result<()> {
#[for_each_std_mod]
#[tokio::test(flavor = "multi_thread")]
async fn test_examples() {
let std = walk_prelude();
let mut errs = Vec::new();
for d in std {
if d.module_name() != STD_MOD_NAME {
continue;
}
for (i, eg) in d.examples().enumerate() {
let result = match crate::test_server::execute_and_snapshot(eg, None).await {
Err(crate::errors::ExecError::Kcl(e)) => {
return Err(miette::Report::new(crate::errors::Report {
error: e.error,
filename: format!("{}{i}", d.name()),
kcl_source: eg.to_string(),
}));
errs.push(
miette::Report::new(crate::errors::Report {
error: e.error,
filename: format!("{}{i}", d.name()),
kcl_source: eg.to_string(),
})
.to_string(),
);
continue;
}
Err(other_err) => panic!("{}", other_err),
Ok(img) => img,
@ -1071,6 +1108,8 @@ mod test {
}
}
Ok(())
if !errs.is_empty() {
panic!("{}", errs.join("\n\n"));
}
}
}

View File

@ -1142,9 +1142,6 @@ 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;
plane.value = PlaneType::Uninit;
plane.id = exec_state.next_uuid();
@ -2649,7 +2646,15 @@ 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 } => {
// The negation implementation only changes the plane type to Uninit
// and updates the id, but doesn't actually negate any vectors
assert_eq!(value.value, PlaneType::Uninit);
// Calculate z-axis as cross product to verify it's still the same direction
let z_axis = value.x_axis.cross(&value.y_axis);
assert_eq!(z_axis.z, 1.0)
},
_ => unreachable!(),
}
}

View File

@ -262,14 +262,15 @@ 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>,
}
impl Plane {
pub(crate) fn into_plane_data(self) -> PlaneData {
crate::log::log(format!("planeTEST!!"));
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("foo=").into());
if self.origin.is_zero() {
match self {
Self {
@ -296,13 +297,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 {
@ -315,7 +309,7 @@ impl Plane {
},
x_axis:
Point3d {
x: 1.0,
x: -1.0,
y: 0.0,
z: 0.0,
units: UnitLen::Mm,
@ -327,13 +321,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 {
@ -358,13 +345,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 {
@ -377,7 +357,7 @@ impl Plane {
},
x_axis:
Point3d {
x: 1.0,
x: -1.0,
y: 0.0,
z: 0.0,
units: UnitLen::Mm,
@ -389,13 +369,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 {
@ -420,13 +393,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 {
@ -440,7 +406,7 @@ impl Plane {
x_axis:
Point3d {
x: 0.0,
y: 1.0,
y: -1.0,
z: 0.0,
units: UnitLen::Mm,
},
@ -451,13 +417,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,
_ => {}
@ -468,12 +427,13 @@ impl Plane {
origin: self.origin,
x_axis: self.x_axis,
y_axis: self.y_axis,
z_axis: self.z_axis,
}
}
pub(crate) fn from_plane_data(value: PlaneData, exec_state: &mut ExecState) -> Self {
let id = exec_state.next_uuid();
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("value: {:?}", value).into());
match value {
PlaneData::XY => Plane {
id,
@ -481,7 +441,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![],
},
@ -489,10 +448,9 @@ 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,
value: PlaneType::NegXY,
meta: vec![],
},
PlaneData::XZ => Plane {
@ -501,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, 0.0, 1.0, UnitLen::Mm),
z_axis: Point3d::new(0.0, -1.0, 0.0, UnitLen::Mm),
value: PlaneType::XZ,
meta: vec![],
},
@ -511,8 +468,7 @@ 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,
value: PlaneType::NegXZ,
meta: vec![],
},
PlaneData::YZ => Plane {
@ -521,7 +477,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![],
},
@ -529,17 +484,15 @@ 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,
value: PlaneType::NegYZ,
meta: vec![],
},
PlaneData::Plane {
origin,
x_axis,
y_axis,
z_axis,
} => {
let id = exec_state.next_uuid();
Plane {
@ -548,7 +501,6 @@ impl Plane {
origin,
x_axis,
y_axis,
z_axis,
value: PlaneType::Custom,
meta: vec![],
}
@ -594,12 +546,21 @@ pub enum PlaneType {
#[serde(rename = "XY", alias = "xy")]
#[display("XY")]
XY,
#[serde(rename = "-XY", alias = "-xy")]
#[display("-XY")]
NegXY,
#[serde(rename = "XZ", alias = "xz")]
#[display("XZ")]
XZ,
#[serde(rename = "-XZ", alias = "-xz")]
#[display("-XZ")]
NegXZ,
#[serde(rename = "YZ", alias = "yz")]
#[display("YZ")]
YZ,
#[serde(rename = "-YZ", alias = "-yz")]
#[display("-YZ")]
NegYZ,
/// A custom plane.
#[display("Custom")]
Custom,
@ -656,8 +617,12 @@ 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 z_axis = Some(plane.x_axis.cross(&plane.y_axis).into());
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("plane normal geo: {:?}, x_axis: {:?}, y_axis: {:?}", z_axis, plane.x_axis, plane.y_axis).into());
z_axis
} else {
crate::log::log(format!("no Plane normal"));
None
},
}),
@ -702,7 +667,7 @@ impl SketchSurface {
}
pub(crate) fn z_axis(&self) -> Point3d {
match self {
SketchSurface::Plane(plane) => plane.z_axis,
SketchSurface::Plane(plane) => plane.x_axis.cross(&plane.y_axis),
SketchSurface::Face(face) => face.z_axis,
}
}
@ -929,6 +894,16 @@ 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 {
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 {

View File

@ -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(),
};

View File

@ -43,5 +43,5 @@ async fn main() {
.await
.unwrap();
let mut exec_state = ExecState::new(&ctx);
ctx.run(&program, &mut exec_state).await.unwrap();
ctx.run(&program, &mut exec_state).await.map_err(|e| e.error).unwrap();
}

View File

@ -1032,7 +1032,26 @@ impl<'a> FromKclValue<'a> for crate::execution::PlaneType {
"Custom" => Self::Custom,
_ => return None,
};
Some(plane_type)
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val with string: {}", arg.as_str()?).into());
return match plane_type {
Self::XY => {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val matching XY").into());
Some(Self::XY)
},
Self::NegXY => {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val matching -XY").into());
Some(Self::NegXY)
},
Self::XZ => Some(Self::XZ),
Self::NegXZ => Some(Self::NegXZ),
Self::YZ => Some(Self::YZ),
Self::NegYZ => Some(Self::NegYZ),
_ => None,
};
}
}
@ -1148,18 +1167,30 @@ impl<'a> FromKclValue<'a> for super::sketch::PlaneData {
fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
// Case 0: actual plane
if let KclValue::Plane { value } = arg {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val with plane: {:?}", value).into());
return Some(Self::Plane {
origin: value.origin,
x_axis: value.x_axis,
y_axis: value.y_axis,
z_axis: value.z_axis,
});
}
// Case 1: predefined plane
if let Some(s) = arg.as_str() {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val with string: {}", s).into());
return match s {
"XY" | "xy" => Some(Self::XY),
"-XY" | "-xy" => Some(Self::NegXY),
"XY" | "xy" => {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val matching XY").into());
Some(Self::XY)
},
"-XY" | "-xy" => {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val matching -XY").into());
Some(Self::NegXY)
},
"XZ" | "xz" => Some(Self::XZ),
"-XZ" | "-xz" => Some(Self::NegXZ),
"YZ" | "yz" => Some(Self::YZ),
@ -1167,18 +1198,18 @@ impl<'a> FromKclValue<'a> for super::sketch::PlaneData {
_ => None,
};
}
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val with object: {:?}", arg).into());
// Case 2: custom plane
let obj = arg.as_object()?;
let_field_of!(obj, plane, &KclObjectFields);
let origin = plane.get("origin").and_then(FromKclValue::from_kcl_val)?;
let x_axis = plane.get("xAxis").and_then(FromKclValue::from_kcl_val)?;
let y_axis = plane.get("yAxis").and_then(FromKclValue::from_kcl_val)?;
let z_axis = plane.get("zAxis").and_then(FromKclValue::from_kcl_val)?;
Some(Self::Plane {
origin,
x_axis,
y_axis,
z_axis,
})
}
}

View File

@ -107,7 +107,6 @@ lazy_static! {
Box::new(crate::std::shell::Hollow),
Box::new(crate::std::sweep::Sweep),
Box::new(crate::std::loft::Loft),
Box::new(crate::std::planes::OffsetPlane),
Box::new(crate::std::math::Acos),
Box::new(crate::std::math::Asin),
Box::new(crate::std::math::Atan),
@ -205,6 +204,10 @@ pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProp
|e, a| Box::pin(crate::std::revolve::revolve(e, a)),
StdFnProps::default("std::revolve").include_in_feature_tree(),
),
("prelude", "offsetPlane") => (
|e, a| Box::pin(crate::std::planes::offset_plane(e, a)),
StdFnProps::default("std::offsetPlane").include_in_feature_tree(),
),
_ => unreachable!(),
}
}

View File

@ -1,6 +1,5 @@
//! Standard library plane helpers.
use kcl_derive_docs::stdlib;
use kcmc::{each_cmd as mcmd, length_unit::LengthUnit, shared::Color, ModelingCmd};
use kittycad_modeling_cmds as kcmc;
@ -19,98 +18,6 @@ pub async fn offset_plane(exec_state: &mut ExecState, args: Args) -> Result<KclV
Ok(KclValue::Plane { value: Box::new(plane) })
}
/// Offset a plane by a distance along its normal.
///
/// For example, if you offset the 'XZ' plane by 10, the new plane will be parallel to the 'XZ'
/// plane and 10 units away from it.
///
/// ```no_run
/// // Loft a square and a circle on the `XY` plane using offset.
/// squareSketch = startSketchOn('XY')
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane('XY', offset = 150))
/// |> circle( center = [0, 100], radius = 50 )
///
/// loft([squareSketch, circleSketch])
/// ```
///
/// ```no_run
/// // Loft a square and a circle on the `XZ` plane using offset.
/// squareSketch = startSketchOn('XZ')
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane('XZ', offset = 150))
/// |> circle( center = [0, 100], radius = 50 )
///
/// loft([squareSketch, circleSketch])
/// ```
///
/// ```no_run
/// // Loft a square and a circle on the `YZ` plane using offset.
/// squareSketch = startSketchOn('YZ')
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane('YZ', offset = 150))
/// |> circle( center = [0, 100], radius = 50 )
///
/// loft([squareSketch, circleSketch])
/// ```
///
/// ```no_run
/// // Loft a square and a circle on the `-XZ` plane using offset.
/// squareSketch = startSketchOn('-XZ')
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane('-XZ', offset = -150))
/// |> circle( center = [0, 100], radius = 50 )
///
/// loft([squareSketch, circleSketch])
/// ```
/// ```no_run
/// // A circle on the XY plane
/// startSketchOn("XY")
/// |> startProfileAt([0, 0], %)
/// |> circle( radius = 10, center = [0, 0] )
///
/// // Triangle on the plane 4 units above
/// startSketchOn(offsetPlane("XY", offset = 4))
/// |> startProfileAt([0, 0], %)
/// |> line(end = [10, 0])
/// |> line(end = [0, 10])
/// |> close()
/// ```
#[stdlib {
name = "offsetPlane",
feature_tree_operation = true,
keywords = true,
unlabeled_first = true,
args = {
plane = { docs = "The plane (e.g. XY) which this new plane is created from." },
offset = { docs = "Distance from the standard plane this new plane will be created at." },
}
}]
async fn inner_offset_plane(
plane: PlaneData,
offset: TyF64,
@ -122,7 +29,10 @@ async fn inner_offset_plane(
// standard planes themselves.
plane.value = PlaneType::Custom;
plane.origin += plane.z_axis * offset.to_length_units(plane.origin.units);
// Calculate z_axis as the cross product of x_axis and y_axis
let z_axis = plane.x_axis.cross(&plane.y_axis);
plane.origin += z_axis * offset.to_length_units(plane.origin.units);
make_offset_plane_in_engine(&plane, exec_state, args).await?;
Ok(plane)

View File

@ -13,6 +13,7 @@ use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::utils::{point_to_len_unit, point_to_mm, untype_point, untyped_point_to_mm};
use crate::log;
use crate::{
errors::{KclError, KclErrorDetails},
execution::{
@ -960,9 +961,6 @@ pub enum PlaneData {
/// What should the planes Y axis be?
#[serde(rename = "yAxis")]
y_axis: Point3d,
/// The z-axis (normal).
#[serde(rename = "zAxis")]
z_axis: Point3d,
},
}
@ -973,6 +971,15 @@ pub async fn start_sketch_on(exec_state: &mut ExecState, args: Args) -> Result<K
&RuntimeType::Union(vec![RuntimeType::solid(), RuntimeType::plane()]),
exec_state,
)?;
#[cfg(target_arch = "wasm32")]
if let SketchData::PlaneOrientation(plane_data) = &data {
web_sys::console::log_1(&format!("start_sketch_on called with plane_data={:?}", plane_data).into());
}
// log out args
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("start_sketch_on called with args={:?}", args).into());
let face = args.get_kw_arg_opt("face")?;
match inner_start_sketch_on(data, face, exec_state, &args).await? {
@ -1171,8 +1178,13 @@ async fn inner_start_sketch_on(
exec_state: &mut ExecState,
args: &Args,
) -> Result<SketchSurface, KclError> {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("inner_start_sketch_on with plane_or_solid={:?}", plane_or_solid).into());
match plane_or_solid {
SketchData::PlaneOrientation(plane_data) => {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("inner_start_sketch_on PlaneOrientation case with plane_data={:?}", plane_data).into());
let plane = make_sketch_plane_from_orientation(plane_data, exec_state, args).await?;
Ok(SketchSurface::Plane(plane))
}
@ -1241,40 +1253,46 @@ async fn make_sketch_plane_from_orientation(
exec_state: &mut ExecState,
args: &Args,
) -> Result<Box<Plane>, KclError> {
let plane = Plane::from_plane_data(data.clone(), exec_state);
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("make_sketch_plane_from_orientation called with data={:?}", data).into());
let mut plane = Plane::from_plane_data(data.clone(), exec_state);
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("After from_plane_data: plane.x_axis={:?}, plane type={:?}", plane.x_axis, plane.value).into());
// Create the plane on the fly.
let clobber = false;
let size = LengthUnit(60.0);
let hide = Some(true);
match data {
PlaneData::XY | PlaneData::NegXY | PlaneData::XZ | PlaneData::NegXZ | PlaneData::YZ | PlaneData::NegYZ => {
// TODO: ignoring the default planes here since we already created them, breaks the
// front end for the feature tree which is stupid and we should fix it.
let x_axis = match data {
PlaneData::NegXY => Point3d::new(-1.0, 0.0, 0.0, UnitLen::Mm),
PlaneData::NegXZ => Point3d::new(-1.0, 0.0, 0.0, UnitLen::Mm),
PlaneData::NegYZ => Point3d::new(0.0, -1.0, 0.0, UnitLen::Mm),
_ => plane.x_axis,
};
// Use the x_axis directly from the plane object created by from_plane_data
// No need to recompute it here as it's already correctly set based on the plane type
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("Before modeling cmd: data={:?}, plane.x_axis={:?}", data, plane.x_axis).into());
args.batch_modeling_cmd(
plane.id,
ModelingCmd::from(mcmd::MakePlane {
clobber,
origin: plane.origin.into(),
size,
x_axis: x_axis.into(),
x_axis: plane.x_axis.into(),
y_axis: plane.y_axis.into(),
hide,
}),
)
.await?;
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("After modeling cmd: plane.x_axis={:?}", plane.x_axis).into());
}
PlaneData::Plane {
origin,
x_axis,
y_axis,
z_axis: _,
} => {
args.batch_modeling_cmd(
plane.id,
@ -1291,6 +1309,8 @@ async fn make_sketch_plane_from_orientation(
}
}
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("Returning plane with x_axis={:?}", plane.x_axis).into());
Ok(Box::new(plane))
}
@ -1384,8 +1404,16 @@ pub(crate) async fn inner_start_profile_at(
adjust_camera: false,
planar_normal: if let SketchSurface::Plane(plane) = &sketch_surface {
// We pass in the normal for the plane here.
Some(plane.z_axis.into())
let z_axis = Some(plane.x_axis.cross(&plane.y_axis).into());
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("Calculating planar_normal: plane.x_axis={:?}, plane.y_axis={:?}, z_axis={:?}",
plane.x_axis, plane.y_axis, z_axis).into());
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("plane normal sketch: {:?}, x_axis: {:?}, y_axis: {:?}", z_axis, plane.x_axis, plane.y_axis).into());
z_axis
} else {
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("no Plane normal").into());
None
},
}),

View File

@ -449,3 +449,93 @@ export fn toRadians(@num: number(rad)): number(rad) {
export fn toDegrees(@num: number(deg)): number(deg) {
return num
}
/// Offset a plane by a distance along its normal.
///
/// For example, if you offset the `XZ` plane by 10, the new plane will be parallel to the `XZ`
/// plane and 10 units away from it.
///
/// ```
/// // Loft a square and a circle on the `XY` plane using offset.
/// squareSketch = startSketchOn(XY)
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane(XY, offset = 150))
/// |> circle( center = [0, 100], radius = 50 )
///
/// loft([squareSketch, circleSketch])
/// ```
///
/// ```
/// // Loft a square and a circle on the `XZ` plane using offset.
/// squareSketch = startSketchOn(XZ)
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane(XZ, offset = 150))
/// |> circle( center = [0, 100], radius = 50 )
///
/// loft([squareSketch, circleSketch])
/// ```
///
/// ```
/// // Loft a square and a circle on the `YZ` plane using offset.
/// squareSketch = startSketchOn(YZ)
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane(YZ, offset = 150))
/// |> circle( center = [0, 100], radius = 50 )
///
/// loft([squareSketch, circleSketch])
/// ```
///
/// ```
/// // Loft a square and a circle on the `-XZ` plane using offset.
/// squareSketch = startSketchOn(-XZ)
/// |> startProfileAt([-100, 200], %)
/// |> line(end = [200, 0])
/// |> line(end = [0, -200])
/// |> line(end = [-200, 0])
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = startSketchOn(offsetPlane(-XZ, offset = 150))
/// |> circle(center = [0, 100], radius = 50)
///
/// loft([squareSketch, circleSketch])
/// ```
///
/// ```
/// // A circle on the XY plane
/// startSketchOn(XY)
/// |> startProfileAt([0, 0], %)
/// |> circle( radius = 10, center = [0, 0] )
///
/// // Triangle on the plane 4 units above
/// startSketchOn(offsetPlane(XY, offset = 4))
/// |> startProfileAt([0, 0], %)
/// |> line(end = [10, 0])
/// |> line(end = [0, 10])
/// |> close()
/// ```
@(impl = std_rust)
export fn offsetPlane(
/// The plane (e.g. `XY`) which this new plane is created from.
@plane: Plane,
/// Distance from the standard plane this new plane will be created at.
offset: number(Length),
): Plane {}

View File

@ -184,7 +184,7 @@ description: Artifact commands artifact_graph_example_code_no_3d.kcl
"z": 0.0
},
"x_axis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0
},

View File

@ -303,7 +303,7 @@ description: Variables in memory after executing artifact_graph_example_code_no_
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -4,6 +4,15 @@ description: Operations executed artifact_graph_example_code_offset_planes.kcl
---
[
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "String",
"value": "XY"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -22,18 +31,18 @@ description: Operations executed artifact_graph_example_code_offset_planes.kcl
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "String",
"value": "XY"
"value": "XZ"
},
"sourceRange": []
}
},
{
},
"labeledArgs": {
"offset": {
"value": {
@ -52,18 +61,18 @@ description: Operations executed artifact_graph_example_code_offset_planes.kcl
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "String",
"value": "XZ"
"value": "YZ"
},
"sourceRange": []
}
},
{
},
"labeledArgs": {
"offset": {
"value": {
@ -82,16 +91,7 @@ description: Operations executed artifact_graph_example_code_offset_planes.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "String",
"value": "YZ"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -20,13 +20,20 @@ description: Result of parsing crazy_multi_profile.kcl
"init": {
"arguments": [
{
"abs_path": false,
"commentStart": 0,
"end": 0,
"raw": "'XZ'",
"name": {
"commentStart": 0,
"end": 0,
"name": "XZ",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Literal",
"type": "Literal",
"value": "XZ"
"type": "Name",
"type": "Name"
}
],
"callee": {
@ -2561,13 +2568,28 @@ description: Result of parsing crazy_multi_profile.kcl
"init": {
"arguments": [
{
"argument": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "XZ",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"commentStart": 0,
"end": 0,
"raw": "'-XZ'",
"operator": "-",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": "-XZ"
"type": "UnaryExpression",
"type": "UnaryExpression"
}
],
"callee": {

View File

@ -1,4 +1,4 @@
sketch001 = startSketchOn('XZ')
sketch001 = startSketchOn(XZ)
profile001 = startProfileAt([6.71, -3.66], sketch001)
|> line(end = [2.65, 9.02], tag = $seg02)
|> line(end = [3.73, -9.36], tag = $seg01)
@ -28,7 +28,7 @@ profile006 = startProfileAt([9.65, 3.82], sketch002)
|> close()
revolve001 = revolve(profile004, angle = 45, axis = getNextAdjacentEdge(seg01))
extrude002 = extrude(profile006, length = 4)
sketch003 = startSketchOn('-XZ')
sketch003 = startSketchOn(-XZ)
profile007 = startProfileAt([4.8, 7.55], sketch003)
|> line(end = [7.39, 2.58])
|> line(end = [7.02, -2.85])

View File

@ -765,7 +765,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {
@ -2756,7 +2756,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {
@ -2902,7 +2902,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {
@ -3048,7 +3048,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {
@ -3143,7 +3143,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {
@ -3314,7 +3314,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {
@ -3867,7 +3867,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {
@ -4234,7 +4234,7 @@ description: Variables in memory after executing crazy_multi_profile.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {

View File

@ -40,7 +40,7 @@ description: Artifact commands 80-20-rail.kcl
"z": 0.0
},
"x_axis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0
},

View File

@ -371,198 +371,198 @@ flowchart LR
2 --- 67
2 ---- 72
2 --- 68
3 --- 73
3 --- 139
3 --- 140
4 --- 74
4 --- 141
4 --- 142
5 --- 75
5 --- 143
5 --- 144
6 --- 76
6 --- 145
6 --- 146
7 --- 77
7 --- 147
7 --- 148
8 --- 78
8 --- 149
8 --- 150
9 --- 79
9 --- 151
9 --- 152
10 --- 80
10 --- 153
10 --- 154
11 --- 81
11 --- 155
11 --- 156
12 --- 82
12 --- 157
12 --- 158
13 --- 83
13 --- 159
13 --- 160
14 --- 84
14 --- 161
14 --- 162
15 --- 85
15 --- 163
15 --- 164
16 --- 86
16 --- 165
16 --- 166
17 --- 87
17 --- 167
17 --- 168
18 --- 88
18 --- 169
18 --- 170
19 --- 89
19 --- 171
19 --- 172
20 --- 90
20 --- 173
20 --- 174
21 --- 91
21 --- 175
21 --- 176
22 --- 92
22 --- 177
22 --- 178
23 --- 93
23 --- 179
23 --- 180
24 --- 94
24 --- 181
24 --- 182
25 --- 95
25 --- 183
25 --- 184
26 --- 96
26 --- 185
26 --- 186
27 --- 97
27 --- 187
27 --- 188
28 --- 98
28 --- 189
28 --- 190
29 --- 99
29 --- 191
29 --- 192
30 --- 100
30 --- 193
30 --- 194
31 --- 101
31 --- 195
31 --- 196
32 --- 102
32 --- 197
32 --- 198
33 --- 103
33 --- 199
33 --- 200
34 --- 104
34 --- 201
34 --- 202
35 --- 105
35 --- 203
35 --- 204
36 --- 106
36 --- 205
36 --- 206
37 --- 107
37 --- 207
37 --- 208
38 --- 108
38 --- 209
38 --- 210
39 --- 109
39 --- 211
39 --- 212
40 --- 110
40 --- 213
40 --- 214
41 --- 111
41 --- 215
41 --- 216
42 --- 112
42 --- 217
42 --- 218
43 --- 113
43 --- 219
43 --- 220
44 --- 114
44 --- 221
44 --- 222
45 --- 115
45 --- 223
45 --- 224
46 --- 116
46 --- 225
46 --- 226
47 --- 117
47 --- 227
47 --- 228
48 --- 118
48 --- 229
48 --- 230
49 --- 119
49 --- 231
49 --- 232
50 --- 120
50 --- 233
50 --- 234
51 --- 121
51 --- 235
51 --- 236
52 --- 122
52 --- 237
52 --- 238
53 --- 123
53 --- 239
53 --- 240
54 --- 124
54 --- 241
54 --- 242
55 --- 125
55 --- 243
55 --- 244
56 --- 126
56 --- 245
56 --- 246
57 --- 127
57 --- 247
57 --- 248
58 --- 128
58 --- 249
58 --- 250
59 --- 129
59 --- 251
59 --- 252
60 --- 130
60 --- 253
60 --- 254
61 --- 131
61 --- 255
61 --- 256
62 --- 132
62 --- 257
62 --- 258
63 --- 133
63 --- 259
63 --- 260
64 --- 134
64 --- 261
64 --- 262
65 --- 135
65 --- 263
65 --- 264
66 --- 136
66 --- 265
66 --- 266
3 --- 136
3 --- 265
3 --- 266
4 --- 135
4 --- 263
4 --- 264
5 --- 134
5 --- 261
5 --- 262
6 --- 133
6 --- 259
6 --- 260
7 --- 132
7 --- 257
7 --- 258
8 --- 131
8 --- 255
8 --- 256
9 --- 130
9 --- 253
9 --- 254
10 --- 129
10 --- 251
10 --- 252
11 --- 128
11 --- 249
11 --- 250
12 --- 127
12 --- 247
12 --- 248
13 --- 126
13 --- 245
13 --- 246
14 --- 125
14 --- 243
14 --- 244
15 --- 124
15 --- 241
15 --- 242
16 --- 123
16 --- 239
16 --- 240
17 --- 122
17 --- 237
17 --- 238
18 --- 121
18 --- 235
18 --- 236
19 --- 120
19 --- 233
19 --- 234
20 --- 119
20 --- 231
20 --- 232
21 --- 118
21 --- 229
21 --- 230
22 --- 117
22 --- 227
22 --- 228
23 --- 116
23 --- 225
23 --- 226
24 --- 115
24 --- 223
24 --- 224
25 --- 114
25 --- 221
25 --- 222
26 --- 113
26 --- 219
26 --- 220
27 --- 112
27 --- 217
27 --- 218
28 --- 111
28 --- 215
28 --- 216
29 --- 110
29 --- 213
29 --- 214
30 --- 109
30 --- 211
30 --- 212
31 --- 108
31 --- 209
31 --- 210
32 --- 107
32 --- 207
32 --- 208
33 --- 106
33 --- 205
33 --- 206
34 --- 105
34 --- 203
34 --- 204
35 --- 104
35 --- 201
35 --- 202
36 --- 103
36 --- 199
36 --- 200
37 --- 102
37 --- 197
37 --- 198
38 --- 101
38 --- 195
38 --- 196
39 --- 100
39 --- 193
39 --- 194
40 --- 99
40 --- 191
40 --- 192
41 --- 98
41 --- 189
41 --- 190
42 --- 97
42 --- 187
42 --- 188
43 --- 96
43 --- 185
43 --- 186
44 --- 95
44 --- 183
44 --- 184
45 --- 94
45 --- 181
45 --- 182
46 --- 93
46 --- 179
46 --- 180
47 --- 92
47 --- 177
47 --- 178
48 --- 91
48 --- 175
48 --- 176
49 --- 90
49 --- 173
49 --- 174
50 --- 89
50 --- 171
50 --- 172
51 --- 88
51 --- 169
51 --- 170
52 --- 87
52 --- 167
52 --- 168
53 --- 86
53 --- 165
53 --- 166
54 --- 85
54 --- 163
54 --- 164
55 --- 84
55 --- 161
55 --- 162
56 --- 83
56 --- 159
56 --- 160
57 --- 82
57 --- 157
57 --- 158
58 --- 81
58 --- 155
58 --- 156
59 --- 80
59 --- 153
59 --- 154
60 --- 79
60 --- 151
60 --- 152
61 --- 78
61 --- 149
61 --- 150
62 --- 77
62 --- 147
62 --- 148
63 --- 76
63 --- 145
63 --- 146
64 --- 75
64 --- 143
64 --- 144
65 --- 74
65 --- 141
65 --- 142
66 --- 73
66 --- 139
66 --- 140
69 --- 70
69 --- 71
72 --- 73
@ -759,36 +759,36 @@ flowchart LR
72 --- 264
72 --- 265
72 --- 266
152 <--x 267
154 <--x 268
156 <--x 269
158 <--x 270
184 <--x 271
186 <--x 272
188 <--x 273
190 <--x 274
216 <--x 275
218 <--x 276
220 <--x 277
222 <--x 278
248 <--x 279
250 <--x 280
252 <--x 281
254 <--x 282
148 <--x 283
150 <--x 284
160 <--x 285
162 <--x 286
180 <--x 287
182 <--x 288
192 <--x 289
194 <--x 290
212 <--x 291
214 <--x 292
224 <--x 293
226 <--x 294
244 <--x 295
246 <--x 296
256 <--x 297
258 <--x 298
254 <--x 267
252 <--x 268
250 <--x 269
248 <--x 270
222 <--x 271
220 <--x 272
218 <--x 273
216 <--x 274
190 <--x 275
188 <--x 276
186 <--x 277
184 <--x 278
158 <--x 279
156 <--x 280
154 <--x 281
152 <--x 282
258 <--x 283
256 <--x 284
246 <--x 285
244 <--x 286
226 <--x 287
224 <--x 288
214 <--x 289
212 <--x 290
194 <--x 291
192 <--x 292
182 <--x 293
180 <--x 294
162 <--x 295
160 <--x 296
150 <--x 297
148 <--x 298
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -757,6 +757,15 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -775,16 +784,7 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -883,6 +883,15 @@ description: Operations executed axial-fan.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -901,16 +910,7 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -1088,6 +1088,15 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1106,16 +1115,7 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -1583,6 +1583,15 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1601,16 +1610,7 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -2078,6 +2078,15 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -2096,16 +2105,7 @@ description: Operations executed axial-fan.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -4,6 +4,15 @@ description: Operations executed ball-bearing.kcl
---
[
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -22,16 +31,7 @@ description: Operations executed ball-bearing.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -924,6 +924,15 @@ description: Operations executed ball-bearing.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -942,16 +951,7 @@ description: Operations executed ball-bearing.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -1995,8 +1995,8 @@ description: Artifact commands bench.kcl
"adjust_camera": false,
"planar_normal": {
"x": -1.0,
"y": -0.0,
"z": -0.0
"y": 0.0,
"z": 0.0
}
}
},
@ -2386,8 +2386,8 @@ description: Artifact commands bench.kcl
"adjust_camera": false,
"planar_normal": {
"x": -1.0,
"y": -0.0,
"z": -0.0
"y": 0.0,
"z": 0.0
}
}
},
@ -2837,8 +2837,8 @@ description: Artifact commands bench.kcl
"adjust_camera": false,
"planar_normal": {
"x": -1.0,
"y": -0.0,
"z": -0.0
"y": 0.0,
"z": 0.0
}
}
},
@ -3228,8 +3228,8 @@ description: Artifact commands bench.kcl
"adjust_camera": false,
"planar_normal": {
"x": -1.0,
"y": -0.0,
"z": -0.0
"y": 0.0,
"z": 0.0
}
}
},
@ -7458,8 +7458,8 @@ description: Artifact commands bench.kcl
"adjust_camera": false,
"planar_normal": {
"x": -1.0,
"y": -0.0,
"z": -0.0
"y": 0.0,
"z": 0.0
}
}
},
@ -7581,9 +7581,9 @@ description: Artifact commands bench.kcl
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": -0.0,
"x": 0.0,
"y": 1.0,
"z": -0.0
"z": 0.0
}
}
},
@ -7951,8 +7951,8 @@ description: Artifact commands bench.kcl
"adjust_camera": false,
"planar_normal": {
"x": -1.0,
"y": -0.0,
"z": -0.0
"y": 0.0,
"z": 0.0
}
}
},
@ -8074,9 +8074,9 @@ description: Artifact commands bench.kcl
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": -0.0,
"x": 0.0,
"y": 1.0,
"z": -0.0
"z": 0.0
}
}
},

View File

@ -240,6 +240,15 @@ description: Operations executed bench.kcl
"type": "GroupEnd"
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -258,16 +267,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -506,6 +506,15 @@ description: Operations executed bench.kcl
"type": "GroupEnd"
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -524,16 +533,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -772,6 +772,15 @@ description: Operations executed bench.kcl
"type": "GroupEnd"
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -790,16 +799,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -950,6 +950,15 @@ description: Operations executed bench.kcl
"type": "GroupEnd"
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -968,16 +977,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1080,6 +1080,15 @@ description: Operations executed bench.kcl
"type": "GroupEnd"
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1098,16 +1107,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1219,6 +1219,15 @@ description: Operations executed bench.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1237,16 +1246,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1282,6 +1282,15 @@ description: Operations executed bench.kcl
"type": "GroupEnd"
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1300,16 +1309,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1388,6 +1388,15 @@ description: Operations executed bench.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1406,16 +1415,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1451,6 +1451,15 @@ description: Operations executed bench.kcl
"type": "GroupEnd"
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1469,16 +1478,7 @@ description: Operations executed bench.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",

View File

@ -1608,9 +1608,9 @@ description: Artifact commands color-cube.kcl
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": -0.0,
"x": 0.0,
"y": 1.0,
"z": -0.0
"z": 0.0
}
}
},
@ -1727,9 +1727,9 @@ description: Artifact commands color-cube.kcl
"animated": false,
"adjust_camera": false,
"planar_normal": {
"x": -0.0,
"x": 0.0,
"y": 1.0,
"z": -0.0
"z": 0.0
}
}
},

View File

@ -4,6 +4,15 @@ description: Operations executed color-cube.kcl
---
[
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -22,18 +31,18 @@ description: Operations executed color-cube.kcl
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
},
{
},
"labeledArgs": {
"offset": {
"value": {
@ -52,18 +61,18 @@ description: Operations executed color-cube.kcl
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
},
{
},
"labeledArgs": {
"offset": {
"value": {
@ -82,18 +91,18 @@ description: Operations executed color-cube.kcl
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
},
{
},
"labeledArgs": {
"offset": {
"value": {
@ -112,18 +121,18 @@ description: Operations executed color-cube.kcl
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
},
{
},
"labeledArgs": {
"offset": {
"value": {
@ -142,18 +151,18 @@ description: Operations executed color-cube.kcl
"sourceRange": []
}
},
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
},
{
},
"labeledArgs": {
"offset": {
"value": {
@ -172,16 +181,7 @@ description: Operations executed color-cube.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",

View File

@ -153,9 +153,9 @@ description: Variables in memory after executing color-cube.kcl
}
},
"zAxis": {
"x": -0.0,
"x": 0.0,
"y": 1.0,
"z": -0.0,
"z": 0.0,
"units": {
"type": "Mm"
}

View File

@ -34,6 +34,15 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -52,16 +61,7 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -267,6 +267,15 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -285,16 +294,7 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -500,6 +500,15 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -518,16 +527,7 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -98,6 +98,15 @@ description: Operations executed dual-basin-utility-sink.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -116,16 +125,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -253,6 +253,15 @@ description: Operations executed dual-basin-utility-sink.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -271,16 +280,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -365,6 +365,15 @@ description: Operations executed dual-basin-utility-sink.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -383,16 +392,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -496,6 +496,15 @@ description: Operations executed dual-basin-utility-sink.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -514,16 +523,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -705,6 +705,15 @@ description: Operations executed dual-basin-utility-sink.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -723,16 +732,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -860,6 +860,15 @@ description: Operations executed dual-basin-utility-sink.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -878,16 +887,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -501,6 +501,15 @@ description: Operations executed food-service-spatula.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -519,16 +528,7 @@ description: Operations executed food-service-spatula.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -494,6 +494,15 @@ description: Operations executed french-press.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -512,16 +521,7 @@ description: Operations executed french-press.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -845,6 +845,15 @@ description: Operations executed french-press.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -863,16 +872,7 @@ description: Operations executed french-press.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -1320,6 +1320,15 @@ description: Operations executed french-press.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1338,16 +1347,7 @@ description: Operations executed french-press.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -4,6 +4,15 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
---
[
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -248,6 +248,15 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1331,6 +1331,15 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1349,16 +1358,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",

View File

@ -4,6 +4,15 @@ description: Operations executed gridfinity-baseplate.kcl
---
[
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-baseplate.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -248,6 +248,15 @@ description: Operations executed gridfinity-baseplate.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-baseplate.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",

View File

@ -4,6 +4,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
---
[
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -248,6 +248,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1469,6 +1469,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1487,16 +1496,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -4,6 +4,15 @@ description: Operations executed gridfinity-bins.kcl
---
[
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-bins.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -248,6 +248,15 @@ description: Operations executed gridfinity-bins.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-bins.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"type": "GroupBegin",
@ -1469,6 +1469,15 @@ description: Operations executed gridfinity-bins.kcl
}
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -1487,16 +1496,7 @@ description: Operations executed gridfinity-bins.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -40,7 +40,7 @@ description: Artifact commands hex-nut.kcl
"z": 0.0
},
"x_axis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0
},

View File

@ -47,24 +47,24 @@ flowchart LR
2 --- 8
2 ---- 13
2 --- 9
3 --- 19
3 --- 32
3 --- 33
4 --- 18
4 --- 30
4 --- 31
5 --- 17
5 --- 28
5 --- 29
6 --- 16
6 --- 26
6 --- 27
7 --- 15
7 --- 24
7 --- 25
8 --- 14
8 --- 22
8 --- 23
3 --- 14
3 --- 22
3 --- 23
4 --- 15
4 --- 24
4 --- 25
5 --- 16
5 --- 26
5 --- 27
6 --- 17
6 --- 28
6 --- 29
7 --- 18
7 --- 30
7 --- 31
8 --- 19
8 --- 32
8 --- 33
10 --- 11
10 --- 12
13 --- 14

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 84 KiB

View File

@ -40,7 +40,7 @@ description: Artifact commands i-beam.kcl
"z": 0.0
},
"x_axis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0
},

View File

@ -177,7 +177,7 @@ description: Variables in memory after executing i-beam.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -19,6 +19,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -37,16 +46,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -114,6 +114,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -132,16 +141,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -209,6 +209,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -227,16 +236,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -304,6 +304,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -322,16 +331,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -399,6 +399,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -417,16 +426,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -494,6 +494,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -512,16 +521,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -589,6 +589,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -607,16 +616,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {
@ -814,6 +814,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -832,16 +841,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -452,6 +452,15 @@ description: Operations executed walkie-talkie.kcl
"unlabeledArg": null
},
{
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": {
"offset": {
"value": {
@ -470,16 +479,7 @@ description: Operations executed walkie-talkie.kcl
"sourceRange": []
}
},
"name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
"sourceRange": []
},
{
"labeledArgs": {

View File

@ -40,7 +40,7 @@ description: Artifact commands neg_xz_plane.kcl
"z": 0.0
},
"x_axis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0
},

View File

@ -26,15 +26,15 @@ flowchart LR
2 --- 5
2 ---- 7
2 --- 6
3 --- 10
3 --- 17
3 --- 18
3 --- 8
3 --- 13
3 --- 14
4 --- 9
4 --- 15
4 --- 16
5 --- 8
5 --- 13
5 --- 14
5 --- 10
5 --- 17
5 --- 18
7 --- 8
7 --- 9
7 --- 10

View File

@ -108,7 +108,7 @@ description: Variables in memory after executing neg_xz_plane.kcl
}
},
"xAxis": {
"x": -1.0,
"x": 1.0,
"y": 0.0,
"z": 0.0,
"units": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

View File

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

View File

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB