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) * [`map`](kcl/map)
* [`max`](kcl/max) * [`max`](kcl/max)
* [`min`](kcl/min) * [`min`](kcl/min)
* [`offsetPlane`](kcl/offsetPlane) * [`offsetPlane`](kcl/std-offsetPlane)
* [`patternCircular2d`](kcl/patternCircular2d) * [`patternCircular2d`](kcl/patternCircular2d)
* [`patternCircular3d`](kcl/patternCircular3d) * [`patternCircular3d`](kcl/patternCircular3d)
* [`patternLinear2d`](kcl/patternLinear2d) * [`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)" "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", "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.", "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 } after-engine = { max-threads = 12 }
[profile.default] [profile.default]
slow-timeout = { period = "90s", terminate-after = 1 } slow-timeout = { period = "180s", terminate-after = 1 }
[profile.ci] [profile.ci]
slow-timeout = { period = "50s", terminate-after = 5 } slow-timeout = { period = "50s", terminate-after = 5 }

View File

@ -6,11 +6,12 @@
mod tests; mod tests;
mod unbox; mod unbox;
use std::collections::HashMap; use std::{collections::HashMap, fs};
use convert_case::Casing; use convert_case::Casing;
use inflector::{cases::camelcase::to_camel_case, Inflector}; use inflector::{cases::camelcase::to_camel_case, Inflector};
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use proc_macro2::Span;
use quote::{format_ident, quote, quote_spanned, ToTokens}; use quote::{format_ident, quote, quote_spanned, ToTokens};
use regex::Regex; use regex::Regex;
use serde::Deserialize; use serde::Deserialize;
@ -21,6 +22,16 @@ use syn::{
}; };
use unbox::unbox; 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. /// Describes an argument of a stdlib function.
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
struct ArgMetadata { struct ArgMetadata {
@ -73,11 +84,6 @@ struct StdlibMetadata {
args: HashMap<String, ArgMetadata>, 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( fn do_stdlib(
attr: proc_macro2::TokenStream, attr: proc_macro2::TokenStream,
item: proc_macro2::TokenStream, item: proc_macro2::TokenStream,
@ -86,6 +92,31 @@ fn do_stdlib(
do_stdlib_inner(metadata, attr, item) 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 { fn do_output(res: Result<(proc_macro2::TokenStream, Vec<Error>), Error>) -> proc_macro::TokenStream {
match res { match res {
Err(err) => err.to_compile_error().into(), 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) /// Represent an item without concern for its body which may (or may not)
/// contain syntax errors. /// contain syntax errors.
#[derive(Clone)]
struct ItemFnForSignature { struct ItemFnForSignature {
pub attrs: Vec<Attribute>, pub attrs: Vec<Attribute>,
pub vis: Visibility, 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) format!("std::{}::", self.name)
}; };
let mut dd = match var.kind { let mut dd = match var.kind {
VariableKind::Fn => DocData::Fn(FnData::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)), VariableKind::Const => {
DocData::Const(ConstData::from_ast(var, qual_name, preferred_prefix, name))
}
}; };
dd.with_meta(&var.outer_attrs); dd.with_meta(&var.outer_attrs);
@ -79,7 +81,7 @@ impl CollectionVisitor {
} else { } else {
format!("std::{}::", self.name) 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); dd.with_meta(&ty.outer_attrs);
for a in &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)] #[allow(dead_code)]
pub fn file_name(&self) -> String { pub fn file_name(&self) -> String {
match self { 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)] #[allow(dead_code)]
pub fn mod_name(&self) -> String { pub fn mod_name(&self) -> String {
let q = match self { let q = match self {
@ -217,6 +230,8 @@ pub struct ConstData {
/// Code examples. /// Code examples.
/// These are tested and we know they compile and execute. /// These are tested and we know they compile and execute.
pub examples: Vec<(String, ExampleProperties)>, pub examples: Vec<(String, ExampleProperties)>,
pub module_name: String,
} }
impl ConstData { impl ConstData {
@ -224,6 +239,7 @@ impl ConstData {
var: &crate::parsing::ast::types::VariableDeclaration, var: &crate::parsing::ast::types::VariableDeclaration,
mut qual_name: String, mut qual_name: String,
preferred_prefix: &str, preferred_prefix: &str,
module_name: &str,
) -> Self { ) -> Self {
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Const); assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Const);
@ -263,6 +279,7 @@ impl ConstData {
summary: None, summary: None,
description: None, description: None,
examples: Vec::new(), examples: Vec::new(),
module_name: module_name.to_owned(),
} }
} }
@ -334,6 +351,8 @@ pub struct FnData {
pub examples: Vec<(String, ExampleProperties)>, pub examples: Vec<(String, ExampleProperties)>,
#[allow(dead_code)] #[allow(dead_code)]
pub referenced_types: Vec<String>, pub referenced_types: Vec<String>,
pub module_name: String,
} }
impl FnData { impl FnData {
@ -341,6 +360,7 @@ impl FnData {
var: &crate::parsing::ast::types::VariableDeclaration, var: &crate::parsing::ast::types::VariableDeclaration,
mut qual_name: String, mut qual_name: String,
preferred_prefix: &str, preferred_prefix: &str,
module_name: &str,
) -> Self { ) -> Self {
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Fn); assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Fn);
let crate::parsing::ast::types::Expr::FunctionExpression(expr) = &var.declaration.init else { let crate::parsing::ast::types::Expr::FunctionExpression(expr) = &var.declaration.init else {
@ -375,6 +395,7 @@ impl FnData {
description: None, description: None,
examples: Vec::new(), examples: Vec::new(),
referenced_types: referenced_types.into_iter().collect(), 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)>, pub examples: Vec<(String, ExampleProperties)>,
#[allow(dead_code)] #[allow(dead_code)]
pub referenced_types: Vec<String>, pub referenced_types: Vec<String>,
pub module_name: String,
} }
impl TyData { impl TyData {
@ -661,6 +684,7 @@ impl TyData {
ty: &crate::parsing::ast::types::TypeDeclaration, ty: &crate::parsing::ast::types::TypeDeclaration,
mut qual_name: String, mut qual_name: String,
preferred_prefix: &str, preferred_prefix: &str,
module_name: &str,
) -> Self { ) -> Self {
let name = ty.name.name.clone(); let name = ty.name.name.clone();
qual_name.push_str(&name); qual_name.push_str(&name);
@ -684,6 +708,7 @@ impl TyData {
description: None, description: None,
examples: Vec::new(), examples: Vec::new(),
referenced_types: referenced_types.into_iter().collect(), 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)] #[cfg(test)]
mod test { mod test {
use kcl_derive_docs::for_each_std_mod;
use super::*; use super::*;
#[test] #[test]
@ -1047,18 +1074,28 @@ mod test {
); );
} }
#[tokio::test(flavor = "multi_thread", worker_threads = 5)] #[for_each_std_mod]
async fn test_examples() -> miette::Result<()> { #[tokio::test(flavor = "multi_thread")]
async fn test_examples() {
let std = walk_prelude(); let std = walk_prelude();
let mut errs = Vec::new();
for d in std { for d in std {
if d.module_name() != STD_MOD_NAME {
continue;
}
for (i, eg) in d.examples().enumerate() { for (i, eg) in d.examples().enumerate() {
let result = match crate::test_server::execute_and_snapshot(eg, None).await { let result = match crate::test_server::execute_and_snapshot(eg, None).await {
Err(crate::errors::ExecError::Kcl(e)) => { Err(crate::errors::ExecError::Kcl(e)) => {
return Err(miette::Report::new(crate::errors::Report { errs.push(
error: e.error, miette::Report::new(crate::errors::Report {
filename: format!("{}{i}", d.name()), error: e.error,
kcl_source: eg.to_string(), filename: format!("{}{i}", d.name()),
})); kcl_source: eg.to_string(),
})
.to_string(),
);
continue;
} }
Err(other_err) => panic!("{}", other_err), Err(other_err) => panic!("{}", other_err),
Ok(img) => img, 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 } => { KclValue::Plane { value } => {
let mut plane = value.clone(); 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.value = PlaneType::Uninit;
plane.id = exec_state.next_uuid(); plane.id = exec_state.next_uuid();
@ -2649,7 +2646,15 @@ p2 = -p
.get_from("p2", result.mem_env, SourceRange::default(), 0) .get_from("p2", result.mem_env, SourceRange::default(), 0)
.unwrap() .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!(), _ => unreachable!(),
} }
} }

View File

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

View File

@ -1043,10 +1043,6 @@ impl KclValue {
.get("yAxis") .get("yAxis")
.and_then(Point3d::from_kcl_val) .and_then(Point3d::from_kcl_val)
.ok_or(CoercionError::from(self))?; .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 id = exec_state.mod_local.id_generator.next_uuid();
let plane = Plane { let plane = Plane {
@ -1055,7 +1051,6 @@ impl KclValue {
origin, origin,
x_axis, x_axis,
y_axis, y_axis,
z_axis,
value: super::PlaneType::Uninit, value: super::PlaneType::Uninit,
meta: meta.clone(), meta: meta.clone(),
}; };

View File

@ -43,5 +43,5 @@ async fn main() {
.await .await
.unwrap(); .unwrap();
let mut exec_state = ExecState::new(&ctx); 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, "Custom" => Self::Custom,
_ => return None, _ => 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> { fn from_kcl_val(arg: &'a KclValue) -> Option<Self> {
// Case 0: actual plane // Case 0: actual plane
if let KclValue::Plane { value } = arg { 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 { return Some(Self::Plane {
origin: value.origin, origin: value.origin,
x_axis: value.x_axis, x_axis: value.x_axis,
y_axis: value.y_axis, y_axis: value.y_axis,
z_axis: value.z_axis,
}); });
} }
// Case 1: predefined plane // Case 1: predefined plane
if let Some(s) = arg.as_str() { 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 { return match s {
"XY" | "xy" => Some(Self::XY), "XY" | "xy" => {
"-XY" | "-xy" => Some(Self::NegXY), #[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::XZ),
"-XZ" | "-xz" => Some(Self::NegXZ), "-XZ" | "-xz" => Some(Self::NegXZ),
"YZ" | "yz" => Some(Self::YZ), "YZ" | "yz" => Some(Self::YZ),
@ -1167,18 +1198,18 @@ impl<'a> FromKclValue<'a> for super::sketch::PlaneData {
_ => None, _ => None,
}; };
} }
#[cfg(target_arch = "wasm32")]
web_sys::console::log_1(&format!("PlaneData::from_kcl_val with object: {:?}", arg).into());
// Case 2: custom plane // Case 2: custom plane
let obj = arg.as_object()?; let obj = arg.as_object()?;
let_field_of!(obj, plane, &KclObjectFields); let_field_of!(obj, plane, &KclObjectFields);
let origin = plane.get("origin").and_then(FromKclValue::from_kcl_val)?; let origin = plane.get("origin").and_then(FromKclValue::from_kcl_val)?;
let x_axis = plane.get("xAxis").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 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 { Some(Self::Plane {
origin, origin,
x_axis, x_axis,
y_axis, y_axis,
z_axis,
}) })
} }
} }

View File

@ -107,7 +107,6 @@ lazy_static! {
Box::new(crate::std::shell::Hollow), Box::new(crate::std::shell::Hollow),
Box::new(crate::std::sweep::Sweep), Box::new(crate::std::sweep::Sweep),
Box::new(crate::std::loft::Loft), Box::new(crate::std::loft::Loft),
Box::new(crate::std::planes::OffsetPlane),
Box::new(crate::std::math::Acos), Box::new(crate::std::math::Acos),
Box::new(crate::std::math::Asin), Box::new(crate::std::math::Asin),
Box::new(crate::std::math::Atan), 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)), |e, a| Box::pin(crate::std::revolve::revolve(e, a)),
StdFnProps::default("std::revolve").include_in_feature_tree(), 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!(), _ => unreachable!(),
} }
} }

View File

@ -1,6 +1,5 @@
//! Standard library plane helpers. //! Standard library plane helpers.
use kcl_derive_docs::stdlib;
use kcmc::{each_cmd as mcmd, length_unit::LengthUnit, shared::Color, ModelingCmd}; use kcmc::{each_cmd as mcmd, length_unit::LengthUnit, shared::Color, ModelingCmd};
use kittycad_modeling_cmds as kcmc; 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) }) 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( async fn inner_offset_plane(
plane: PlaneData, plane: PlaneData,
offset: TyF64, offset: TyF64,
@ -122,7 +29,10 @@ async fn inner_offset_plane(
// standard planes themselves. // standard planes themselves.
plane.value = PlaneType::Custom; 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?; make_offset_plane_in_engine(&plane, exec_state, args).await?;
Ok(plane) Ok(plane)

View File

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

View File

@ -449,3 +449,93 @@ export fn toRadians(@num: number(rad)): number(rad) {
export fn toDegrees(@num: number(deg)): number(deg) { export fn toDegrees(@num: number(deg)): number(deg) {
return num 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 "z": 0.0
}, },
"x_axis": { "x_axis": {
"x": -1.0, "x": 1.0,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 0.0
}, },

View File

@ -303,7 +303,7 @@ description: Variables in memory after executing artifact_graph_example_code_no_
} }
}, },
"xAxis": { "xAxis": {
"x": -1.0, "x": 1.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.0,
"units": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -22,18 +31,18 @@ description: Operations executed artifact_graph_example_code_offset_planes.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane", "name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "String", "type": "String",
"value": "XY" "value": "XZ"
}, },
"sourceRange": [] "sourceRange": []
} },
},
{
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -52,18 +61,18 @@ description: Operations executed artifact_graph_example_code_offset_planes.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane", "name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "String", "type": "String",
"value": "XZ" "value": "YZ"
}, },
"sourceRange": [] "sourceRange": []
} },
},
{
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -82,16 +91,7 @@ description: Operations executed artifact_graph_example_code_offset_planes.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "String",
"value": "YZ"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1608,9 +1608,9 @@ description: Artifact commands color-cube.kcl
"animated": false, "animated": false,
"adjust_camera": false, "adjust_camera": false,
"planar_normal": { "planar_normal": {
"x": -0.0, "x": 0.0,
"y": 1.0, "y": 1.0,
"z": -0.0 "z": 0.0
} }
} }
}, },
@ -1727,9 +1727,9 @@ description: Artifact commands color-cube.kcl
"animated": false, "animated": false,
"adjust_camera": false, "adjust_camera": false,
"planar_normal": { "planar_normal": {
"x": -0.0, "x": 0.0,
"y": 1.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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -22,18 +31,18 @@ description: Operations executed color-cube.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane", "name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "Plane", "type": "Plane",
"artifact_id": "[uuid]" "artifact_id": "[uuid]"
}, },
"sourceRange": [] "sourceRange": []
} },
},
{
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -52,18 +61,18 @@ description: Operations executed color-cube.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane", "name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "Plane", "type": "Plane",
"artifact_id": "[uuid]" "artifact_id": "[uuid]"
}, },
"sourceRange": [] "sourceRange": []
} },
},
{
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -82,18 +91,18 @@ description: Operations executed color-cube.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane", "name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "Plane", "type": "Plane",
"artifact_id": "[uuid]" "artifact_id": "[uuid]"
}, },
"sourceRange": [] "sourceRange": []
} },
},
{
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -112,18 +121,18 @@ description: Operations executed color-cube.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane", "name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "Plane", "type": "Plane",
"artifact_id": "[uuid]" "artifact_id": "[uuid]"
}, },
"sourceRange": [] "sourceRange": []
} },
},
{
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -142,18 +151,18 @@ description: Operations executed color-cube.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"sourceRange": []
},
{
"type": "KclStdLibCall",
"name": "offsetPlane", "name": "offsetPlane",
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": { "unlabeledArg": {
"value": { "value": {
"type": "Plane", "type": "Plane",
"artifact_id": "[uuid]" "artifact_id": "[uuid]"
}, },
"sourceRange": [] "sourceRange": []
} },
},
{
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -172,16 +181,7 @@ description: Operations executed color-cube.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "type": "GroupBegin",

View File

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

View File

@ -34,6 +34,15 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -52,16 +61,7 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -267,6 +267,15 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -285,16 +294,7 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -500,6 +500,15 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -518,16 +527,7 @@ description: Operations executed cycloidal-gear.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -116,16 +125,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -271,16 +280,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -383,16 +392,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -514,16 +523,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -723,16 +732,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -878,16 +887,7 @@ description: Operations executed dual-basin-utility-sink.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -519,16 +528,7 @@ description: Operations executed food-service-spatula.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -512,16 +521,7 @@ description: Operations executed french-press.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -845,6 +845,15 @@ description: Operations executed french-press.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -863,16 +872,7 @@ description: Operations executed french-press.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -1320,6 +1320,15 @@ description: Operations executed french-press.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -1338,16 +1347,7 @@ description: Operations executed french-press.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -1349,16 +1358,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-baseplate.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-baseplate.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -1487,16 +1496,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -22,16 +31,7 @@ description: Operations executed gridfinity-bins.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -266,16 +275,7 @@ description: Operations executed gridfinity-bins.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"type": "GroupBegin", "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": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -1487,16 +1496,7 @@ description: Operations executed gridfinity-bins.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {

View File

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

View File

@ -47,24 +47,24 @@ flowchart LR
2 --- 8 2 --- 8
2 ---- 13 2 ---- 13
2 --- 9 2 --- 9
3 --- 19 3 --- 14
3 --- 32 3 --- 22
3 --- 33 3 --- 23
4 --- 18 4 --- 15
4 --- 30 4 --- 24
4 --- 31 4 --- 25
5 --- 17 5 --- 16
5 --- 28 5 --- 26
5 --- 29 5 --- 27
6 --- 16 6 --- 17
6 --- 26 6 --- 28
6 --- 27 6 --- 29
7 --- 15 7 --- 18
7 --- 24 7 --- 30
7 --- 25 7 --- 31
8 --- 14 8 --- 19
8 --- 22 8 --- 32
8 --- 23 8 --- 33
10 --- 11 10 --- 11
10 --- 12 10 --- 12
13 --- 14 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 "z": 0.0
}, },
"x_axis": { "x_axis": {
"x": -1.0, "x": 1.0,
"y": 0.0, "y": 0.0,
"z": 0.0 "z": 0.0
}, },

View File

@ -177,7 +177,7 @@ description: Variables in memory after executing i-beam.kcl
} }
}, },
"xAxis": { "xAxis": {
"x": -1.0, "x": 1.0,
"y": 0.0, "y": 0.0,
"z": 0.0, "z": 0.0,
"units": { "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": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -37,16 +46,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -114,6 +114,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -132,16 +141,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -209,6 +209,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -227,16 +236,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -304,6 +304,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -322,16 +331,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -399,6 +399,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -417,16 +426,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -494,6 +494,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -512,16 +521,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -589,6 +589,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -607,16 +616,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {
@ -814,6 +814,15 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
}, },
{ {
"type": "KclStdLibCall",
"name": "offsetPlane",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
},
"labeledArgs": { "labeledArgs": {
"offset": { "offset": {
"value": { "value": {
@ -832,16 +841,7 @@ description: Operations executed makeup-mirror.kcl
"sourceRange": [] "sourceRange": []
} }
}, },
"name": "offsetPlane", "sourceRange": []
"sourceRange": [],
"type": "StdLibCall",
"unlabeledArg": {
"value": {
"type": "Plane",
"artifact_id": "[uuid]"
},
"sourceRange": []
}
}, },
{ {
"labeledArgs": { "labeledArgs": {

View File

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

View File

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

View File

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

View File

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