allow more than one tool (#6945)
* allow more than one tool Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * update tests Signed-off-by: Jess Frazelle <github@jessfraz.com> * fmt Signed-off-by: Jess Frazelle <github@jessfraz.com> * bump kcl Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
		
							
								
								
									
										20
									
								
								rust/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										20
									
								
								rust/Cargo.lock
									
									
									
										generated
									
									
									
								
							@ -1815,7 +1815,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-bumper"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "clap",
 | 
			
		||||
@ -1826,7 +1826,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-derive-docs"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "Inflector",
 | 
			
		||||
 "anyhow",
 | 
			
		||||
@ -1845,7 +1845,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-directory-test-macro"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "convert_case",
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
@ -1855,7 +1855,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-language-server"
 | 
			
		||||
version = "0.2.73"
 | 
			
		||||
version = "0.2.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "clap",
 | 
			
		||||
@ -1876,7 +1876,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-language-server-release"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "clap",
 | 
			
		||||
@ -1896,7 +1896,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-lib"
 | 
			
		||||
version = "0.2.73"
 | 
			
		||||
version = "0.2.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "approx 0.5.1",
 | 
			
		||||
@ -1973,7 +1973,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-python-bindings"
 | 
			
		||||
version = "0.3.73"
 | 
			
		||||
version = "0.3.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "kcl-lib",
 | 
			
		||||
@ -1988,7 +1988,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-test-server"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "hyper 0.14.32",
 | 
			
		||||
@ -2001,7 +2001,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-to-core"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "async-trait",
 | 
			
		||||
@ -2015,7 +2015,7 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "kcl-wasm-lib"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anyhow",
 | 
			
		||||
 "bson",
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-bumper"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
repository = "https://github.com/KittyCAD/modeling-api"
 | 
			
		||||
rust-version = "1.76"
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-derive-docs"
 | 
			
		||||
description = "A tool for generating documentation from Rust derive macros"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
license = "MIT"
 | 
			
		||||
repository = "https://github.com/KittyCAD/modeling-app"
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-directory-test-macro"
 | 
			
		||||
description = "A tool for generating tests from a directory of kcl files"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
license = "MIT"
 | 
			
		||||
repository = "https://github.com/KittyCAD/modeling-app"
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-language-server-release"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
 | 
			
		||||
publish = false
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
name = "kcl-language-server"
 | 
			
		||||
description = "A language server for KCL."
 | 
			
		||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
 | 
			
		||||
version = "0.2.73"
 | 
			
		||||
version = "0.2.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
license = "MIT"
 | 
			
		||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-lib"
 | 
			
		||||
description = "KittyCAD Language implementation and tools"
 | 
			
		||||
version = "0.2.73"
 | 
			
		||||
version = "0.2.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
license = "MIT"
 | 
			
		||||
repository = "https://github.com/KittyCAD/modeling-app"
 | 
			
		||||
 | 
			
		||||
@ -3086,6 +3086,48 @@ mod error_revolve_on_edge_get_edge {
 | 
			
		||||
        super::execute(TEST_NAME, true).await
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
mod subtract_with_pattern {
 | 
			
		||||
    const TEST_NAME: &str = "subtract_with_pattern";
 | 
			
		||||
 | 
			
		||||
    /// Test parsing KCL.
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn parse() {
 | 
			
		||||
        super::parse(TEST_NAME)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Test that parsing and unparsing KCL produces the original KCL input.
 | 
			
		||||
    #[tokio::test(flavor = "multi_thread")]
 | 
			
		||||
    async fn unparse() {
 | 
			
		||||
        super::unparse(TEST_NAME).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Test that KCL is executed correctly.
 | 
			
		||||
    #[tokio::test(flavor = "multi_thread")]
 | 
			
		||||
    async fn kcl_test_execute() {
 | 
			
		||||
        super::execute(TEST_NAME, true).await
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
mod subtract_with_pattern_cut_thru {
 | 
			
		||||
    const TEST_NAME: &str = "subtract_with_pattern_cut_thru";
 | 
			
		||||
 | 
			
		||||
    /// Test parsing KCL.
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn parse() {
 | 
			
		||||
        super::parse(TEST_NAME)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Test that parsing and unparsing KCL produces the original KCL input.
 | 
			
		||||
    #[tokio::test(flavor = "multi_thread")]
 | 
			
		||||
    async fn unparse() {
 | 
			
		||||
        super::unparse(TEST_NAME).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Test that KCL is executed correctly.
 | 
			
		||||
    #[tokio::test(flavor = "multi_thread")]
 | 
			
		||||
    async fn kcl_test_execute() {
 | 
			
		||||
        super::execute(TEST_NAME, true).await
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
mod sketch_on_face_union {
 | 
			
		||||
    const TEST_NAME: &str = "sketch_on_face_union";
 | 
			
		||||
 | 
			
		||||
@ -3107,6 +3149,27 @@ mod sketch_on_face_union {
 | 
			
		||||
        super::execute(TEST_NAME, true).await
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
mod multi_target_csg {
 | 
			
		||||
    const TEST_NAME: &str = "multi_target_csg";
 | 
			
		||||
 | 
			
		||||
    /// Test parsing KCL.
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn parse() {
 | 
			
		||||
        super::parse(TEST_NAME)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Test that parsing and unparsing KCL produces the original KCL input.
 | 
			
		||||
    #[tokio::test(flavor = "multi_thread")]
 | 
			
		||||
    async fn unparse() {
 | 
			
		||||
        super::unparse(TEST_NAME).await
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Test that KCL is executed correctly.
 | 
			
		||||
    #[tokio::test(flavor = "multi_thread")]
 | 
			
		||||
    async fn kcl_test_execute() {
 | 
			
		||||
        super::execute(TEST_NAME, true).await
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
mod revolve_colinear {
 | 
			
		||||
    const TEST_NAME: &str = "revolve-colinear";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -293,20 +293,6 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result<KclValue
 | 
			
		||||
    let solids: Vec<Solid> = args.get_unlabeled_kw_arg_typed("solids", &RuntimeType::solids(), exec_state)?;
 | 
			
		||||
    let tools: Vec<Solid> = args.get_kw_arg_typed("tools", &RuntimeType::solids(), exec_state)?;
 | 
			
		||||
 | 
			
		||||
    if solids.len() > 1 {
 | 
			
		||||
        return Err(KclError::UndefinedValue(KclErrorDetails {
 | 
			
		||||
            message: "Only one solid is allowed for a subtract operation, currently.".to_string(),
 | 
			
		||||
            source_ranges: vec![args.source_range],
 | 
			
		||||
        }));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if tools.len() > 1 {
 | 
			
		||||
        return Err(KclError::UndefinedValue(KclErrorDetails {
 | 
			
		||||
            message: "Only one tool is allowed for a subtract operation, currently.".to_string(),
 | 
			
		||||
            source_ranges: vec![args.source_range],
 | 
			
		||||
        }));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let tolerance: Option<TyF64> = args.get_kw_arg_opt_typed("tolerance", &RuntimeType::length(), exec_state)?;
 | 
			
		||||
 | 
			
		||||
    let solids = inner_subtract(solids, tools, tolerance, exec_state, args).await?;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1050
									
								
								rust/kcl-lib/tests/multi_target_csg/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1050
									
								
								rust/kcl-lib/tests/multi_target_csg/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Artifact graph flowchart multi_target_csg.kcl
 | 
			
		||||
extension: md
 | 
			
		||||
snapshot_kind: binary
 | 
			
		||||
---
 | 
			
		||||
@ -0,0 +1,466 @@
 | 
			
		||||
```mermaid
 | 
			
		||||
flowchart LR
 | 
			
		||||
  subgraph path5 [Path]
 | 
			
		||||
    5["Path<br>[89, 136, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
 | 
			
		||||
    10["Segment<br>[142, 163, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
 | 
			
		||||
    11["Segment<br>[169, 247, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
 | 
			
		||||
    12["Segment<br>[253, 275, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
 | 
			
		||||
    13["Segment<br>[281, 362, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
 | 
			
		||||
    14["Segment<br>[368, 390, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
 | 
			
		||||
    15["Segment<br>[396, 477, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
 | 
			
		||||
    16["Segment<br>[483, 504, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }]
 | 
			
		||||
    17["Segment<br>[510, 590, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }]
 | 
			
		||||
    18["Segment<br>[596, 603, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }]
 | 
			
		||||
    34[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  subgraph path6 [Path]
 | 
			
		||||
    6["Path<br>[627, 695, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }]
 | 
			
		||||
    19["Segment<br>[627, 695, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }]
 | 
			
		||||
    37[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  subgraph path7 [Path]
 | 
			
		||||
    7["Path<br>[811, 861, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
 | 
			
		||||
    20["Segment<br>[867, 898, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
 | 
			
		||||
    21["Segment<br>[904, 929, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
 | 
			
		||||
    22["Segment<br>[935, 969, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
 | 
			
		||||
    23["Segment<br>[975, 1008, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
 | 
			
		||||
    24["Segment<br>[1014, 1038, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
 | 
			
		||||
    25["Segment<br>[1044, 1051, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
 | 
			
		||||
    33[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  subgraph path8 [Path]
 | 
			
		||||
    8["Path<br>[1075, 1118, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
 | 
			
		||||
    26["Segment<br>[1124, 1148, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
 | 
			
		||||
    27["Segment<br>[1154, 1187, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
 | 
			
		||||
    28["Segment<br>[1193, 1227, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
 | 
			
		||||
    29["Segment<br>[1233, 1258, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
 | 
			
		||||
    30["Segment<br>[1264, 1296, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
 | 
			
		||||
    31["Segment<br>[1302, 1309, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }]
 | 
			
		||||
    36[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  subgraph path9 [Path]
 | 
			
		||||
    9["Path<br>[1499, 1562, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
    32["Segment<br>[1499, 1562, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
    35[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  1["Plane<br>[47, 65, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  2["Plane<br>[770, 787, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  3["Plane<br>[1444, 1474, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwUnlabeledArg]
 | 
			
		||||
  4["StartSketchOnPlane<br>[1430, 1475, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  38["Sweep Extrusion<br>[711, 756, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  39["Sweep Extrusion<br>[1324, 1416, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  40["Sweep Extrusion<br>[1324, 1416, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  41["Sweep Extrusion<br>[1580, 1623, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  42[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  43[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  44[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  45[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  46[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  47[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  48[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  49[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  50[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  51[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  52[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  53[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  54[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  55[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  56[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  57[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  58[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  59[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  60[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  61[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  62[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  63["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  64["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  65["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  66["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  67["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  68["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  69["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  70["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  71["SweepEdge Opposite"]
 | 
			
		||||
  72["SweepEdge Opposite"]
 | 
			
		||||
  73["SweepEdge Opposite"]
 | 
			
		||||
  74["SweepEdge Opposite"]
 | 
			
		||||
  75["SweepEdge Opposite"]
 | 
			
		||||
  76["SweepEdge Opposite"]
 | 
			
		||||
  77["SweepEdge Opposite"]
 | 
			
		||||
  78["SweepEdge Opposite"]
 | 
			
		||||
  79["SweepEdge Opposite"]
 | 
			
		||||
  80["SweepEdge Opposite"]
 | 
			
		||||
  81["SweepEdge Opposite"]
 | 
			
		||||
  82["SweepEdge Opposite"]
 | 
			
		||||
  83["SweepEdge Opposite"]
 | 
			
		||||
  84["SweepEdge Opposite"]
 | 
			
		||||
  85["SweepEdge Opposite"]
 | 
			
		||||
  86["SweepEdge Opposite"]
 | 
			
		||||
  87["SweepEdge Opposite"]
 | 
			
		||||
  88["SweepEdge Opposite"]
 | 
			
		||||
  89["SweepEdge Opposite"]
 | 
			
		||||
  90["SweepEdge Opposite"]
 | 
			
		||||
  91["SweepEdge Opposite"]
 | 
			
		||||
  92["SweepEdge Adjacent"]
 | 
			
		||||
  93["SweepEdge Adjacent"]
 | 
			
		||||
  94["SweepEdge Adjacent"]
 | 
			
		||||
  95["SweepEdge Adjacent"]
 | 
			
		||||
  96["SweepEdge Adjacent"]
 | 
			
		||||
  97["SweepEdge Adjacent"]
 | 
			
		||||
  98["SweepEdge Adjacent"]
 | 
			
		||||
  99["SweepEdge Adjacent"]
 | 
			
		||||
  100["SweepEdge Adjacent"]
 | 
			
		||||
  101["SweepEdge Adjacent"]
 | 
			
		||||
  102["SweepEdge Adjacent"]
 | 
			
		||||
  103["SweepEdge Adjacent"]
 | 
			
		||||
  104["SweepEdge Adjacent"]
 | 
			
		||||
  105["SweepEdge Adjacent"]
 | 
			
		||||
  106["SweepEdge Adjacent"]
 | 
			
		||||
  107["SweepEdge Adjacent"]
 | 
			
		||||
  108["SweepEdge Adjacent"]
 | 
			
		||||
  109["SweepEdge Adjacent"]
 | 
			
		||||
  110["SweepEdge Adjacent"]
 | 
			
		||||
  111["SweepEdge Adjacent"]
 | 
			
		||||
  112["SweepEdge Adjacent"]
 | 
			
		||||
  1 --- 5
 | 
			
		||||
  1 --- 6
 | 
			
		||||
  2 --- 7
 | 
			
		||||
  2 --- 8
 | 
			
		||||
  3 <--x 4
 | 
			
		||||
  3 --- 9
 | 
			
		||||
  5 --- 10
 | 
			
		||||
  5 --- 11
 | 
			
		||||
  5 --- 12
 | 
			
		||||
  5 --- 13
 | 
			
		||||
  5 --- 14
 | 
			
		||||
  5 --- 15
 | 
			
		||||
  5 --- 16
 | 
			
		||||
  5 --- 17
 | 
			
		||||
  5 --- 18
 | 
			
		||||
  5 --- 34
 | 
			
		||||
  5 ---- 38
 | 
			
		||||
  6 --- 19
 | 
			
		||||
  6 --- 37
 | 
			
		||||
  7 --- 20
 | 
			
		||||
  7 --- 21
 | 
			
		||||
  7 --- 22
 | 
			
		||||
  7 --- 23
 | 
			
		||||
  7 --- 24
 | 
			
		||||
  7 --- 25
 | 
			
		||||
  7 --- 33
 | 
			
		||||
  7 ---- 40
 | 
			
		||||
  8 --- 26
 | 
			
		||||
  8 --- 27
 | 
			
		||||
  8 --- 28
 | 
			
		||||
  8 --- 29
 | 
			
		||||
  8 --- 30
 | 
			
		||||
  8 --- 31
 | 
			
		||||
  8 --- 36
 | 
			
		||||
  8 ---- 39
 | 
			
		||||
  9 --- 32
 | 
			
		||||
  9 --- 35
 | 
			
		||||
  9 ---- 41
 | 
			
		||||
  10 --- 58
 | 
			
		||||
  10 x--> 65
 | 
			
		||||
  10 --- 91
 | 
			
		||||
  10 --- 112
 | 
			
		||||
  11 --- 57
 | 
			
		||||
  11 x--> 65
 | 
			
		||||
  11 --- 90
 | 
			
		||||
  11 --- 111
 | 
			
		||||
  12 --- 59
 | 
			
		||||
  12 x--> 65
 | 
			
		||||
  12 --- 89
 | 
			
		||||
  12 --- 110
 | 
			
		||||
  13 --- 56
 | 
			
		||||
  13 x--> 65
 | 
			
		||||
  13 --- 88
 | 
			
		||||
  13 --- 109
 | 
			
		||||
  14 --- 55
 | 
			
		||||
  14 x--> 65
 | 
			
		||||
  14 --- 87
 | 
			
		||||
  14 --- 108
 | 
			
		||||
  15 --- 60
 | 
			
		||||
  15 x--> 65
 | 
			
		||||
  15 --- 86
 | 
			
		||||
  15 --- 107
 | 
			
		||||
  16 --- 62
 | 
			
		||||
  16 x--> 65
 | 
			
		||||
  16 --- 85
 | 
			
		||||
  16 --- 106
 | 
			
		||||
  17 --- 61
 | 
			
		||||
  17 x--> 65
 | 
			
		||||
  17 --- 84
 | 
			
		||||
  17 --- 105
 | 
			
		||||
  20 --- 49
 | 
			
		||||
  20 x--> 63
 | 
			
		||||
  20 --- 78
 | 
			
		||||
  20 --- 99
 | 
			
		||||
  21 --- 54
 | 
			
		||||
  21 x--> 63
 | 
			
		||||
  21 --- 79
 | 
			
		||||
  21 --- 100
 | 
			
		||||
  22 --- 52
 | 
			
		||||
  22 x--> 63
 | 
			
		||||
  22 --- 80
 | 
			
		||||
  22 --- 101
 | 
			
		||||
  23 --- 51
 | 
			
		||||
  23 x--> 63
 | 
			
		||||
  23 --- 81
 | 
			
		||||
  23 --- 102
 | 
			
		||||
  24 --- 53
 | 
			
		||||
  24 x--> 63
 | 
			
		||||
  24 --- 82
 | 
			
		||||
  24 --- 103
 | 
			
		||||
  25 --- 50
 | 
			
		||||
  25 x--> 63
 | 
			
		||||
  25 --- 83
 | 
			
		||||
  25 --- 104
 | 
			
		||||
  26 --- 44
 | 
			
		||||
  26 x--> 64
 | 
			
		||||
  26 --- 76
 | 
			
		||||
  26 --- 97
 | 
			
		||||
  27 --- 45
 | 
			
		||||
  27 x--> 64
 | 
			
		||||
  27 --- 75
 | 
			
		||||
  27 --- 96
 | 
			
		||||
  28 --- 47
 | 
			
		||||
  28 x--> 64
 | 
			
		||||
  28 --- 74
 | 
			
		||||
  28 --- 95
 | 
			
		||||
  29 --- 42
 | 
			
		||||
  29 x--> 64
 | 
			
		||||
  29 --- 73
 | 
			
		||||
  29 --- 94
 | 
			
		||||
  30 --- 46
 | 
			
		||||
  30 x--> 64
 | 
			
		||||
  30 --- 72
 | 
			
		||||
  30 --- 93
 | 
			
		||||
  31 --- 43
 | 
			
		||||
  31 x--> 64
 | 
			
		||||
  31 --- 71
 | 
			
		||||
  31 --- 92
 | 
			
		||||
  32 --- 48
 | 
			
		||||
  32 x--> 70
 | 
			
		||||
  32 --- 77
 | 
			
		||||
  32 --- 98
 | 
			
		||||
  38 --- 55
 | 
			
		||||
  38 --- 56
 | 
			
		||||
  38 --- 57
 | 
			
		||||
  38 --- 58
 | 
			
		||||
  38 --- 59
 | 
			
		||||
  38 --- 60
 | 
			
		||||
  38 --- 61
 | 
			
		||||
  38 --- 62
 | 
			
		||||
  38 --- 65
 | 
			
		||||
  38 --- 69
 | 
			
		||||
  38 --- 84
 | 
			
		||||
  38 --- 85
 | 
			
		||||
  38 --- 86
 | 
			
		||||
  38 --- 87
 | 
			
		||||
  38 --- 88
 | 
			
		||||
  38 --- 89
 | 
			
		||||
  38 --- 90
 | 
			
		||||
  38 --- 91
 | 
			
		||||
  38 --- 105
 | 
			
		||||
  38 --- 106
 | 
			
		||||
  38 --- 107
 | 
			
		||||
  38 --- 108
 | 
			
		||||
  38 --- 109
 | 
			
		||||
  38 --- 110
 | 
			
		||||
  38 --- 111
 | 
			
		||||
  38 --- 112
 | 
			
		||||
  39 --- 42
 | 
			
		||||
  39 --- 43
 | 
			
		||||
  39 --- 44
 | 
			
		||||
  39 --- 45
 | 
			
		||||
  39 --- 46
 | 
			
		||||
  39 --- 47
 | 
			
		||||
  39 --- 64
 | 
			
		||||
  39 --- 68
 | 
			
		||||
  39 --- 71
 | 
			
		||||
  39 --- 72
 | 
			
		||||
  39 --- 73
 | 
			
		||||
  39 --- 74
 | 
			
		||||
  39 --- 75
 | 
			
		||||
  39 --- 76
 | 
			
		||||
  39 --- 92
 | 
			
		||||
  39 --- 93
 | 
			
		||||
  39 --- 94
 | 
			
		||||
  39 --- 95
 | 
			
		||||
  39 --- 96
 | 
			
		||||
  39 --- 97
 | 
			
		||||
  40 --- 49
 | 
			
		||||
  40 --- 50
 | 
			
		||||
  40 --- 51
 | 
			
		||||
  40 --- 52
 | 
			
		||||
  40 --- 53
 | 
			
		||||
  40 --- 54
 | 
			
		||||
  40 --- 63
 | 
			
		||||
  40 --- 67
 | 
			
		||||
  40 --- 78
 | 
			
		||||
  40 --- 79
 | 
			
		||||
  40 --- 80
 | 
			
		||||
  40 --- 81
 | 
			
		||||
  40 --- 82
 | 
			
		||||
  40 --- 83
 | 
			
		||||
  40 --- 99
 | 
			
		||||
  40 --- 100
 | 
			
		||||
  40 --- 101
 | 
			
		||||
  40 --- 102
 | 
			
		||||
  40 --- 103
 | 
			
		||||
  40 --- 104
 | 
			
		||||
  41 --- 48
 | 
			
		||||
  41 --- 66
 | 
			
		||||
  41 --- 70
 | 
			
		||||
  41 --- 77
 | 
			
		||||
  41 --- 98
 | 
			
		||||
  42 --- 73
 | 
			
		||||
  42 --- 94
 | 
			
		||||
  95 <--x 42
 | 
			
		||||
  43 --- 71
 | 
			
		||||
  43 --- 92
 | 
			
		||||
  93 <--x 43
 | 
			
		||||
  44 --- 76
 | 
			
		||||
  92 <--x 44
 | 
			
		||||
  44 --- 97
 | 
			
		||||
  45 --- 75
 | 
			
		||||
  45 --- 96
 | 
			
		||||
  97 <--x 45
 | 
			
		||||
  46 --- 72
 | 
			
		||||
  46 --- 93
 | 
			
		||||
  94 <--x 46
 | 
			
		||||
  47 --- 74
 | 
			
		||||
  47 --- 95
 | 
			
		||||
  96 <--x 47
 | 
			
		||||
  48 --- 77
 | 
			
		||||
  48 --- 98
 | 
			
		||||
  49 --- 78
 | 
			
		||||
  49 --- 99
 | 
			
		||||
  104 <--x 49
 | 
			
		||||
  50 --- 83
 | 
			
		||||
  103 <--x 50
 | 
			
		||||
  50 --- 104
 | 
			
		||||
  51 --- 81
 | 
			
		||||
  101 <--x 51
 | 
			
		||||
  51 --- 102
 | 
			
		||||
  52 --- 80
 | 
			
		||||
  100 <--x 52
 | 
			
		||||
  52 --- 101
 | 
			
		||||
  53 --- 82
 | 
			
		||||
  102 <--x 53
 | 
			
		||||
  53 --- 103
 | 
			
		||||
  54 --- 79
 | 
			
		||||
  99 <--x 54
 | 
			
		||||
  54 --- 100
 | 
			
		||||
  55 --- 87
 | 
			
		||||
  55 --- 108
 | 
			
		||||
  109 <--x 55
 | 
			
		||||
  56 --- 88
 | 
			
		||||
  56 --- 109
 | 
			
		||||
  110 <--x 56
 | 
			
		||||
  57 --- 90
 | 
			
		||||
  57 --- 111
 | 
			
		||||
  112 <--x 57
 | 
			
		||||
  58 --- 91
 | 
			
		||||
  105 <--x 58
 | 
			
		||||
  58 --- 112
 | 
			
		||||
  59 --- 89
 | 
			
		||||
  59 --- 110
 | 
			
		||||
  111 <--x 59
 | 
			
		||||
  60 --- 86
 | 
			
		||||
  60 --- 107
 | 
			
		||||
  108 <--x 60
 | 
			
		||||
  61 --- 84
 | 
			
		||||
  61 --- 105
 | 
			
		||||
  106 <--x 61
 | 
			
		||||
  62 --- 85
 | 
			
		||||
  62 --- 106
 | 
			
		||||
  107 <--x 62
 | 
			
		||||
  77 <--x 66
 | 
			
		||||
  78 <--x 67
 | 
			
		||||
  79 <--x 67
 | 
			
		||||
  80 <--x 67
 | 
			
		||||
  81 <--x 67
 | 
			
		||||
  82 <--x 67
 | 
			
		||||
  83 <--x 67
 | 
			
		||||
  71 <--x 68
 | 
			
		||||
  72 <--x 68
 | 
			
		||||
  73 <--x 68
 | 
			
		||||
  74 <--x 68
 | 
			
		||||
  75 <--x 68
 | 
			
		||||
  76 <--x 68
 | 
			
		||||
  84 <--x 69
 | 
			
		||||
  85 <--x 69
 | 
			
		||||
  86 <--x 69
 | 
			
		||||
  87 <--x 69
 | 
			
		||||
  88 <--x 69
 | 
			
		||||
  89 <--x 69
 | 
			
		||||
  90 <--x 69
 | 
			
		||||
  91 <--x 69
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										3507
									
								
								rust/kcl-lib/tests/multi_target_csg/ast.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3507
									
								
								rust/kcl-lib/tests/multi_target_csg/ast.snap
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										14
									
								
								rust/kcl-lib/tests/multi_target_csg/execution_error.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								rust/kcl-lib/tests/multi_target_csg/execution_error.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Error from executing multi_target_csg.kcl
 | 
			
		||||
---
 | 
			
		||||
KCL Engine error
 | 
			
		||||
 | 
			
		||||
  × engine: Currently the engine does not support multiple targets on subtract
 | 
			
		||||
    ╭─[69:10]
 | 
			
		||||
 68 │ 
 | 
			
		||||
 69 │ cut000 = subtract(extrude001, tools = cut000Extrude)
 | 
			
		||||
    ·          ─────────────────────┬─────────────────────
 | 
			
		||||
    ·                               ╰── tests/multi_target_csg/input.kcl
 | 
			
		||||
 70 │ 
 | 
			
		||||
    ╰────
 | 
			
		||||
							
								
								
									
										89
									
								
								rust/kcl-lib/tests/multi_target_csg/input.kcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								rust/kcl-lib/tests/multi_target_csg/input.kcl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,89 @@
 | 
			
		||||
@settings(defaultLengthUnit = in)
 | 
			
		||||
 | 
			
		||||
sketch002 = startSketchOn(-XZ)
 | 
			
		||||
 | 
			
		||||
sketch002Profile000 = startProfile(sketch002, at = [-0.1625, 0.1875])
 | 
			
		||||
  |> xLine(length = 0.325)
 | 
			
		||||
  |> arc(
 | 
			
		||||
       angleStart = 90,
 | 
			
		||||
       angleEnd = 0,
 | 
			
		||||
       radius = 0.025,
 | 
			
		||||
    )
 | 
			
		||||
  |> yLine(length = -0.325)
 | 
			
		||||
  |> arc(
 | 
			
		||||
       angleStart = 360,
 | 
			
		||||
       angleEnd = 270,
 | 
			
		||||
       radius = 0.025,
 | 
			
		||||
    )
 | 
			
		||||
  |> xLine(length = -0.325)
 | 
			
		||||
  |> arc(
 | 
			
		||||
       angleStart = 270,
 | 
			
		||||
       angleEnd = 180,
 | 
			
		||||
       radius = 0.025,
 | 
			
		||||
    )
 | 
			
		||||
  |> yLine(length = 0.325)
 | 
			
		||||
  |> arc(
 | 
			
		||||
       angleStart = 180,
 | 
			
		||||
       angleEnd = 90,
 | 
			
		||||
       radius = 0.025,
 | 
			
		||||
    )
 | 
			
		||||
  |> close()
 | 
			
		||||
  |> subtract2d(tool = circle(
 | 
			
		||||
  center = [-0, -0],
 | 
			
		||||
  radius = 0.039062,
 | 
			
		||||
  tag = $hole001
 | 
			
		||||
))
 | 
			
		||||
 | 
			
		||||
extrude000 = extrude(sketch002Profile000, length = 0.0625)
 | 
			
		||||
 | 
			
		||||
sketch003 = startSketchOn(XY)
 | 
			
		||||
 | 
			
		||||
sketch003Profile000 = startProfile(sketch003, at = [-0.05582, -0.21875])
 | 
			
		||||
  |> line(end = [0.048496, 0.21875])
 | 
			
		||||
  |> xLine(length = -0.087793)
 | 
			
		||||
  |> line(end = [-0.026673, -0.120313])
 | 
			
		||||
  |> line(end = [0.058646, -0.098438])
 | 
			
		||||
  |> xLine(length = 0.007324)
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
sketch003Profile001 = startProfile(sketch003, at = [0.007324, 0])
 | 
			
		||||
  |> xLine(length = 0.087793)
 | 
			
		||||
  |> line(end = [0.026673, -0.120313])
 | 
			
		||||
  |> line(end = [-0.058646, -0.098438])
 | 
			
		||||
  |> xLine(length = -0.007324)
 | 
			
		||||
  |> line(end = [-0.048496, 0.21875])
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
extrude001 = extrude([sketch003Profile000, sketch003Profile001], length = 0.1, bidirectionalLength = 0.1)
 | 
			
		||||
 | 
			
		||||
sketch004 = startSketchOn(offsetPlane(-XZ, offset = 0.1))
 | 
			
		||||
 | 
			
		||||
sketch004Profile000 = circle(
 | 
			
		||||
  sketch004,
 | 
			
		||||
  center = [-0, -0],
 | 
			
		||||
  radius = 0.039062
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
cut000Extrude = extrude([sketch004Profile000], length = -1)
 | 
			
		||||
 | 
			
		||||
cut000 = subtract(extrude001, tools = cut000Extrude)
 | 
			
		||||
 | 
			
		||||
sketch005 = startSketchOn(offsetPlane(-XZ, offset = 0.07))
 | 
			
		||||
 | 
			
		||||
sketch005Profile000 = circle(
 | 
			
		||||
  sketch005,
 | 
			
		||||
  center = [0, 0],
 | 
			
		||||
  radius = 0.052734
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
sketch006 = startSketchOn(offsetPlane(-XZ, offset = 0.0325))
 | 
			
		||||
 | 
			
		||||
sketch006Profile000 = circle(
 | 
			
		||||
  sketch006,
 | 
			
		||||
  center = [0, 0],
 | 
			
		||||
  radius = 0.03
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
draftCut000Extrude = loft([sketch005Profile000, sketch006Profile000])
 | 
			
		||||
 | 
			
		||||
draftCut000 = subtract(extrude000, tools = draftCut000Extrude)
 | 
			
		||||
							
								
								
									
										265
									
								
								rust/kcl-lib/tests/multi_target_csg/ops.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										265
									
								
								rust/kcl-lib/tests/multi_target_csg/ops.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,265 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Operations executed multi_target_csg.kcl
 | 
			
		||||
---
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {},
 | 
			
		||||
    "name": "startSketchOn",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "tool": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Sketch",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "artifactId": "[uuid]"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "subtract2d",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "length": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.0625,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Inches"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "extrude",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {},
 | 
			
		||||
    "name": "startSketchOn",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "bidirectionalLength": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.1,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Inches"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      },
 | 
			
		||||
      "length": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.1,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Inches"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "extrude",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Array",
 | 
			
		||||
        "value": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "Sketch",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "artifactId": "[uuid]"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "Sketch",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "artifactId": "[uuid]"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {},
 | 
			
		||||
    "name": "startSketchOn",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "type": "KclStdLibCall",
 | 
			
		||||
    "name": "offsetPlane",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    },
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "offset": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 0.1,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Inches"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "sourceRange": []
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "length": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": -1.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Inches"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "extrude",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Array",
 | 
			
		||||
        "value": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "Sketch",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "artifactId": "[uuid]"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "isError": true,
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "tools": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Solid",
 | 
			
		||||
          "value": {
 | 
			
		||||
            "artifactId": "[uuid]"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "subtract",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Array",
 | 
			
		||||
        "value": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "artifactId": "[uuid]"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "artifactId": "[uuid]"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										71
									
								
								rust/kcl-lib/tests/multi_target_csg/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								rust/kcl-lib/tests/multi_target_csg/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,71 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Result of unparsing multi_target_csg.kcl
 | 
			
		||||
---
 | 
			
		||||
@settings(defaultLengthUnit = in)
 | 
			
		||||
 | 
			
		||||
sketch002 = startSketchOn(-XZ)
 | 
			
		||||
 | 
			
		||||
sketch002Profile000 = startProfile(sketch002, at = [-0.1625, 0.1875])
 | 
			
		||||
  |> xLine(length = 0.325)
 | 
			
		||||
  |> arc(angleStart = 90, angleEnd = 0, radius = 0.025)
 | 
			
		||||
  |> yLine(length = -0.325)
 | 
			
		||||
  |> arc(angleStart = 360, angleEnd = 270, radius = 0.025)
 | 
			
		||||
  |> xLine(length = -0.325)
 | 
			
		||||
  |> arc(angleStart = 270, angleEnd = 180, radius = 0.025)
 | 
			
		||||
  |> yLine(length = 0.325)
 | 
			
		||||
  |> arc(angleStart = 180, angleEnd = 90, radius = 0.025)
 | 
			
		||||
  |> close()
 | 
			
		||||
  |> subtract2d(tool = circle(center = [-0, -0], radius = 0.039062, tag = $hole001))
 | 
			
		||||
 | 
			
		||||
extrude000 = extrude(sketch002Profile000, length = 0.0625)
 | 
			
		||||
 | 
			
		||||
sketch003 = startSketchOn(XY)
 | 
			
		||||
 | 
			
		||||
sketch003Profile000 = startProfile(sketch003, at = [-0.05582, -0.21875])
 | 
			
		||||
  |> line(end = [0.048496, 0.21875])
 | 
			
		||||
  |> xLine(length = -0.087793)
 | 
			
		||||
  |> line(end = [-0.026673, -0.120313])
 | 
			
		||||
  |> line(end = [0.058646, -0.098438])
 | 
			
		||||
  |> xLine(length = 0.007324)
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
sketch003Profile001 = startProfile(sketch003, at = [0.007324, 0])
 | 
			
		||||
  |> xLine(length = 0.087793)
 | 
			
		||||
  |> line(end = [0.026673, -0.120313])
 | 
			
		||||
  |> line(end = [-0.058646, -0.098438])
 | 
			
		||||
  |> xLine(length = -0.007324)
 | 
			
		||||
  |> line(end = [-0.048496, 0.21875])
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
extrude001 = extrude(
 | 
			
		||||
  [
 | 
			
		||||
    sketch003Profile000,
 | 
			
		||||
    sketch003Profile001
 | 
			
		||||
  ],
 | 
			
		||||
  length = 0.1,
 | 
			
		||||
  bidirectionalLength = 0.1,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
sketch004 = startSketchOn(offsetPlane(-XZ, offset = 0.1))
 | 
			
		||||
 | 
			
		||||
sketch004Profile000 = circle(sketch004, center = [-0, -0], radius = 0.039062)
 | 
			
		||||
 | 
			
		||||
cut000Extrude = extrude([sketch004Profile000], length = -1)
 | 
			
		||||
 | 
			
		||||
cut000 = subtract(extrude001, tools = cut000Extrude)
 | 
			
		||||
 | 
			
		||||
sketch005 = startSketchOn(offsetPlane(-XZ, offset = 0.07))
 | 
			
		||||
 | 
			
		||||
sketch005Profile000 = circle(sketch005, center = [0, 0], radius = 0.052734)
 | 
			
		||||
 | 
			
		||||
sketch006 = startSketchOn(offsetPlane(-XZ, offset = 0.0325))
 | 
			
		||||
 | 
			
		||||
sketch006Profile000 = circle(sketch006, center = [0, 0], radius = 0.03)
 | 
			
		||||
 | 
			
		||||
draftCut000Extrude = loft([
 | 
			
		||||
  sketch005Profile000,
 | 
			
		||||
  sketch006Profile000
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
draftCut000 = subtract(extrude000, tools = draftCut000Extrude)
 | 
			
		||||
							
								
								
									
										717
									
								
								rust/kcl-lib/tests/subtract_with_pattern/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										717
									
								
								rust/kcl-lib/tests/subtract_with_pattern/artifact_commands.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,717 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Artifact commands subtract_with_pattern.kcl
 | 
			
		||||
---
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "edge_lines_visible",
 | 
			
		||||
      "hidden": false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_visible",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "hidden": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_visible",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "hidden": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "make_plane",
 | 
			
		||||
      "origin": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "x_axis": {
 | 
			
		||||
        "x": 1.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "y_axis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "size": 60.0,
 | 
			
		||||
      "clobber": false,
 | 
			
		||||
      "hide": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "move_path_pen",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "to": {
 | 
			
		||||
        "x": 2.65,
 | 
			
		||||
        "y": 12.2,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "start_path"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": 23.49,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": -22.68,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": -24.2,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": 2.65,
 | 
			
		||||
          "y": 12.2,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": false
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "close_path",
 | 
			
		||||
      "path_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extrude",
 | 
			
		||||
      "target": "[uuid]",
 | 
			
		||||
      "distance": 500.0,
 | 
			
		||||
      "faces": null,
 | 
			
		||||
      "opposite": "None"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_bring_to_front",
 | 
			
		||||
      "object_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_adjacency_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_extrusion_face_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "make_plane",
 | 
			
		||||
      "origin": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "x_axis": {
 | 
			
		||||
        "x": 1.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "y_axis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      },
 | 
			
		||||
      "size": 60.0,
 | 
			
		||||
      "clobber": false,
 | 
			
		||||
      "hide": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "close_path",
 | 
			
		||||
      "path_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": -1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "arc",
 | 
			
		||||
        "center": {
 | 
			
		||||
          "x": 17.5,
 | 
			
		||||
          "y": 22.02
 | 
			
		||||
        },
 | 
			
		||||
        "radius": 10.16,
 | 
			
		||||
        "start": {
 | 
			
		||||
          "unit": "degrees",
 | 
			
		||||
          "value": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "end": {
 | 
			
		||||
          "unit": "degrees",
 | 
			
		||||
          "value": 360.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": false
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "move_path_pen",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "to": {
 | 
			
		||||
        "x": 27.66,
 | 
			
		||||
        "y": 22.02,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "start_path"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": -1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extrude",
 | 
			
		||||
      "target": "[uuid]",
 | 
			
		||||
      "distance": 50.0,
 | 
			
		||||
      "faces": null,
 | 
			
		||||
      "opposite": "None"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_bring_to_front",
 | 
			
		||||
      "object_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_adjacency_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_extrusion_face_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "entity_linear_pattern_transform",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "transform": [],
 | 
			
		||||
      "transforms": [
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 30.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 60.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 90.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 120.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 150.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 180.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 210.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 240.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 270.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "boolean_subtract",
 | 
			
		||||
      "target_ids": [
 | 
			
		||||
        "[uuid]"
 | 
			
		||||
      ],
 | 
			
		||||
      "tool_ids": [
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]"
 | 
			
		||||
      ],
 | 
			
		||||
      "tolerance": 0.0000001
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "set_object_transform",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "transforms": [
 | 
			
		||||
        {
 | 
			
		||||
          "translate": null,
 | 
			
		||||
          "rotate_rpy": null,
 | 
			
		||||
          "rotate_angle_axis": {
 | 
			
		||||
            "property": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 0.0,
 | 
			
		||||
              "w": 90.0
 | 
			
		||||
            },
 | 
			
		||||
            "set": false,
 | 
			
		||||
            "is_local": true
 | 
			
		||||
          },
 | 
			
		||||
          "scale": null
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@ -0,0 +1,6 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Artifact graph flowchart subtract_with_pattern.kcl
 | 
			
		||||
extension: md
 | 
			
		||||
snapshot_kind: binary
 | 
			
		||||
---
 | 
			
		||||
@ -0,0 +1,135 @@
 | 
			
		||||
```mermaid
 | 
			
		||||
flowchart LR
 | 
			
		||||
  subgraph path3 [Path]
 | 
			
		||||
    3["Path<br>[43, 85, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
 | 
			
		||||
    5["Segment<br>[93, 114, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
 | 
			
		||||
    6["Segment<br>[122, 144, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
 | 
			
		||||
    7["Segment<br>[152, 173, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
 | 
			
		||||
    8["Segment<br>[181, 237, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
 | 
			
		||||
    9["Segment<br>[245, 252, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
 | 
			
		||||
    12[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  subgraph path4 [Path]
 | 
			
		||||
    4["Path<br>[349, 406, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
    10["Segment<br>[349, 406, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
    11[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  1["Plane<br>[12, 29, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  2["Plane<br>[317, 334, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  13["Sweep Extrusion<br>[268, 301, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  14["Sweep Extrusion<br>[422, 454, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  15["CompositeSolid Subtract<br>[641, 685, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 7 }, ExpressionStatementExpr, PipeBodyItem { index: 0 }]
 | 
			
		||||
  16[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  17[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  18[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  19[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  20[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  21["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  22["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  23["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  24["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  25["SweepEdge Opposite"]
 | 
			
		||||
  26["SweepEdge Opposite"]
 | 
			
		||||
  27["SweepEdge Opposite"]
 | 
			
		||||
  28["SweepEdge Opposite"]
 | 
			
		||||
  29["SweepEdge Opposite"]
 | 
			
		||||
  30["SweepEdge Adjacent"]
 | 
			
		||||
  31["SweepEdge Adjacent"]
 | 
			
		||||
  32["SweepEdge Adjacent"]
 | 
			
		||||
  33["SweepEdge Adjacent"]
 | 
			
		||||
  34["SweepEdge Adjacent"]
 | 
			
		||||
  1 --- 3
 | 
			
		||||
  2 --- 4
 | 
			
		||||
  3 --- 5
 | 
			
		||||
  3 --- 6
 | 
			
		||||
  3 --- 7
 | 
			
		||||
  3 --- 8
 | 
			
		||||
  3 --- 9
 | 
			
		||||
  3 --- 12
 | 
			
		||||
  3 ---- 13
 | 
			
		||||
  3 --- 15
 | 
			
		||||
  4 --- 10
 | 
			
		||||
  4 --- 11
 | 
			
		||||
  4 ---- 14
 | 
			
		||||
  4 --- 15
 | 
			
		||||
  5 --- 19
 | 
			
		||||
  5 x--> 21
 | 
			
		||||
  5 --- 28
 | 
			
		||||
  5 --- 33
 | 
			
		||||
  6 --- 17
 | 
			
		||||
  6 x--> 21
 | 
			
		||||
  6 --- 27
 | 
			
		||||
  6 --- 32
 | 
			
		||||
  7 --- 16
 | 
			
		||||
  7 x--> 21
 | 
			
		||||
  7 --- 26
 | 
			
		||||
  7 --- 31
 | 
			
		||||
  8 --- 18
 | 
			
		||||
  8 x--> 21
 | 
			
		||||
  8 --- 25
 | 
			
		||||
  8 --- 30
 | 
			
		||||
  10 --- 20
 | 
			
		||||
  10 x--> 22
 | 
			
		||||
  10 --- 29
 | 
			
		||||
  10 --- 34
 | 
			
		||||
  13 --- 16
 | 
			
		||||
  13 --- 17
 | 
			
		||||
  13 --- 18
 | 
			
		||||
  13 --- 19
 | 
			
		||||
  13 --- 21
 | 
			
		||||
  13 --- 23
 | 
			
		||||
  13 --- 25
 | 
			
		||||
  13 --- 26
 | 
			
		||||
  13 --- 27
 | 
			
		||||
  13 --- 28
 | 
			
		||||
  13 --- 30
 | 
			
		||||
  13 --- 31
 | 
			
		||||
  13 --- 32
 | 
			
		||||
  13 --- 33
 | 
			
		||||
  14 --- 20
 | 
			
		||||
  14 --- 22
 | 
			
		||||
  14 --- 24
 | 
			
		||||
  14 --- 29
 | 
			
		||||
  14 --- 34
 | 
			
		||||
  16 --- 26
 | 
			
		||||
  16 --- 31
 | 
			
		||||
  32 <--x 16
 | 
			
		||||
  17 --- 27
 | 
			
		||||
  17 --- 32
 | 
			
		||||
  33 <--x 17
 | 
			
		||||
  18 --- 25
 | 
			
		||||
  18 --- 30
 | 
			
		||||
  31 <--x 18
 | 
			
		||||
  19 --- 28
 | 
			
		||||
  30 <--x 19
 | 
			
		||||
  19 --- 33
 | 
			
		||||
  20 --- 29
 | 
			
		||||
  20 --- 34
 | 
			
		||||
  25 <--x 23
 | 
			
		||||
  26 <--x 23
 | 
			
		||||
  27 <--x 23
 | 
			
		||||
  28 <--x 23
 | 
			
		||||
  29 <--x 24
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										1258
									
								
								rust/kcl-lib/tests/subtract_with_pattern/ast.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1258
									
								
								rust/kcl-lib/tests/subtract_with_pattern/ast.snap
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										22
									
								
								rust/kcl-lib/tests/subtract_with_pattern/input.kcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								rust/kcl-lib/tests/subtract_with_pattern/input.kcl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
sketch001 = startSketchOn(XY)
 | 
			
		||||
profile001 = startProfile(sketch001, at = [2.65, 12.2])
 | 
			
		||||
    |> xLine(length = 23.49)
 | 
			
		||||
    |> yLine(length = -22.68)
 | 
			
		||||
    |> xLine(length = -24.2)
 | 
			
		||||
    |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
 | 
			
		||||
    |> close()
 | 
			
		||||
 | 
			
		||||
extrude001  = extrude(profile001, length = 500)
 | 
			
		||||
 | 
			
		||||
sketch002   = startSketchOn(XZ)
 | 
			
		||||
profile002  = circle(sketch002, center = [17.5, 22.02], radius = 10.16)
 | 
			
		||||
 | 
			
		||||
extrude002  = extrude(profile002, length = 50)
 | 
			
		||||
myPatterns  = patternLinear3d(extrude002,
 | 
			
		||||
                              instances = 10,
 | 
			
		||||
                              distance  = 30,
 | 
			
		||||
                              axis      = [0,0,1])
 | 
			
		||||
 | 
			
		||||
subtract([extrude001], tools = [myPatterns])
 | 
			
		||||
 |> rotate(angle = 90, axis = [0,1,0]) // we do this to ensure the id is okay after the subtract
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										285
									
								
								rust/kcl-lib/tests/subtract_with_pattern/ops.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										285
									
								
								rust/kcl-lib/tests/subtract_with_pattern/ops.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,285 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Operations executed subtract_with_pattern.kcl
 | 
			
		||||
---
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {},
 | 
			
		||||
    "name": "startSketchOn",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "length": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 500.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "extrude",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {},
 | 
			
		||||
    "name": "startSketchOn",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "length": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 50.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "extrude",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "axis": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "ty": {
 | 
			
		||||
                "type": "Default",
 | 
			
		||||
                "len": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "angle": {
 | 
			
		||||
                  "type": "Degrees"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "ty": {
 | 
			
		||||
                "type": "Default",
 | 
			
		||||
                "len": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "angle": {
 | 
			
		||||
                  "type": "Degrees"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "ty": {
 | 
			
		||||
                "type": "Default",
 | 
			
		||||
                "len": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "angle": {
 | 
			
		||||
                  "type": "Degrees"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      },
 | 
			
		||||
      "distance": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 30.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      },
 | 
			
		||||
      "instances": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 10.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "patternLinear3d",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Solid",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "tools": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Array",
 | 
			
		||||
              "value": [
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "subtract",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Array",
 | 
			
		||||
        "value": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "artifactId": "[uuid]"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										1706
									
								
								rust/kcl-lib/tests/subtract_with_pattern/program_memory.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1706
									
								
								rust/kcl-lib/tests/subtract_with_pattern/program_memory.snap
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								rust/kcl-lib/tests/subtract_with_pattern/rendered_model.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								rust/kcl-lib/tests/subtract_with_pattern/rendered_model.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 39 KiB  | 
							
								
								
									
										27
									
								
								rust/kcl-lib/tests/subtract_with_pattern/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								rust/kcl-lib/tests/subtract_with_pattern/unparsed.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Result of unparsing subtract_with_pattern.kcl
 | 
			
		||||
---
 | 
			
		||||
sketch001 = startSketchOn(XY)
 | 
			
		||||
profile001 = startProfile(sketch001, at = [2.65, 12.2])
 | 
			
		||||
  |> xLine(length = 23.49)
 | 
			
		||||
  |> yLine(length = -22.68)
 | 
			
		||||
  |> xLine(length = -24.2)
 | 
			
		||||
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
extrude001 = extrude(profile001, length = 500)
 | 
			
		||||
 | 
			
		||||
sketch002 = startSketchOn(XZ)
 | 
			
		||||
profile002 = circle(sketch002, center = [17.5, 22.02], radius = 10.16)
 | 
			
		||||
 | 
			
		||||
extrude002 = extrude(profile002, length = 50)
 | 
			
		||||
myPatterns = patternLinear3d(
 | 
			
		||||
  extrude002,
 | 
			
		||||
  instances = 10,
 | 
			
		||||
  distance = 30,
 | 
			
		||||
  axis = [0, 0, 1],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
subtract([extrude001], tools = [myPatterns])
 | 
			
		||||
  |> rotate(angle = 90, axis = [0, 1, 0]) // we do this to ensure the id is okay after the subtract
 | 
			
		||||
@ -0,0 +1,591 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Artifact commands subtract_with_pattern_cut_thru.kcl
 | 
			
		||||
---
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "edge_lines_visible",
 | 
			
		||||
      "hidden": false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_visible",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "hidden": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_visible",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "hidden": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "make_plane",
 | 
			
		||||
      "origin": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "x_axis": {
 | 
			
		||||
        "x": 1.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "y_axis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "size": 60.0,
 | 
			
		||||
      "clobber": false,
 | 
			
		||||
      "hide": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "move_path_pen",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "to": {
 | 
			
		||||
        "x": 2.65,
 | 
			
		||||
        "y": 12.2,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "start_path"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": 23.49,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": 0.0,
 | 
			
		||||
          "y": -22.68,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": -24.2,
 | 
			
		||||
          "y": 0.0,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": true
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "line",
 | 
			
		||||
        "end": {
 | 
			
		||||
          "x": 2.65,
 | 
			
		||||
          "y": 12.2,
 | 
			
		||||
          "z": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": false
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "close_path",
 | 
			
		||||
      "path_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extrude",
 | 
			
		||||
      "target": "[uuid]",
 | 
			
		||||
      "distance": 500.0,
 | 
			
		||||
      "faces": null,
 | 
			
		||||
      "opposite": "None"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_bring_to_front",
 | 
			
		||||
      "object_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_adjacency_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_extrusion_face_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "make_plane",
 | 
			
		||||
      "origin": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "x_axis": {
 | 
			
		||||
        "x": 1.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      },
 | 
			
		||||
      "y_axis": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": 0.0,
 | 
			
		||||
        "z": 1.0
 | 
			
		||||
      },
 | 
			
		||||
      "size": 60.0,
 | 
			
		||||
      "clobber": false,
 | 
			
		||||
      "hide": true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "close_path",
 | 
			
		||||
      "path_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": -1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extend_path",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "segment": {
 | 
			
		||||
        "type": "arc",
 | 
			
		||||
        "center": {
 | 
			
		||||
          "x": 17.5,
 | 
			
		||||
          "y": 42.02
 | 
			
		||||
        },
 | 
			
		||||
        "radius": 30.16,
 | 
			
		||||
        "start": {
 | 
			
		||||
          "unit": "degrees",
 | 
			
		||||
          "value": 0.0
 | 
			
		||||
        },
 | 
			
		||||
        "end": {
 | 
			
		||||
          "unit": "degrees",
 | 
			
		||||
          "value": 360.0
 | 
			
		||||
        },
 | 
			
		||||
        "relative": false
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "move_path_pen",
 | 
			
		||||
      "path": "[uuid]",
 | 
			
		||||
      "to": {
 | 
			
		||||
        "x": 47.66,
 | 
			
		||||
        "y": 42.02,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "start_path"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "enable_sketch_mode",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "ortho": false,
 | 
			
		||||
      "animated": false,
 | 
			
		||||
      "adjust_camera": false,
 | 
			
		||||
      "planar_normal": {
 | 
			
		||||
        "x": 0.0,
 | 
			
		||||
        "y": -1.0,
 | 
			
		||||
        "z": 0.0
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "extrude",
 | 
			
		||||
      "target": "[uuid]",
 | 
			
		||||
      "distance": 50.0,
 | 
			
		||||
      "faces": null,
 | 
			
		||||
      "opposite": "None"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "object_bring_to_front",
 | 
			
		||||
      "object_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "sketch_mode_disable"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_adjacency_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "solid3d_get_extrusion_face_info",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "edge_id": "[uuid]"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "set_object_transform",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "transforms": [
 | 
			
		||||
        {
 | 
			
		||||
          "translate": {
 | 
			
		||||
            "property": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 30.0,
 | 
			
		||||
              "z": 0.0
 | 
			
		||||
            },
 | 
			
		||||
            "set": false,
 | 
			
		||||
            "is_local": true
 | 
			
		||||
          },
 | 
			
		||||
          "rotate_rpy": null,
 | 
			
		||||
          "rotate_angle_axis": null,
 | 
			
		||||
          "scale": null
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "entity_linear_pattern_transform",
 | 
			
		||||
      "entity_id": "[uuid]",
 | 
			
		||||
      "transform": [],
 | 
			
		||||
      "transforms": [
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 80.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 160.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 240.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        [
 | 
			
		||||
          {
 | 
			
		||||
            "translate": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 0.0,
 | 
			
		||||
              "z": 320.0
 | 
			
		||||
            },
 | 
			
		||||
            "scale": {
 | 
			
		||||
              "x": 1.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 1.0
 | 
			
		||||
            },
 | 
			
		||||
            "rotation": {
 | 
			
		||||
              "axis": {
 | 
			
		||||
                "x": 0.0,
 | 
			
		||||
                "y": 0.0,
 | 
			
		||||
                "z": 1.0
 | 
			
		||||
              },
 | 
			
		||||
              "angle": {
 | 
			
		||||
                "unit": "degrees",
 | 
			
		||||
                "value": 0.0
 | 
			
		||||
              },
 | 
			
		||||
              "origin": {
 | 
			
		||||
                "type": "local"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            "replicate": true
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "boolean_subtract",
 | 
			
		||||
      "target_ids": [
 | 
			
		||||
        "[uuid]"
 | 
			
		||||
      ],
 | 
			
		||||
      "tool_ids": [
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]",
 | 
			
		||||
        "[uuid]"
 | 
			
		||||
      ],
 | 
			
		||||
      "tolerance": 0.0000001
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "cmdId": "[uuid]",
 | 
			
		||||
    "range": [],
 | 
			
		||||
    "command": {
 | 
			
		||||
      "type": "set_object_transform",
 | 
			
		||||
      "object_id": "[uuid]",
 | 
			
		||||
      "transforms": [
 | 
			
		||||
        {
 | 
			
		||||
          "translate": null,
 | 
			
		||||
          "rotate_rpy": null,
 | 
			
		||||
          "rotate_angle_axis": {
 | 
			
		||||
            "property": {
 | 
			
		||||
              "x": 0.0,
 | 
			
		||||
              "y": 1.0,
 | 
			
		||||
              "z": 0.0,
 | 
			
		||||
              "w": 90.0
 | 
			
		||||
            },
 | 
			
		||||
            "set": false,
 | 
			
		||||
            "is_local": true
 | 
			
		||||
          },
 | 
			
		||||
          "scale": null
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@ -0,0 +1,6 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Artifact graph flowchart subtract_with_pattern_cut_thru.kcl
 | 
			
		||||
extension: md
 | 
			
		||||
snapshot_kind: binary
 | 
			
		||||
---
 | 
			
		||||
@ -0,0 +1,135 @@
 | 
			
		||||
```mermaid
 | 
			
		||||
flowchart LR
 | 
			
		||||
  subgraph path3 [Path]
 | 
			
		||||
    3["Path<br>[43, 85, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
 | 
			
		||||
    5["Segment<br>[93, 114, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }]
 | 
			
		||||
    6["Segment<br>[122, 144, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }]
 | 
			
		||||
    7["Segment<br>[152, 173, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }]
 | 
			
		||||
    8["Segment<br>[181, 237, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }]
 | 
			
		||||
    9["Segment<br>[245, 252, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }]
 | 
			
		||||
    12[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  subgraph path4 [Path]
 | 
			
		||||
    4["Path<br>[349, 406, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
    10["Segment<br>[349, 406, 0]"]
 | 
			
		||||
      %% [ProgramBodyItem { index: 4 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
    11[Solid2d]
 | 
			
		||||
  end
 | 
			
		||||
  1["Plane<br>[12, 29, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  2["Plane<br>[317, 334, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 3 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  13["Sweep Extrusion<br>[268, 301, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit]
 | 
			
		||||
  14["Sweep Extrusion<br>[422, 454, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
 | 
			
		||||
  15["CompositeSolid Subtract<br>[686, 730, 0]"]
 | 
			
		||||
    %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }]
 | 
			
		||||
  16[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  17[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  18[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  19[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  20[Wall]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  21["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  22["Cap Start"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  23["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  24["Cap End"]
 | 
			
		||||
    %% face_code_ref=Missing NodePath
 | 
			
		||||
  25["SweepEdge Opposite"]
 | 
			
		||||
  26["SweepEdge Opposite"]
 | 
			
		||||
  27["SweepEdge Opposite"]
 | 
			
		||||
  28["SweepEdge Opposite"]
 | 
			
		||||
  29["SweepEdge Opposite"]
 | 
			
		||||
  30["SweepEdge Adjacent"]
 | 
			
		||||
  31["SweepEdge Adjacent"]
 | 
			
		||||
  32["SweepEdge Adjacent"]
 | 
			
		||||
  33["SweepEdge Adjacent"]
 | 
			
		||||
  34["SweepEdge Adjacent"]
 | 
			
		||||
  1 --- 3
 | 
			
		||||
  2 --- 4
 | 
			
		||||
  3 --- 5
 | 
			
		||||
  3 --- 6
 | 
			
		||||
  3 --- 7
 | 
			
		||||
  3 --- 8
 | 
			
		||||
  3 --- 9
 | 
			
		||||
  3 --- 12
 | 
			
		||||
  3 ---- 13
 | 
			
		||||
  3 --- 15
 | 
			
		||||
  4 --- 10
 | 
			
		||||
  4 --- 11
 | 
			
		||||
  4 ---- 14
 | 
			
		||||
  4 --- 15
 | 
			
		||||
  5 --- 19
 | 
			
		||||
  5 x--> 21
 | 
			
		||||
  5 --- 28
 | 
			
		||||
  5 --- 33
 | 
			
		||||
  6 --- 17
 | 
			
		||||
  6 x--> 21
 | 
			
		||||
  6 --- 27
 | 
			
		||||
  6 --- 32
 | 
			
		||||
  7 --- 16
 | 
			
		||||
  7 x--> 21
 | 
			
		||||
  7 --- 26
 | 
			
		||||
  7 --- 31
 | 
			
		||||
  8 --- 18
 | 
			
		||||
  8 x--> 21
 | 
			
		||||
  8 --- 25
 | 
			
		||||
  8 --- 30
 | 
			
		||||
  10 --- 20
 | 
			
		||||
  10 x--> 22
 | 
			
		||||
  10 --- 29
 | 
			
		||||
  10 --- 34
 | 
			
		||||
  13 --- 16
 | 
			
		||||
  13 --- 17
 | 
			
		||||
  13 --- 18
 | 
			
		||||
  13 --- 19
 | 
			
		||||
  13 --- 21
 | 
			
		||||
  13 --- 23
 | 
			
		||||
  13 --- 25
 | 
			
		||||
  13 --- 26
 | 
			
		||||
  13 --- 27
 | 
			
		||||
  13 --- 28
 | 
			
		||||
  13 --- 30
 | 
			
		||||
  13 --- 31
 | 
			
		||||
  13 --- 32
 | 
			
		||||
  13 --- 33
 | 
			
		||||
  14 --- 20
 | 
			
		||||
  14 --- 22
 | 
			
		||||
  14 --- 24
 | 
			
		||||
  14 --- 29
 | 
			
		||||
  14 --- 34
 | 
			
		||||
  16 --- 26
 | 
			
		||||
  16 --- 31
 | 
			
		||||
  32 <--x 16
 | 
			
		||||
  17 --- 27
 | 
			
		||||
  17 --- 32
 | 
			
		||||
  33 <--x 17
 | 
			
		||||
  18 --- 25
 | 
			
		||||
  18 --- 30
 | 
			
		||||
  31 <--x 18
 | 
			
		||||
  19 --- 28
 | 
			
		||||
  30 <--x 19
 | 
			
		||||
  19 --- 33
 | 
			
		||||
  20 --- 29
 | 
			
		||||
  20 --- 34
 | 
			
		||||
  25 <--x 23
 | 
			
		||||
  26 <--x 23
 | 
			
		||||
  27 <--x 23
 | 
			
		||||
  28 <--x 23
 | 
			
		||||
  29 <--x 24
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										1328
									
								
								rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ast.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1328
									
								
								rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ast.snap
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										23
									
								
								rust/kcl-lib/tests/subtract_with_pattern_cut_thru/input.kcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								rust/kcl-lib/tests/subtract_with_pattern_cut_thru/input.kcl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
sketch001 = startSketchOn(XY)
 | 
			
		||||
profile001 = startProfile(sketch001, at = [2.65, 12.2])
 | 
			
		||||
    |> xLine(length = 23.49)
 | 
			
		||||
    |> yLine(length = -22.68)
 | 
			
		||||
    |> xLine(length = -24.2)
 | 
			
		||||
    |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
 | 
			
		||||
    |> close()
 | 
			
		||||
 | 
			
		||||
extrude001  = extrude(profile001, length = 500)
 | 
			
		||||
 | 
			
		||||
sketch002   = startSketchOn(XZ)
 | 
			
		||||
profile002  = circle(sketch002, center = [17.5, 42.02], radius = 30.16)
 | 
			
		||||
 | 
			
		||||
extrude002  = extrude(profile002, length = 50)
 | 
			
		||||
                |> translate(y=30)
 | 
			
		||||
 | 
			
		||||
myPatterns  = patternLinear3d(extrude002,
 | 
			
		||||
                              instances = 5,
 | 
			
		||||
                              distance  = 80,
 | 
			
		||||
                              axis      = [0,0,1])
 | 
			
		||||
 | 
			
		||||
results = subtract([extrude001], tools = [myPatterns])
 | 
			
		||||
 |> rotate(angle = 90, axis = [0,1,0]) // we do this to ensure the id is okay after the subtract
 | 
			
		||||
							
								
								
									
										255
									
								
								rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ops.snap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										255
									
								
								rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ops.snap
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,255 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Operations executed subtract_with_pattern_cut_thru.kcl
 | 
			
		||||
---
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {},
 | 
			
		||||
    "name": "startSketchOn",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "length": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 500.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "extrude",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {},
 | 
			
		||||
    "name": "startSketchOn",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Plane",
 | 
			
		||||
        "artifact_id": "[uuid]"
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "length": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 50.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "extrude",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Sketch",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "axis": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "ty": {
 | 
			
		||||
                "type": "Default",
 | 
			
		||||
                "len": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "angle": {
 | 
			
		||||
                  "type": "Degrees"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 0.0,
 | 
			
		||||
              "ty": {
 | 
			
		||||
                "type": "Default",
 | 
			
		||||
                "len": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "angle": {
 | 
			
		||||
                  "type": "Degrees"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Number",
 | 
			
		||||
              "value": 1.0,
 | 
			
		||||
              "ty": {
 | 
			
		||||
                "type": "Default",
 | 
			
		||||
                "len": {
 | 
			
		||||
                  "type": "Mm"
 | 
			
		||||
                },
 | 
			
		||||
                "angle": {
 | 
			
		||||
                  "type": "Degrees"
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      },
 | 
			
		||||
      "distance": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 80.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      },
 | 
			
		||||
      "instances": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Number",
 | 
			
		||||
          "value": 5.0,
 | 
			
		||||
          "ty": {
 | 
			
		||||
            "type": "Default",
 | 
			
		||||
            "len": {
 | 
			
		||||
              "type": "Mm"
 | 
			
		||||
            },
 | 
			
		||||
            "angle": {
 | 
			
		||||
              "type": "Degrees"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "patternLinear3d",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Solid",
 | 
			
		||||
        "value": {
 | 
			
		||||
          "artifactId": "[uuid]"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "labeledArgs": {
 | 
			
		||||
      "tools": {
 | 
			
		||||
        "value": {
 | 
			
		||||
          "type": "Array",
 | 
			
		||||
          "value": [
 | 
			
		||||
            {
 | 
			
		||||
              "type": "Array",
 | 
			
		||||
              "value": [
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  "type": "Solid",
 | 
			
		||||
                  "value": {
 | 
			
		||||
                    "artifactId": "[uuid]"
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              ]
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "sourceRange": []
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "name": "subtract",
 | 
			
		||||
    "sourceRange": [],
 | 
			
		||||
    "type": "StdLibCall",
 | 
			
		||||
    "unlabeledArg": {
 | 
			
		||||
      "value": {
 | 
			
		||||
        "type": "Array",
 | 
			
		||||
        "value": [
 | 
			
		||||
          {
 | 
			
		||||
            "type": "Solid",
 | 
			
		||||
            "value": {
 | 
			
		||||
              "artifactId": "[uuid]"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "sourceRange": []
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 31 KiB  | 
@ -0,0 +1,29 @@
 | 
			
		||||
---
 | 
			
		||||
source: kcl-lib/src/simulation_tests.rs
 | 
			
		||||
description: Result of unparsing subtract_with_pattern_cut_thru.kcl
 | 
			
		||||
---
 | 
			
		||||
sketch001 = startSketchOn(XY)
 | 
			
		||||
profile001 = startProfile(sketch001, at = [2.65, 12.2])
 | 
			
		||||
  |> xLine(length = 23.49)
 | 
			
		||||
  |> yLine(length = -22.68)
 | 
			
		||||
  |> xLine(length = -24.2)
 | 
			
		||||
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
 | 
			
		||||
  |> close()
 | 
			
		||||
 | 
			
		||||
extrude001 = extrude(profile001, length = 500)
 | 
			
		||||
 | 
			
		||||
sketch002 = startSketchOn(XZ)
 | 
			
		||||
profile002 = circle(sketch002, center = [17.5, 42.02], radius = 30.16)
 | 
			
		||||
 | 
			
		||||
extrude002 = extrude(profile002, length = 50)
 | 
			
		||||
  |> translate(y = 30)
 | 
			
		||||
 | 
			
		||||
myPatterns = patternLinear3d(
 | 
			
		||||
  extrude002,
 | 
			
		||||
  instances = 5,
 | 
			
		||||
  distance = 80,
 | 
			
		||||
  axis = [0, 0, 1],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
results = subtract([extrude001], tools = [myPatterns])
 | 
			
		||||
  |> rotate(angle = 90, axis = [0, 1, 0]) // we do this to ensure the id is okay after the subtract
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-python-bindings"
 | 
			
		||||
version = "0.3.73"
 | 
			
		||||
version = "0.3.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
repository = "https://github.com/kittycad/modeling-app"
 | 
			
		||||
exclude = ["tests/*", "files/*", "venv/*"]
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-test-server"
 | 
			
		||||
description = "A test server for KCL"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
license = "MIT"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-to-core"
 | 
			
		||||
description = "Utility methods to convert kcl to engine core executable tests"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
license = "MIT"
 | 
			
		||||
repository = "https://github.com/KittyCAD/modeling-app"
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "kcl-wasm-lib"
 | 
			
		||||
version = "0.1.73"
 | 
			
		||||
version = "0.1.74"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
repository = "https://github.com/KittyCAD/modeling-app"
 | 
			
		||||
rust-version = "1.83"
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user