fix cache and imports (#6647)

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* fix clippy

Signed-off-by: Jess Frazelle <github@jessfraz.com>

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
Jess Frazelle
2025-05-02 10:41:14 -07:00
committed by GitHub
parent 09ebb517d9
commit ace9a59a45
43 changed files with 4205 additions and 3916 deletions

View File

@ -12,7 +12,7 @@ to other modules.
```kcl
// util.kcl
export fn increment(@x) {
export fn increment(x) {
return x + 1
}
```
@ -37,11 +37,11 @@ Multiple functions can be exported in a file.
```kcl
// util.kcl
export fn increment(@x) {
export fn increment(x) {
return x + 1
}
export fn decrement(@x) {
export fn decrement(x) {
return x - 1
}
```
@ -81,7 +81,7 @@ fn cube(center) {
|> extrude(length = 10)
}
myCube = cube(center = [0, 0])
myCube = cube([0, 0])
```
*Pros*

View File

@ -249,8 +249,8 @@ fn rect(origin) {
|> close()
}
rect(origin = [0, 0])
rect(origin = [20, 0])
rect([0, 0])
rect([20, 0])
```
Those tags would only be available in the `rect` function and not globally.
@ -279,8 +279,8 @@ fn rect(origin) {
|> close()
}
rect(origin = [0, 0])
myRect = rect(origin = [20, 0])
rect([0, 0])
myRect = rect([20, 0])
myRect
|> extrude(length = 10)

View File

@ -474,3 +474,79 @@ extrude(profile001, length = 100)
result.first().unwrap();
result.last().unwrap();
}
#[cfg(feature = "artifact-graph")]
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_cache_multi_file_other_file_only_change() {
let code = r#"import "toBeImported.kcl" as importedCube
importedCube
sketch001 = startSketchOn(XZ)
profile001 = startProfile(sketch001, at = [-134.53, -56.17])
|> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|> close()
extrude001 = extrude(profile001, length = 100)
sketch003 = startSketchOn(extrude001, face = seg02)
sketch002 = startSketchOn(extrude001, face = seg01)
"#;
let other_file = (
std::path::PathBuf::from("toBeImported.kcl"),
r#"sketch001 = startSketchOn(XZ)
profile001 = startProfile(sketch001, at = [281.54, 305.81])
|> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude(profile001, length = 100)
"#
.to_string(),
);
let other_file2 = (
std::path::PathBuf::from("toBeImported.kcl"),
r#"sketch001 = startSketchOn(XZ)
profile001 = startProfile(sketch001, at = [281.54, 305.81])
|> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude(profile001, length = 100)
|> translate(z = 100)
"#
.to_string(),
);
let result = cache_test(
"multi_file_other_file_only_change",
vec![
Variation {
code,
other_files: vec![other_file],
settings: &Default::default(),
},
Variation {
code,
other_files: vec![other_file2],
settings: &Default::default(),
},
],
)
.await;
let r1 = result.first().unwrap();
let r2 = result.last().unwrap();
assert!(r1.1 != r2.1, "The images should be different");
// Make sure the outcomes are different.
assert!(
r1.2.artifact_graph != r2.2.artifact_graph,
"The outcomes artifact graphs should be different"
);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -80,6 +80,15 @@ pub(super) enum CacheResult {
/// The program that needs to be executed.
program: Node<Program>,
},
/// Check only the imports, and not the main program.
/// Before sending this we already checked the main program and it is the same.
/// And we made sure the import statements > 0.
CheckImportsOnly {
/// Argument is whether we need to reapply settings.
reapply_settings: bool,
/// The ast of the main file, which did not change.
ast: Node<Program>,
},
/// Argument is whether we need to reapply settings.
NoAction(bool),
}
@ -105,9 +114,21 @@ pub(super) async fn get_changed_program(old: CacheInformation<'_>, new: CacheInf
// If the ASTs are the EXACT same we return None.
// We don't even need to waste time computing the digests.
if old.ast == new.ast {
// First we need to make sure an imported file didn't change it's ast.
// We know they have the same imports because the ast is the same.
// If we have no imports, we can skip this.
if !old.ast.has_import_statements() {
println!("No imports, no need to check.");
return CacheResult::NoAction(reapply_settings);
}
// Tell the CacheResult we need to check all the imports, but the main ast is the same.
return CacheResult::CheckImportsOnly {
reapply_settings,
ast: old.ast.clone(),
};
}
// We have to clone just because the digests are stored inline :-(
let mut old_ast = old.ast.clone();
let mut new_ast = new.ast.clone();
@ -119,9 +140,21 @@ pub(super) async fn get_changed_program(old: CacheInformation<'_>, new: CacheInf
// Check if the digest is the same.
if old_ast.digest == new_ast.digest {
// First we need to make sure an imported file didn't change it's ast.
// We know they have the same imports because the ast is the same.
// If we have no imports, we can skip this.
if !old.ast.has_import_statements() {
println!("No imports, no need to check.");
return CacheResult::NoAction(reapply_settings);
}
// Tell the CacheResult we need to check all the imports, but the main ast is the same.
return CacheResult::CheckImportsOnly {
reapply_settings,
ast: old.ast.clone(),
};
}
// Check if the annotations are different.
if !old_ast
.inner_attrs
@ -242,6 +275,8 @@ fn generate_changed_program(old_ast: Node<Program>, mut new_ast: Node<Program>,
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use super::*;
use crate::execution::{parse_execute, parse_execute_with_project_dir, ExecTestResults};
@ -658,6 +693,92 @@ extrude(profile001, length = 100)"#
)
.await;
assert_eq!(result, CacheResult::NoAction(false));
let CacheResult::CheckImportsOnly { reapply_settings, .. } = result else {
panic!("Expected CheckImportsOnly, got {:?}", result);
};
assert_eq!(reapply_settings, false);
}
#[tokio::test(flavor = "multi_thread")]
async fn test_cache_multi_file_only_other_file_changes_should_reexecute() {
let code = r#"import "toBeImported.kcl" as importedCube
importedCube
sketch001 = startSketchOn(XZ)
profile001 = startProfile(sketch001, at = [-134.53, -56.17])
|> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|> close()
extrude001 = extrude(profile001, length = 100)
sketch003 = startSketchOn(extrude001, face = seg02)
sketch002 = startSketchOn(extrude001, face = seg01)
"#;
let other_file = (
std::path::PathBuf::from("toBeImported.kcl"),
r#"sketch001 = startSketchOn(XZ)
profile001 = startProfile(sketch001, at = [281.54, 305.81])
|> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude(profile001, length = 100)"#
.to_string(),
);
let other_file2 = (
std::path::PathBuf::from("toBeImported.kcl"),
r#"sketch001 = startSketchOn(XZ)
profile001 = startProfile(sketch001, at = [281.54, 305.81])
|> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001)
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude(profile001, length = 100)
|> translate(z=100)
"#
.to_string(),
);
let tmp_dir = std::env::temp_dir();
let tmp_dir = tmp_dir.join(uuid::Uuid::new_v4().to_string());
// Create a temporary file for each of the other files.
let tmp_file = tmp_dir.join(other_file.0);
std::fs::create_dir_all(tmp_file.parent().unwrap()).unwrap();
std::fs::write(&tmp_file, other_file.1).unwrap();
let ExecTestResults { program, exec_ctxt, .. } =
parse_execute_with_project_dir(code, Some(tmp_dir)).await.unwrap();
// Change the other file.
std::fs::write(tmp_file, other_file2.1).unwrap();
let mut new_program = crate::Program::parse_no_errs(code).unwrap();
new_program.compute_digest();
let result = get_changed_program(
CacheInformation {
ast: &program.ast,
settings: &exec_ctxt.settings,
},
CacheInformation {
ast: &new_program.ast,
settings: &exec_ctxt.settings,
},
)
.await;
let CacheResult::CheckImportsOnly { reapply_settings, .. } = result else {
panic!("Expected CheckImportsOnly, got {:?}", result);
};
assert_eq!(reapply_settings, false);
}
}

View File

@ -2791,13 +2791,12 @@ d = b + c
let mut exec_state = ExecState::new(&exec_ctxt);
exec_ctxt
.run_concurrent(
.run(
&crate::Program {
ast: main.clone(),
original_file_contents: "".to_owned(),
},
&mut exec_state,
false,
)
.await
.unwrap();

View File

@ -42,6 +42,7 @@ use crate::{
parsing::ast::types::{Expr, ImportPath, NodeRef},
source_range::SourceRange,
std::StdLib,
walk::{Universe, UniverseMap},
CompilationError, ExecError, KclErrorWithOutputs,
};
@ -586,7 +587,7 @@ impl ExecutorContext {
pub async fn run_with_caching(&self, program: crate::Program) -> Result<ExecOutcome, KclErrorWithOutputs> {
assert!(!self.is_mock());
let (program, mut exec_state, preserve_mem) = if let Some(OldAstState {
let (program, mut exec_state, preserve_mem, imports_info) = if let Some(OldAstState {
ast: old_ast,
exec_state: mut old_state,
settings: old_settings,
@ -603,7 +604,7 @@ impl ExecutorContext {
};
// Get the program that actually changed from the old and new information.
let (clear_scene, program) = match cache::get_changed_program(old, new).await {
let (clear_scene, program, import_check_info) = match cache::get_changed_program(old, new).await {
CacheResult::ReExecute {
clear_scene,
reapply_settings,
@ -616,7 +617,7 @@ impl ExecutorContext {
.await
.is_err()
{
(true, program)
(true, program, None)
} else {
(
clear_scene,
@ -624,6 +625,52 @@ impl ExecutorContext {
ast: changed_program,
original_file_contents: program.original_file_contents,
},
None,
)
}
}
CacheResult::CheckImportsOnly {
reapply_settings,
ast: changed_program,
} => {
if reapply_settings
&& self
.engine
.reapply_settings(&self.settings, Default::default(), old_state.id_generator())
.await
.is_err()
{
(true, program, None)
} else {
// We need to check our imports to see if they changed.
let mut new_exec_state = ExecState::new(self);
let (new_universe, new_universe_map) = self.get_universe(&program, &mut new_exec_state).await?;
let mut clear_scene = false;
let mut keys = new_universe.keys().clone().collect::<Vec<_>>();
keys.sort();
for key in keys {
let (_, id, _, _) = &new_universe[key];
let old_source = old_state.get_source(*id);
let new_source = new_exec_state.get_source(*id);
if old_source != new_source {
clear_scene = true;
break;
}
}
(
clear_scene,
crate::Program {
ast: changed_program,
original_file_contents: program.original_file_contents,
},
// We only care about this if we are clearing the scene.
if clear_scene {
Some((new_universe, new_universe_map, new_exec_state))
} else {
None
},
)
}
}
@ -646,7 +693,7 @@ impl ExecutorContext {
let outcome = old_state.to_exec_outcome(result_env).await;
return Ok(outcome);
}
(true, program)
(true, program, None)
}
CacheResult::NoAction(false) => {
let outcome = old_state.to_exec_outcome(result_env).await;
@ -654,34 +701,42 @@ impl ExecutorContext {
}
};
let (exec_state, preserve_mem) = if clear_scene {
let (exec_state, preserve_mem, universe_info) =
if let Some((new_universe, new_universe_map, mut new_exec_state)) = import_check_info {
// Clear the scene if the imports changed.
self.send_clear_scene(&mut new_exec_state, Default::default())
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
(new_exec_state, false, Some((new_universe, new_universe_map)))
} else if clear_scene {
// Pop the execution state, since we are starting fresh.
let mut exec_state = old_state;
exec_state.reset(self);
// We don't do this in mock mode since there is no engine connection
// anyways and from the TS side we override memory and don't want to clear it.
self.send_clear_scene(&mut exec_state, Default::default())
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
(exec_state, false)
(exec_state, false, None)
} else {
old_state.mut_stack().restore_env(result_env);
(old_state, true)
(old_state, true, None)
};
(program, exec_state, preserve_mem)
(program, exec_state, preserve_mem, universe_info)
} else {
let mut exec_state = ExecState::new(self);
self.send_clear_scene(&mut exec_state, Default::default())
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
(program, exec_state, false)
(program, exec_state, false, None)
};
let result = self.run_concurrent(&program, &mut exec_state, preserve_mem).await;
let result = self
.run_concurrent(&program, &mut exec_state, imports_info, preserve_mem)
.await;
if result.is_err() {
cache::bust_cache().await;
@ -714,7 +769,7 @@ impl ExecutorContext {
program: &crate::Program,
exec_state: &mut ExecState,
) -> Result<(EnvironmentRef, Option<ModelingSessionData>), KclErrorWithOutputs> {
self.run_concurrent(program, exec_state, false).await
self.run_concurrent(program, exec_state, None, false).await
}
/// Perform the execution of a program using a concurrent
@ -728,47 +783,24 @@ impl ExecutorContext {
&self,
program: &crate::Program,
exec_state: &mut ExecState,
universe_info: Option<(Universe, UniverseMap)>,
preserve_mem: bool,
) -> Result<(EnvironmentRef, Option<ModelingSessionData>), KclErrorWithOutputs> {
exec_state.add_root_module_contents(program);
// Reuse our cached universe if we have one.
#[allow(unused_variables)]
let (universe, universe_map) = if let Some((universe, universe_map)) = universe_info {
(universe, universe_map)
} else {
self.get_universe(program, exec_state).await?
};
let default_planes = self.engine.get_default_planes().read().await.clone();
// Run the prelude to set up the engine.
self.eval_prelude(exec_state, SourceRange::synthetic())
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
let mut universe = std::collections::HashMap::new();
let default_planes = self.engine.get_default_planes().read().await.clone();
#[cfg_attr(not(feature = "artifact-graph"), expect(unused_variables))]
let root_imports = crate::walk::import_universe(
self,
&ModuleRepr::Kcl(program.ast.clone(), None),
&mut universe,
exec_state,
)
.await
.map_err(|err| {
println!("Error: {err:?}");
let module_id_to_module_path: IndexMap<ModuleId, ModulePath> = exec_state
.global
.path_to_source_id
.iter()
.map(|(k, v)| ((*v), k.clone()))
.collect();
KclErrorWithOutputs::new(
err,
#[cfg(feature = "artifact-graph")]
exec_state.global.operations.clone(),
#[cfg(feature = "artifact-graph")]
exec_state.global.artifact_commands.clone(),
#[cfg(feature = "artifact-graph")]
exec_state.global.artifact_graph.clone(),
module_id_to_module_path,
exec_state.global.id_to_source.clone(),
default_planes.clone(),
)
})?;
for modules in crate::walk::import_graph(&universe, self)
.map_err(|err| {
let module_id_to_module_path: IndexMap<ModuleId, ModulePath> = exec_state
@ -821,7 +853,7 @@ impl ExecutorContext {
ModulePath::Local { value, .. } => {
// We only want to display the top-level module imports in
// the Feature Tree, not transitive imports.
if root_imports.contains_key(value) {
if universe_map.contains_key(value) {
exec_state.global.operations.push(Operation::GroupBegin {
group: Group::ModuleInstance {
name: value.file_name().unwrap_or_default().to_string_lossy().into_owned(),
@ -974,6 +1006,52 @@ impl ExecutorContext {
self.inner_run(program, exec_state, preserve_mem).await
}
/// Get the universe & universe map of the program.
/// And see if any of the imports changed.
async fn get_universe(
&self,
program: &crate::Program,
exec_state: &mut ExecState,
) -> Result<(Universe, UniverseMap), KclErrorWithOutputs> {
exec_state.add_root_module_contents(program);
let mut universe = std::collections::HashMap::new();
let default_planes = self.engine.get_default_planes().read().await.clone();
let root_imports = crate::walk::import_universe(
self,
&ModuleRepr::Kcl(program.ast.clone(), None),
&mut universe,
exec_state,
)
.await
.map_err(|err| {
println!("Error: {err:?}");
let module_id_to_module_path: IndexMap<ModuleId, ModulePath> = exec_state
.global
.path_to_source_id
.iter()
.map(|(k, v)| ((*v), k.clone()))
.collect();
KclErrorWithOutputs::new(
err,
#[cfg(feature = "artifact-graph")]
exec_state.global.operations.clone(),
#[cfg(feature = "artifact-graph")]
exec_state.global.artifact_commands.clone(),
#[cfg(feature = "artifact-graph")]
exec_state.global.artifact_graph.clone(),
module_id_to_module_path,
exec_state.global.id_to_source.clone(),
default_planes,
)
})?;
Ok((universe, root_imports))
}
/// Perform the execution of a program. Accept all possible parameters and
/// output everything.
async fn inner_run(

View File

@ -238,6 +238,10 @@ impl ExecState {
self.global.id_to_source.insert(id, source.clone());
}
pub(super) fn get_source(&self, id: ModuleId) -> Option<&ModuleSource> {
self.global.id_to_source.get(&id)
}
pub(super) fn add_module(&mut self, id: ModuleId, path: ModulePath, repr: ModuleRepr) {
debug_assert!(self.global.path_to_source_id.contains_key(&path));
let module_info = ModuleInfo { id, repr, path };

View File

@ -542,6 +542,16 @@ impl Program {
}
}
/// Checks if the ast has any import statements.
pub fn has_import_statements(&self) -> bool {
for item in &self.body {
if let BodyItem::ImportStatement(_) = item {
return true;
}
}
false
}
pub fn in_comment(&self, pos: usize) -> bool {
// Check if its in the body.
if self.non_code_meta.in_comment(pos) {

View File

@ -21,8 +21,9 @@ type Dependency = (String, String);
type Graph = Vec<Dependency>;
type DependencyInfo = (AstNode<ImportStatement>, ModuleId, ModulePath, ModuleRepr);
type Universe = HashMap<String, DependencyInfo>;
pub(crate) type DependencyInfo = (AstNode<ImportStatement>, ModuleId, ModulePath, ModuleRepr);
pub(crate) type UniverseMap = HashMap<PathBuf, AstNode<ImportStatement>>;
pub(crate) type Universe = HashMap<String, DependencyInfo>;
/// Process a number of programs, returning the graph of dependencies.
///
@ -184,7 +185,7 @@ pub(crate) async fn import_universe(
repr: &ModuleRepr,
out: &mut Universe,
exec_state: &mut ExecState,
) -> Result<HashMap<PathBuf, crate::parsing::ast::types::Node<ImportStatement>>, KclError> {
) -> Result<UniverseMap, KclError> {
let modules = import_dependencies(repr, ctx)?;
let mut module_imports = HashMap::new();
for (filename, import_stmt, module_path) in modules {

View File

@ -9,4 +9,4 @@ pub use ast_node::Node;
pub use ast_visitor::Visitable;
pub use ast_walk::walk;
pub use import_graph::import_graph;
pub(crate) use import_graph::import_universe;
pub(crate) use import_graph::{import_universe, Universe, UniverseMap};

View File

@ -1,27 +1,27 @@
```mermaid
flowchart LR
subgraph path3 [Path]
3["Path<br>[74, 114, 8]"]
5["Segment<br>[120, 137, 8]"]
6["Segment<br>[143, 161, 8]"]
7["Segment<br>[167, 185, 8]"]
8["Segment<br>[191, 247, 8]"]
9["Segment<br>[253, 260, 8]"]
3["Path<br>[74, 114, 1]"]
5["Segment<br>[120, 137, 1]"]
6["Segment<br>[143, 161, 1]"]
7["Segment<br>[167, 185, 1]"]
8["Segment<br>[191, 247, 1]"]
9["Segment<br>[253, 260, 1]"]
15[Solid2d]
end
subgraph path4 [Path]
4["Path<br>[74, 112, 9]"]
10["Segment<br>[118, 135, 9]"]
11["Segment<br>[141, 159, 9]"]
12["Segment<br>[165, 183, 9]"]
13["Segment<br>[189, 245, 9]"]
14["Segment<br>[251, 258, 9]"]
4["Path<br>[74, 112, 2]"]
10["Segment<br>[118, 135, 2]"]
11["Segment<br>[141, 159, 2]"]
12["Segment<br>[165, 183, 2]"]
13["Segment<br>[189, 245, 2]"]
14["Segment<br>[251, 258, 2]"]
16[Solid2d]
end
1["Plane<br>[47, 64, 8]"]
2["Plane<br>[47, 64, 9]"]
17["Sweep Extrusion<br>[266, 288, 8]"]
18["Sweep Extrusion<br>[264, 286, 9]"]
1["Plane<br>[47, 64, 1]"]
2["Plane<br>[47, 64, 2]"]
17["Sweep Extrusion<br>[266, 288, 1]"]
18["Sweep Extrusion<br>[264, 286, 2]"]
19[Wall]
20[Wall]
21[Wall]
@ -66,44 +66,44 @@ flowchart LR
4 --- 14
4 --- 16
4 ---- 18
5 --- 24
5 x--> 27
5 --- 37
5 --- 46
6 --- 25
6 x--> 27
6 --- 35
5 --- 25
5 x--> 28
5 --- 36
5 --- 43
6 --- 24
6 x--> 28
6 --- 37
6 --- 45
7 --- 26
7 x--> 27
7 --- 36
7 --- 23
7 x--> 28
7 --- 35
7 --- 44
8 --- 23
8 x--> 27
8 --- 26
8 x--> 28
8 --- 38
8 --- 43
8 --- 46
10 --- 19
10 x--> 28
10 x--> 27
10 --- 31
10 --- 39
10 --- 40
11 --- 22
11 x--> 28
11 --- 34
11 x--> 27
11 --- 33
11 --- 41
12 --- 21
12 x--> 28
12 x--> 27
12 --- 32
12 --- 42
12 --- 39
13 --- 20
13 x--> 28
13 --- 33
13 --- 40
13 x--> 27
13 --- 34
13 --- 42
17 --- 23
17 --- 24
17 --- 25
17 --- 26
17 --- 27
17 --- 29
17 --- 28
17 --- 30
17 --- 35
17 --- 36
17 --- 37
@ -116,8 +116,8 @@ flowchart LR
18 --- 20
18 --- 21
18 --- 22
18 --- 28
18 --- 30
18 --- 27
18 --- 29
18 --- 31
18 --- 32
18 --- 33
@ -127,35 +127,35 @@ flowchart LR
18 --- 41
18 --- 42
31 <--x 19
39 <--x 19
40 <--x 19
33 <--x 20
40 <--x 20
42 <--x 19
34 <--x 20
39 <--x 20
42 <--x 20
32 <--x 21
39 <--x 21
41 <--x 21
42 <--x 21
34 <--x 22
39 <--x 22
33 <--x 22
40 <--x 22
41 <--x 22
38 <--x 23
43 <--x 23
35 <--x 23
44 <--x 23
45 <--x 23
37 <--x 24
43 <--x 24
46 <--x 24
35 <--x 25
45 <--x 25
45 <--x 24
36 <--x 25
43 <--x 25
46 <--x 25
36 <--x 26
38 <--x 26
44 <--x 26
45 <--x 26
35 <--x 29
36 <--x 29
37 <--x 29
38 <--x 29
31 <--x 30
32 <--x 30
33 <--x 30
34 <--x 30
46 <--x 26
31 <--x 29
32 <--x 29
33 <--x 29
34 <--x 29
35 <--x 30
36 <--x 30
37 <--x 30
38 <--x 30
```

View File

@ -5,10 +5,10 @@ description: Variables in memory after executing assembly_mixed_units_cubes.kcl
{
"cubeIn": {
"type": "Module",
"value": 8
"value": 1
},
"cubeMm": {
"type": "Module",
"value": 9
"value": 2
}
}

View File

@ -1,21 +1,21 @@
```mermaid
flowchart LR
subgraph path3 [Path]
3["Path<br>[195, 230, 8]"]
5["Segment<br>[195, 230, 8]"]
7[Solid2d]
end
subgraph path4 [Path]
4["Path<br>[111, 146, 10]"]
6["Segment<br>[111, 146, 10]"]
3["Path<br>[195, 230, 1]"]
5["Segment<br>[195, 230, 1]"]
8[Solid2d]
end
1["Plane<br>[172, 189, 8]"]
2["Plane<br>[88, 105, 10]"]
subgraph path4 [Path]
4["Path<br>[111, 146, 3]"]
6["Segment<br>[111, 146, 3]"]
7[Solid2d]
end
1["Plane<br>[172, 189, 1]"]
2["Plane<br>[88, 105, 3]"]
1 --- 3
2 --- 4
3 --- 5
3 --- 7
3 --- 8
4 --- 6
4 --- 8
4 --- 7
```

View File

@ -5,10 +5,10 @@ description: Variables in memory after executing assembly_non_default_units.kcl
{
"other1": {
"type": "Module",
"value": 8
"value": 1
},
"other2": {
"type": "Module",
"value": 10
"value": 3
}
}

View File

@ -3598,7 +3598,7 @@ description: Variables in memory after executing import_async.kcl
},
"screw": {
"type": "Module",
"value": 8
"value": 1
},
"start": {
"type": "Sketch",

View File

@ -5,7 +5,7 @@ description: Variables in memory after executing import_foreign.kcl
{
"cube": {
"type": "Module",
"value": 8
"value": 1
},
"model": {
"type": "ImportedGeometry",

View File

@ -1,19 +1,19 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[75, 101, 8]"]
3["Segment<br>[107, 125, 8]"]
4["Segment<br>[131, 150, 8]"]
5["Segment<br>[156, 175, 8]"]
6["Segment<br>[181, 200, 8]"]
7["Segment<br>[206, 231, 8]"]
8["Segment<br>[237, 258, 8]"]
9["Segment<br>[264, 283, 8]"]
10["Segment<br>[289, 296, 8]"]
2["Path<br>[75, 101, 1]"]
3["Segment<br>[107, 125, 1]"]
4["Segment<br>[131, 150, 1]"]
5["Segment<br>[156, 175, 1]"]
6["Segment<br>[181, 200, 1]"]
7["Segment<br>[206, 231, 1]"]
8["Segment<br>[237, 258, 1]"]
9["Segment<br>[264, 283, 1]"]
10["Segment<br>[289, 296, 1]"]
11[Solid2d]
end
1["Plane<br>[52, 69, 8]"]
12["Sweep Revolve<br>[302, 319, 8]"]
1["Plane<br>[52, 69, 1]"]
12["Sweep Revolve<br>[302, 319, 1]"]
13[Wall]
14[Wall]
15[Wall]
@ -41,29 +41,29 @@ flowchart LR
2 --- 11
2 ---- 12
12 <--x 3
3 --- 15
3 --- 16
3 x--> 26
12 <--x 4
4 --- 18
4 --- 15
4 --- 26
12 <--x 5
5 --- 20
5 --- 22
5 --- 13
5 --- 24
12 <--x 6
6 --- 13
6 --- 24
6 --- 20
6 --- 25
12 <--x 7
7 --- 16
7 --- 21
7 --- 17
7 --- 22
12 <--x 8
8 --- 17
8 --- 23
8 --- 19
8 --- 21
12 <--x 9
9 --- 14
9 --- 27
12 <--x 10
10 --- 19
10 --- 25
10 --- 18
10 --- 23
12 --- 13
12 --- 14
12 --- 15
@ -79,18 +79,18 @@ flowchart LR
12 --- 25
12 --- 26
12 --- 27
22 <--x 13
24 <--x 13
23 <--x 14
21 <--x 14
27 <--x 14
25 <--x 15
26 <--x 15
21 <--x 16
24 <--x 16
21 <--x 17
23 <--x 17
26 <--x 18
25 <--x 19
27 <--x 19
22 <--x 20
23 <--x 16
26 <--x 16
22 <--x 17
25 <--x 17
23 <--x 18
27 <--x 18
21 <--x 19
22 <--x 19
24 <--x 20
25 <--x 20
```

View File

@ -1,11 +1,11 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[100, 136, 8]"]
3["Segment<br>[100, 136, 8]"]
2["Path<br>[100, 136, 1]"]
3["Segment<br>[100, 136, 1]"]
4[Solid2d]
end
1["Plane<br>[77, 94, 8]"]
1["Plane<br>[77, 94, 1]"]
1 --- 2
2 --- 3
2 --- 4

View File

@ -5,6 +5,6 @@ description: Variables in memory after executing import_transform.kcl
{
"screw": {
"type": "Module",
"value": 8
"value": 1
}
}

View File

@ -1,6 +1,6 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Artifact graph flowchart import_whole.kcl
description: Artifact graph flowchart import_whole_simple.kcl
extension: md
snapshot_kind: binary
---

View File

@ -1,12 +1,12 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[82, 118, 8]"]
3["Segment<br>[82, 118, 8]"]
2["Path<br>[82, 118, 1]"]
3["Segment<br>[82, 118, 1]"]
4[Solid2d]
end
1["Plane<br>[59, 76, 8]"]
5["Sweep Extrusion<br>[124, 144, 8]"]
1["Plane<br>[59, 76, 1]"]
5["Sweep Extrusion<br>[124, 144, 1]"]
6[Wall]
7["Cap Start"]
8["Cap End"]

View File

@ -1,6 +1,6 @@
---
source: kcl-lib/src/simulation_tests.rs
description: Variables in memory after executing import_whole.kcl
description: Variables in memory after executing import_whole_simple.kcl
---
{
"bar": {
@ -113,6 +113,6 @@ description: Variables in memory after executing import_whole.kcl
},
"foo": {
"type": "Module",
"value": 8
"value": 1
}
}

View File

@ -1,12 +1,12 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[101, 137, 8]"]
3["Segment<br>[101, 137, 8]"]
2["Path<br>[101, 137, 1]"]
3["Segment<br>[101, 137, 1]"]
4[Solid2d]
end
1["Plane<br>[78, 95, 8]"]
5["Sweep Extrusion<br>[143, 163, 8]"]
1["Plane<br>[78, 95, 1]"]
5["Sweep Extrusion<br>[143, 163, 1]"]
6[Wall]
7["Cap Start"]
8["Cap End"]

View File

@ -113,6 +113,6 @@ description: Variables in memory after executing import_whole_transitive_import.
},
"part": {
"type": "Module",
"value": 8
"value": 1
}
}

View File

@ -5,14 +5,14 @@ description: Variables in memory after executing axial-fan.kcl
{
"fan": {
"type": "Module",
"value": 11
"value": 4
},
"fanHousing": {
"type": "Module",
"value": 8
"value": 1
},
"motor": {
"type": "Module",
"value": 10
"value": 3
}
}

View File

@ -1,235 +1,235 @@
```mermaid
flowchart LR
subgraph path24 [Path]
24["Path<br>[362, 395, 8]"]
44["Segment<br>[403, 429, 8]"]
49["Segment<br>[437, 499, 8]"]
57["Segment<br>[507, 569, 8]"]
62["Segment<br>[577, 640, 8]"]
69["Segment<br>[648, 673, 8]"]
70["Segment<br>[681, 701, 8]"]
79["Segment<br>[709, 733, 8]"]
84["Segment<br>[741, 803, 8]"]
88["Segment<br>[811, 836, 8]"]
98["Segment<br>[844, 864, 8]"]
104["Segment<br>[872, 896, 8]"]
107["Segment<br>[904, 965, 8]"]
112["Segment<br>[973, 1034, 8]"]
122["Segment<br>[1042, 1067, 8]"]
129["Segment<br>[1075, 1099, 8]"]
133["Segment<br>[1107, 1169, 8]"]
141["Segment<br>[1177, 1202, 8]"]
144["Segment<br>[1210, 1237, 8]"]
149["Segment<br>[1245, 1306, 8]"]
155["Segment<br>[1314, 1358, 8]"]
160["Segment<br>[1366, 1373, 8]"]
24["Path<br>[362, 395, 1]"]
44["Segment<br>[403, 429, 1]"]
49["Segment<br>[437, 499, 1]"]
57["Segment<br>[507, 569, 1]"]
62["Segment<br>[577, 640, 1]"]
69["Segment<br>[648, 673, 1]"]
70["Segment<br>[681, 701, 1]"]
79["Segment<br>[709, 733, 1]"]
84["Segment<br>[741, 803, 1]"]
88["Segment<br>[811, 836, 1]"]
98["Segment<br>[844, 864, 1]"]
104["Segment<br>[872, 896, 1]"]
107["Segment<br>[904, 965, 1]"]
112["Segment<br>[973, 1034, 1]"]
122["Segment<br>[1042, 1067, 1]"]
129["Segment<br>[1075, 1099, 1]"]
133["Segment<br>[1107, 1169, 1]"]
141["Segment<br>[1177, 1202, 1]"]
144["Segment<br>[1210, 1237, 1]"]
149["Segment<br>[1245, 1306, 1]"]
155["Segment<br>[1314, 1358, 1]"]
160["Segment<br>[1366, 1373, 1]"]
212[Solid2d]
end
subgraph path25 [Path]
25["Path<br>[362, 395, 8]"]
40["Segment<br>[403, 429, 8]"]
51["Segment<br>[437, 499, 8]"]
56["Segment<br>[507, 569, 8]"]
59["Segment<br>[577, 640, 8]"]
67["Segment<br>[648, 673, 8]"]
74["Segment<br>[681, 701, 8]"]
81["Segment<br>[709, 733, 8]"]
82["Segment<br>[741, 803, 8]"]
90["Segment<br>[811, 836, 8]"]
99["Segment<br>[844, 864, 8]"]
105["Segment<br>[872, 896, 8]"]
109["Segment<br>[904, 965, 8]"]
113["Segment<br>[973, 1034, 8]"]
119["Segment<br>[1042, 1067, 8]"]
124["Segment<br>[1075, 1099, 8]"]
132["Segment<br>[1107, 1169, 8]"]
140["Segment<br>[1177, 1202, 8]"]
143["Segment<br>[1210, 1237, 8]"]
150["Segment<br>[1245, 1306, 8]"]
154["Segment<br>[1314, 1358, 8]"]
164["Segment<br>[1366, 1373, 8]"]
25["Path<br>[362, 395, 1]"]
40["Segment<br>[403, 429, 1]"]
51["Segment<br>[437, 499, 1]"]
56["Segment<br>[507, 569, 1]"]
59["Segment<br>[577, 640, 1]"]
67["Segment<br>[648, 673, 1]"]
74["Segment<br>[681, 701, 1]"]
81["Segment<br>[709, 733, 1]"]
82["Segment<br>[741, 803, 1]"]
90["Segment<br>[811, 836, 1]"]
99["Segment<br>[844, 864, 1]"]
105["Segment<br>[872, 896, 1]"]
109["Segment<br>[904, 965, 1]"]
113["Segment<br>[973, 1034, 1]"]
119["Segment<br>[1042, 1067, 1]"]
124["Segment<br>[1075, 1099, 1]"]
132["Segment<br>[1107, 1169, 1]"]
140["Segment<br>[1177, 1202, 1]"]
143["Segment<br>[1210, 1237, 1]"]
150["Segment<br>[1245, 1306, 1]"]
154["Segment<br>[1314, 1358, 1]"]
164["Segment<br>[1366, 1373, 1]"]
217[Solid2d]
end
subgraph path26 [Path]
26["Path<br>[362, 395, 8]"]
43["Segment<br>[403, 429, 8]"]
50["Segment<br>[437, 499, 8]"]
54["Segment<br>[507, 569, 8]"]
61["Segment<br>[577, 640, 8]"]
65["Segment<br>[648, 673, 8]"]
71["Segment<br>[681, 701, 8]"]
80["Segment<br>[709, 733, 8]"]
87["Segment<br>[741, 803, 8]"]
92["Segment<br>[811, 836, 8]"]
94["Segment<br>[844, 864, 8]"]
101["Segment<br>[872, 896, 8]"]
111["Segment<br>[904, 965, 8]"]
117["Segment<br>[973, 1034, 8]"]
123["Segment<br>[1042, 1067, 8]"]
125["Segment<br>[1075, 1099, 8]"]
134["Segment<br>[1107, 1169, 8]"]
136["Segment<br>[1177, 1202, 8]"]
147["Segment<br>[1210, 1237, 8]"]
148["Segment<br>[1245, 1306, 8]"]
156["Segment<br>[1314, 1358, 8]"]
165["Segment<br>[1366, 1373, 8]"]
26["Path<br>[362, 395, 1]"]
43["Segment<br>[403, 429, 1]"]
50["Segment<br>[437, 499, 1]"]
54["Segment<br>[507, 569, 1]"]
61["Segment<br>[577, 640, 1]"]
65["Segment<br>[648, 673, 1]"]
71["Segment<br>[681, 701, 1]"]
80["Segment<br>[709, 733, 1]"]
87["Segment<br>[741, 803, 1]"]
92["Segment<br>[811, 836, 1]"]
94["Segment<br>[844, 864, 1]"]
101["Segment<br>[872, 896, 1]"]
111["Segment<br>[904, 965, 1]"]
117["Segment<br>[973, 1034, 1]"]
123["Segment<br>[1042, 1067, 1]"]
125["Segment<br>[1075, 1099, 1]"]
134["Segment<br>[1107, 1169, 1]"]
136["Segment<br>[1177, 1202, 1]"]
147["Segment<br>[1210, 1237, 1]"]
148["Segment<br>[1245, 1306, 1]"]
156["Segment<br>[1314, 1358, 1]"]
165["Segment<br>[1366, 1373, 1]"]
218[Solid2d]
end
subgraph path27 [Path]
27["Path<br>[362, 395, 8]"]
42["Segment<br>[403, 429, 8]"]
47["Segment<br>[437, 499, 8]"]
53["Segment<br>[507, 569, 8]"]
58["Segment<br>[577, 640, 8]"]
68["Segment<br>[648, 673, 8]"]
73["Segment<br>[681, 701, 8]"]
77["Segment<br>[709, 733, 8]"]
83["Segment<br>[741, 803, 8]"]
91["Segment<br>[811, 836, 8]"]
95["Segment<br>[844, 864, 8]"]
100["Segment<br>[872, 896, 8]"]
108["Segment<br>[904, 965, 8]"]
114["Segment<br>[973, 1034, 8]"]
120["Segment<br>[1042, 1067, 8]"]
126["Segment<br>[1075, 1099, 8]"]
135["Segment<br>[1107, 1169, 8]"]
139["Segment<br>[1177, 1202, 8]"]
142["Segment<br>[1210, 1237, 8]"]
151["Segment<br>[1245, 1306, 8]"]
157["Segment<br>[1314, 1358, 8]"]
161["Segment<br>[1366, 1373, 8]"]
27["Path<br>[362, 395, 1]"]
42["Segment<br>[403, 429, 1]"]
47["Segment<br>[437, 499, 1]"]
53["Segment<br>[507, 569, 1]"]
58["Segment<br>[577, 640, 1]"]
68["Segment<br>[648, 673, 1]"]
73["Segment<br>[681, 701, 1]"]
77["Segment<br>[709, 733, 1]"]
83["Segment<br>[741, 803, 1]"]
91["Segment<br>[811, 836, 1]"]
95["Segment<br>[844, 864, 1]"]
100["Segment<br>[872, 896, 1]"]
108["Segment<br>[904, 965, 1]"]
114["Segment<br>[973, 1034, 1]"]
120["Segment<br>[1042, 1067, 1]"]
126["Segment<br>[1075, 1099, 1]"]
135["Segment<br>[1107, 1169, 1]"]
139["Segment<br>[1177, 1202, 1]"]
142["Segment<br>[1210, 1237, 1]"]
151["Segment<br>[1245, 1306, 1]"]
157["Segment<br>[1314, 1358, 1]"]
161["Segment<br>[1366, 1373, 1]"]
219[Solid2d]
end
subgraph path28 [Path]
28["Path<br>[362, 395, 8]"]
45["Segment<br>[403, 429, 8]"]
46["Segment<br>[437, 499, 8]"]
52["Segment<br>[507, 569, 8]"]
63["Segment<br>[577, 640, 8]"]
66["Segment<br>[648, 673, 8]"]
72["Segment<br>[681, 701, 8]"]
78["Segment<br>[709, 733, 8]"]
86["Segment<br>[741, 803, 8]"]
89["Segment<br>[811, 836, 8]"]
96["Segment<br>[844, 864, 8]"]
102["Segment<br>[872, 896, 8]"]
106["Segment<br>[904, 965, 8]"]
116["Segment<br>[973, 1034, 8]"]
118["Segment<br>[1042, 1067, 8]"]
128["Segment<br>[1075, 1099, 8]"]
130["Segment<br>[1107, 1169, 8]"]
137["Segment<br>[1177, 1202, 8]"]
145["Segment<br>[1210, 1237, 8]"]
152["Segment<br>[1245, 1306, 8]"]
158["Segment<br>[1314, 1358, 8]"]
162["Segment<br>[1366, 1373, 8]"]
28["Path<br>[362, 395, 1]"]
45["Segment<br>[403, 429, 1]"]
46["Segment<br>[437, 499, 1]"]
52["Segment<br>[507, 569, 1]"]
63["Segment<br>[577, 640, 1]"]
66["Segment<br>[648, 673, 1]"]
72["Segment<br>[681, 701, 1]"]
78["Segment<br>[709, 733, 1]"]
86["Segment<br>[741, 803, 1]"]
89["Segment<br>[811, 836, 1]"]
96["Segment<br>[844, 864, 1]"]
102["Segment<br>[872, 896, 1]"]
106["Segment<br>[904, 965, 1]"]
116["Segment<br>[973, 1034, 1]"]
118["Segment<br>[1042, 1067, 1]"]
128["Segment<br>[1075, 1099, 1]"]
130["Segment<br>[1107, 1169, 1]"]
137["Segment<br>[1177, 1202, 1]"]
145["Segment<br>[1210, 1237, 1]"]
152["Segment<br>[1245, 1306, 1]"]
158["Segment<br>[1314, 1358, 1]"]
162["Segment<br>[1366, 1373, 1]"]
220[Solid2d]
end
subgraph path29 [Path]
29["Path<br>[362, 395, 8]"]
41["Segment<br>[403, 429, 8]"]
48["Segment<br>[437, 499, 8]"]
55["Segment<br>[507, 569, 8]"]
60["Segment<br>[577, 640, 8]"]
64["Segment<br>[648, 673, 8]"]
75["Segment<br>[681, 701, 8]"]
76["Segment<br>[709, 733, 8]"]
85["Segment<br>[741, 803, 8]"]
93["Segment<br>[811, 836, 8]"]
97["Segment<br>[844, 864, 8]"]
103["Segment<br>[872, 896, 8]"]
110["Segment<br>[904, 965, 8]"]
115["Segment<br>[973, 1034, 8]"]
121["Segment<br>[1042, 1067, 8]"]
127["Segment<br>[1075, 1099, 8]"]
131["Segment<br>[1107, 1169, 8]"]
138["Segment<br>[1177, 1202, 8]"]
146["Segment<br>[1210, 1237, 8]"]
153["Segment<br>[1245, 1306, 8]"]
159["Segment<br>[1314, 1358, 8]"]
163["Segment<br>[1366, 1373, 8]"]
29["Path<br>[362, 395, 1]"]
41["Segment<br>[403, 429, 1]"]
48["Segment<br>[437, 499, 1]"]
55["Segment<br>[507, 569, 1]"]
60["Segment<br>[577, 640, 1]"]
64["Segment<br>[648, 673, 1]"]
75["Segment<br>[681, 701, 1]"]
76["Segment<br>[709, 733, 1]"]
85["Segment<br>[741, 803, 1]"]
93["Segment<br>[811, 836, 1]"]
97["Segment<br>[844, 864, 1]"]
103["Segment<br>[872, 896, 1]"]
110["Segment<br>[904, 965, 1]"]
115["Segment<br>[973, 1034, 1]"]
121["Segment<br>[1042, 1067, 1]"]
127["Segment<br>[1075, 1099, 1]"]
131["Segment<br>[1107, 1169, 1]"]
138["Segment<br>[1177, 1202, 1]"]
146["Segment<br>[1210, 1237, 1]"]
153["Segment<br>[1245, 1306, 1]"]
159["Segment<br>[1314, 1358, 1]"]
163["Segment<br>[1366, 1373, 1]"]
221[Solid2d]
end
subgraph path30 [Path]
30["Path<br>[1765, 1789, 8]"]
30["Path<br>[1765, 1789, 1]"]
end
subgraph path31 [Path]
31["Path<br>[1765, 1789, 8]"]
31["Path<br>[1765, 1789, 1]"]
end
subgraph path32 [Path]
32["Path<br>[1797, 1923, 8]"]
169["Segment<br>[1797, 1923, 8]"]
170["Segment<br>[1797, 1923, 8]"]
171["Segment<br>[1797, 1923, 8]"]
172["Segment<br>[1797, 1923, 8]"]
176["Segment<br>[1797, 1923, 8]"]
178["Segment<br>[1797, 1923, 8]"]
179["Segment<br>[1797, 1923, 8]"]
32["Path<br>[1797, 1923, 1]"]
169["Segment<br>[1797, 1923, 1]"]
170["Segment<br>[1797, 1923, 1]"]
171["Segment<br>[1797, 1923, 1]"]
172["Segment<br>[1797, 1923, 1]"]
176["Segment<br>[1797, 1923, 1]"]
178["Segment<br>[1797, 1923, 1]"]
179["Segment<br>[1797, 1923, 1]"]
215[Solid2d]
end
subgraph path33 [Path]
33["Path<br>[1797, 1923, 8]"]
166["Segment<br>[1797, 1923, 8]"]
167["Segment<br>[1797, 1923, 8]"]
168["Segment<br>[1797, 1923, 8]"]
173["Segment<br>[1797, 1923, 8]"]
174["Segment<br>[1797, 1923, 8]"]
175["Segment<br>[1797, 1923, 8]"]
177["Segment<br>[1797, 1923, 8]"]
33["Path<br>[1797, 1923, 1]"]
166["Segment<br>[1797, 1923, 1]"]
167["Segment<br>[1797, 1923, 1]"]
168["Segment<br>[1797, 1923, 1]"]
173["Segment<br>[1797, 1923, 1]"]
174["Segment<br>[1797, 1923, 1]"]
175["Segment<br>[1797, 1923, 1]"]
177["Segment<br>[1797, 1923, 1]"]
222[Solid2d]
end
subgraph path34 [Path]
34["Path<br>[2217, 2244, 8]"]
180["Segment<br>[2252, 2274, 8]"]
181["Segment<br>[2282, 2304, 8]"]
182["Segment<br>[2312, 2334, 8]"]
183["Segment<br>[2342, 2365, 8]"]
184["Segment<br>[2373, 2396, 8]"]
185["Segment<br>[2404, 2439, 8]"]
186["Segment<br>[2447, 2454, 8]"]
34["Path<br>[2217, 2244, 1]"]
180["Segment<br>[2252, 2274, 1]"]
181["Segment<br>[2282, 2304, 1]"]
182["Segment<br>[2312, 2334, 1]"]
183["Segment<br>[2342, 2365, 1]"]
184["Segment<br>[2373, 2396, 1]"]
185["Segment<br>[2404, 2439, 1]"]
186["Segment<br>[2447, 2454, 1]"]
223[Solid2d]
end
subgraph path35 [Path]
35["Path<br>[2728, 2757, 8]"]
187["Segment<br>[2765, 2800, 8]"]
188["Segment<br>[2808, 2833, 8]"]
189["Segment<br>[2841, 2877, 8]"]
190["Segment<br>[2885, 2909, 8]"]
191["Segment<br>[2917, 2951, 8]"]
192["Segment<br>[2959, 2994, 8]"]
193["Segment<br>[3002, 3009, 8]"]
35["Path<br>[2728, 2757, 1]"]
187["Segment<br>[2765, 2800, 1]"]
188["Segment<br>[2808, 2833, 1]"]
189["Segment<br>[2841, 2877, 1]"]
190["Segment<br>[2885, 2909, 1]"]
191["Segment<br>[2917, 2951, 1]"]
192["Segment<br>[2959, 2994, 1]"]
193["Segment<br>[3002, 3009, 1]"]
214[Solid2d]
end
subgraph path36 [Path]
36["Path<br>[3286, 3313, 8]"]
195["Segment<br>[3321, 3340, 8]"]
197["Segment<br>[3348, 3397, 8]"]
36["Path<br>[3286, 3313, 1]"]
195["Segment<br>[3321, 3340, 1]"]
197["Segment<br>[3348, 3397, 1]"]
end
subgraph path37 [Path]
37["Path<br>[3286, 3313, 8]"]
194["Segment<br>[3321, 3340, 8]"]
196["Segment<br>[3348, 3397, 8]"]
37["Path<br>[3286, 3313, 1]"]
194["Segment<br>[3321, 3340, 1]"]
196["Segment<br>[3348, 3397, 1]"]
end
subgraph path38 [Path]
38["Path<br>[3498, 3531, 8]"]
199["Segment<br>[3539, 3558, 8]"]
200["Segment<br>[3566, 3588, 8]"]
202["Segment<br>[3596, 3619, 8]"]
204["Segment<br>[3627, 3647, 8]"]
206["Segment<br>[3655, 3679, 8]"]
209["Segment<br>[3687, 3710, 8]"]
211["Segment<br>[3718, 3725, 8]"]
38["Path<br>[3498, 3531, 1]"]
199["Segment<br>[3539, 3558, 1]"]
200["Segment<br>[3566, 3588, 1]"]
202["Segment<br>[3596, 3619, 1]"]
204["Segment<br>[3627, 3647, 1]"]
206["Segment<br>[3655, 3679, 1]"]
209["Segment<br>[3687, 3710, 1]"]
211["Segment<br>[3718, 3725, 1]"]
213[Solid2d]
end
subgraph path39 [Path]
39["Path<br>[3498, 3531, 8]"]
198["Segment<br>[3539, 3558, 8]"]
201["Segment<br>[3566, 3588, 8]"]
203["Segment<br>[3596, 3619, 8]"]
205["Segment<br>[3627, 3647, 8]"]
207["Segment<br>[3655, 3679, 8]"]
208["Segment<br>[3687, 3710, 8]"]
210["Segment<br>[3718, 3725, 8]"]
39["Path<br>[3498, 3531, 1]"]
198["Segment<br>[3539, 3558, 1]"]
201["Segment<br>[3566, 3588, 1]"]
203["Segment<br>[3596, 3619, 1]"]
205["Segment<br>[3627, 3647, 1]"]
207["Segment<br>[3655, 3679, 1]"]
208["Segment<br>[3687, 3710, 1]"]
210["Segment<br>[3718, 3725, 1]"]
216[Solid2d]
end
1["Plane<br>[823, 864, 0]"]
@ -237,39 +237,39 @@ flowchart LR
3["Plane<br>[975, 1017, 0]"]
4["Plane<br>[1077, 1144, 0]"]
5["Plane<br>[1223, 1290, 0]"]
6["Plane<br>[334, 354, 8]"]
7["Plane<br>[334, 354, 8]"]
8["Plane<br>[3807, 3842, 8]"]
9["Plane<br>[3807, 3842, 8]"]
10["Plane<br>[3871, 3900, 8]"]
11["Plane<br>[3871, 3900, 8]"]
12["StartSketchOnPlane<br>[2700, 2720, 8]"]
13["StartSketchOnPlane<br>[1737, 1757, 8]"]
14["StartSketchOnPlane<br>[3258, 3278, 8]"]
15["StartSketchOnPlane<br>[1737, 1757, 8]"]
16["StartSketchOnPlane<br>[334, 354, 8]"]
17["StartSketchOnPlane<br>[3470, 3490, 8]"]
18["StartSketchOnPlane<br>[3470, 3490, 8]"]
19["StartSketchOnPlane<br>[334, 354, 8]"]
20["StartSketchOnPlane<br>[334, 354, 8]"]
21["StartSketchOnPlane<br>[3258, 3278, 8]"]
22["StartSketchOnPlane<br>[334, 354, 8]"]
23["StartSketchOnPlane<br>[2189, 2209, 8]"]
224["Sweep Extrusion<br>[1462, 1500, 8]"]
225["Sweep Extrusion<br>[1462, 1500, 8]"]
226["Sweep Extrusion<br>[1462, 1500, 8]"]
227["Sweep Extrusion<br>[1538, 1577, 8]"]
228["Sweep Extrusion<br>[1538, 1577, 8]"]
229["Sweep Extrusion<br>[1538, 1577, 8]"]
230["Sweep Extrusion<br>[2034, 2058, 8]"]
231["Sweep Extrusion<br>[2108, 2132, 8]"]
232["Sweep Extrusion<br>[2618, 2642, 8]"]
233["Sweep Extrusion<br>[2618, 2642, 8]"]
234["Sweep Extrusion<br>[2618, 2642, 8]"]
235["Sweep Extrusion<br>[3180, 3204, 8]"]
236["Sweep Extrusion<br>[3180, 3204, 8]"]
237["Sweep Sweep<br>[3922, 3949, 8]"]
238["Sweep Sweep<br>[3922, 3949, 8]"]
6["Plane<br>[334, 354, 1]"]
7["Plane<br>[334, 354, 1]"]
8["Plane<br>[3807, 3842, 1]"]
9["Plane<br>[3807, 3842, 1]"]
10["Plane<br>[3871, 3900, 1]"]
11["Plane<br>[3871, 3900, 1]"]
12["StartSketchOnPlane<br>[2700, 2720, 1]"]
13["StartSketchOnPlane<br>[1737, 1757, 1]"]
14["StartSketchOnPlane<br>[3258, 3278, 1]"]
15["StartSketchOnPlane<br>[1737, 1757, 1]"]
16["StartSketchOnPlane<br>[334, 354, 1]"]
17["StartSketchOnPlane<br>[3470, 3490, 1]"]
18["StartSketchOnPlane<br>[3470, 3490, 1]"]
19["StartSketchOnPlane<br>[334, 354, 1]"]
20["StartSketchOnPlane<br>[334, 354, 1]"]
21["StartSketchOnPlane<br>[3258, 3278, 1]"]
22["StartSketchOnPlane<br>[334, 354, 1]"]
23["StartSketchOnPlane<br>[2189, 2209, 1]"]
224["Sweep Extrusion<br>[1462, 1500, 1]"]
225["Sweep Extrusion<br>[1462, 1500, 1]"]
226["Sweep Extrusion<br>[1462, 1500, 1]"]
227["Sweep Extrusion<br>[1538, 1577, 1]"]
228["Sweep Extrusion<br>[1538, 1577, 1]"]
229["Sweep Extrusion<br>[1538, 1577, 1]"]
230["Sweep Extrusion<br>[2034, 2058, 1]"]
231["Sweep Extrusion<br>[2108, 2132, 1]"]
232["Sweep Extrusion<br>[2618, 2642, 1]"]
233["Sweep Extrusion<br>[2618, 2642, 1]"]
234["Sweep Extrusion<br>[2618, 2642, 1]"]
235["Sweep Extrusion<br>[3180, 3204, 1]"]
236["Sweep Extrusion<br>[3180, 3204, 1]"]
237["Sweep Sweep<br>[3922, 3949, 1]"]
238["Sweep Sweep<br>[3922, 3949, 1]"]
239[Wall]
240[Wall]
241[Wall]

View File

@ -31,7 +31,7 @@ description: Variables in memory after executing car-wheel-assembly.kcl
},
"brakeCaliper": {
"type": "Module",
"value": 11
"value": 4
},
"c1": {
"type": "TagIdentifier",
@ -105,15 +105,15 @@ description: Variables in memory after executing car-wheel-assembly.kcl
},
"carRotor": {
"type": "Module",
"value": 10
"value": 3
},
"carTire": {
"type": "Module",
"value": 13
"value": 6
},
"carWheel": {
"type": "Module",
"value": 8
"value": 1
},
"drillAndSlotCount": {
"type": "Number",
@ -183,7 +183,7 @@ description: Variables in memory after executing car-wheel-assembly.kcl
},
"lugNut": {
"type": "Module",
"value": 12
"value": 5
},
"lugSpacing": {
"type": "Number",

View File

@ -608,7 +608,7 @@ flowchart LR
83 --- 246
83 --- 289
90 --- 159
90 x--> 193
90 x--> 192
90 --- 226
90 --- 271
104 --- 151
@ -910,7 +910,7 @@ flowchart LR
211 <--x 191
212 <--x 191
213 <--x 191
226 <--x 192
226 <--x 193
239 <--x 195
240 <--x 195
241 <--x 195

View File

@ -5,18 +5,18 @@ description: Variables in memory after executing multi-axis-robot.kcl
{
"j2RobotArm": {
"type": "Module",
"value": 11
"value": 4
},
"j3RobotArm": {
"type": "Module",
"value": 12
"value": 5
},
"robotArmBase": {
"type": "Module",
"value": 8
"value": 1
},
"rotatingBase": {
"type": "Module",
"value": 10
"value": 3
}
}

View File

@ -1,173 +1,173 @@
```mermaid
flowchart LR
subgraph path23 [Path]
23["Path<br>[422, 484, 9]"]
46["Segment<br>[422, 484, 9]"]
93[Solid2d]
23["Path<br>[422, 484, 2]"]
46["Segment<br>[422, 484, 2]"]
94[Solid2d]
end
subgraph path24 [Path]
24["Path<br>[622, 682, 9]"]
47["Segment<br>[622, 682, 9]"]
84[Solid2d]
24["Path<br>[622, 682, 2]"]
47["Segment<br>[622, 682, 2]"]
92[Solid2d]
end
subgraph path25 [Path]
25["Path<br>[595, 688, 10]"]
48["Segment<br>[595, 688, 10]"]
88[Solid2d]
25["Path<br>[595, 688, 3]"]
48["Segment<br>[595, 688, 3]"]
87[Solid2d]
end
subgraph path26 [Path]
26["Path<br>[595, 688, 10]"]
49["Segment<br>[595, 688, 10]"]
90[Solid2d]
26["Path<br>[595, 688, 3]"]
49["Segment<br>[595, 688, 3]"]
89[Solid2d]
end
subgraph path27 [Path]
27["Path<br>[917, 972, 10]"]
51["Segment<br>[917, 972, 10]"]
85[Solid2d]
27["Path<br>[917, 972, 3]"]
51["Segment<br>[917, 972, 3]"]
84[Solid2d]
end
subgraph path28 [Path]
28["Path<br>[917, 972, 10]"]
50["Segment<br>[917, 972, 10]"]
28["Path<br>[917, 972, 3]"]
50["Segment<br>[917, 972, 3]"]
100[Solid2d]
end
subgraph path29 [Path]
29["Path<br>[1202, 1261, 10]"]
53["Segment<br>[1202, 1261, 10]"]
86[Solid2d]
29["Path<br>[1202, 1261, 3]"]
53["Segment<br>[1202, 1261, 3]"]
85[Solid2d]
end
subgraph path30 [Path]
30["Path<br>[1202, 1261, 10]"]
52["Segment<br>[1202, 1261, 10]"]
30["Path<br>[1202, 1261, 3]"]
52["Segment<br>[1202, 1261, 3]"]
99[Solid2d]
end
subgraph path31 [Path]
31["Path<br>[1368, 1428, 10]"]
54["Segment<br>[1368, 1428, 10]"]
31["Path<br>[1368, 1428, 3]"]
54["Segment<br>[1368, 1428, 3]"]
82[Solid2d]
end
subgraph path32 [Path]
32["Path<br>[1368, 1428, 10]"]
55["Segment<br>[1368, 1428, 10]"]
32["Path<br>[1368, 1428, 3]"]
55["Segment<br>[1368, 1428, 3]"]
95[Solid2d]
end
subgraph path33 [Path]
33["Path<br>[1590, 1643, 10]"]
56["Segment<br>[1590, 1643, 10]"]
33["Path<br>[1590, 1643, 3]"]
56["Segment<br>[1590, 1643, 3]"]
81[Solid2d]
end
subgraph path34 [Path]
34["Path<br>[1590, 1643, 10]"]
57["Segment<br>[1590, 1643, 10]"]
34["Path<br>[1590, 1643, 3]"]
57["Segment<br>[1590, 1643, 3]"]
98[Solid2d]
end
subgraph path35 [Path]
35["Path<br>[411, 463, 11]"]
58["Segment<br>[411, 463, 11]"]
94[Solid2d]
35["Path<br>[411, 463, 4]"]
58["Segment<br>[411, 463, 4]"]
93[Solid2d]
end
subgraph path36 [Path]
36["Path<br>[601, 653, 11]"]
59["Segment<br>[601, 653, 11]"]
36["Path<br>[601, 653, 4]"]
59["Segment<br>[601, 653, 4]"]
101[Solid2d]
end
subgraph path37 [Path]
37["Path<br>[439, 509, 12]"]
60["Segment<br>[439, 509, 12]"]
92[Solid2d]
37["Path<br>[439, 509, 5]"]
60["Segment<br>[439, 509, 5]"]
91[Solid2d]
end
subgraph path38 [Path]
38["Path<br>[778, 865, 12]"]
61["Segment<br>[873, 924, 12]"]
62["Segment<br>[932, 983, 12]"]
63["Segment<br>[991, 1042, 12]"]
64["Segment<br>[1050, 1100, 12]"]
65["Segment<br>[1108, 1158, 12]"]
66["Segment<br>[1166, 1173, 12]"]
38["Path<br>[778, 865, 5]"]
61["Segment<br>[873, 924, 5]"]
62["Segment<br>[932, 983, 5]"]
63["Segment<br>[991, 1042, 5]"]
64["Segment<br>[1050, 1100, 5]"]
65["Segment<br>[1108, 1158, 5]"]
66["Segment<br>[1166, 1173, 5]"]
83[Solid2d]
end
subgraph path39 [Path]
39["Path<br>[1312, 1381, 12]"]
67["Segment<br>[1312, 1381, 12]"]
39["Path<br>[1312, 1381, 5]"]
67["Segment<br>[1312, 1381, 5]"]
96[Solid2d]
end
subgraph path40 [Path]
40["Path<br>[425, 515, 13]"]
68["Segment<br>[523, 573, 13]"]
69["Segment<br>[581, 631, 13]"]
70["Segment<br>[639, 689, 13]"]
71["Segment<br>[697, 746, 13]"]
72["Segment<br>[754, 803, 13]"]
73["Segment<br>[811, 818, 13]"]
87[Solid2d]
40["Path<br>[425, 515, 6]"]
68["Segment<br>[523, 573, 6]"]
69["Segment<br>[581, 631, 6]"]
70["Segment<br>[639, 689, 6]"]
71["Segment<br>[697, 746, 6]"]
72["Segment<br>[754, 803, 6]"]
73["Segment<br>[811, 818, 6]"]
86[Solid2d]
end
subgraph path41 [Path]
41["Path<br>[967, 1019, 13]"]
74["Segment<br>[967, 1019, 13]"]
41["Path<br>[967, 1019, 6]"]
74["Segment<br>[967, 1019, 6]"]
97[Solid2d]
end
subgraph path42 [Path]
42["Path<br>[325, 383, 14]"]
75["Segment<br>[325, 383, 14]"]
42["Path<br>[325, 383, 7]"]
75["Segment<br>[325, 383, 7]"]
80[Solid2d]
end
subgraph path43 [Path]
43["Path<br>[325, 383, 14]"]
76["Segment<br>[325, 383, 14]"]
91[Solid2d]
43["Path<br>[325, 383, 7]"]
76["Segment<br>[325, 383, 7]"]
90[Solid2d]
end
subgraph path44 [Path]
44["Path<br>[527, 582, 14]"]
78["Segment<br>[527, 582, 14]"]
44["Path<br>[527, 582, 7]"]
78["Segment<br>[527, 582, 7]"]
79[Solid2d]
end
subgraph path45 [Path]
45["Path<br>[527, 582, 14]"]
77["Segment<br>[527, 582, 14]"]
89[Solid2d]
45["Path<br>[527, 582, 7]"]
77["Segment<br>[527, 582, 7]"]
88[Solid2d]
end
1["Plane<br>[399, 416, 9]"]
2["Plane<br>[570, 587, 10]"]
3["Plane<br>[570, 587, 10]"]
4["Plane<br>[892, 909, 10]"]
5["Plane<br>[892, 909, 10]"]
6["Plane<br>[386, 403, 11]"]
7["Plane<br>[414, 431, 12]"]
8["Plane<br>[400, 417, 13]"]
9["Plane<br>[300, 317, 14]"]
10["Plane<br>[300, 317, 14]"]
11["StartSketchOnFace<br>[1323, 1360, 10]"]
12["StartSketchOnFace<br>[1544, 1582, 10]"]
13["StartSketchOnFace<br>[922, 959, 13]"]
14["StartSketchOnFace<br>[484, 519, 14]"]
15["StartSketchOnFace<br>[1544, 1582, 10]"]
16["StartSketchOnFace<br>[1155, 1194, 10]"]
17["StartSketchOnFace<br>[733, 770, 12]"]
18["StartSketchOnFace<br>[1269, 1304, 12]"]
19["StartSketchOnFace<br>[556, 593, 11]"]
20["StartSketchOnFace<br>[1155, 1194, 10]"]
21["StartSketchOnFace<br>[1323, 1360, 10]"]
22["StartSketchOnFace<br>[484, 519, 14]"]
102["Sweep Extrusion<br>[490, 526, 9]"]
103["Sweep Extrusion<br>[688, 725, 9]"]
104["Sweep Extrusion<br>[1020, 1060, 10]"]
105["Sweep Extrusion<br>[1020, 1060, 10]"]
106["Sweep Extrusion<br>[1269, 1306, 10]"]
107["Sweep Extrusion<br>[1269, 1306, 10]"]
108["Sweep Extrusion<br>[1436, 1474, 10]"]
109["Sweep Extrusion<br>[1436, 1474, 10]"]
110["Sweep Extrusion<br>[1651, 1693, 10]"]
111["Sweep Extrusion<br>[1651, 1693, 10]"]
112["Sweep Extrusion<br>[471, 504, 11]"]
113["Sweep Extrusion<br>[661, 698, 11]"]
114["Sweep Extrusion<br>[517, 550, 12]"]
115["Sweep Extrusion<br>[1181, 1221, 12]"]
116["Sweep Extrusion<br>[1389, 1417, 12]"]
117["Sweep Extrusion<br>[826, 859, 13]"]
118["Sweep Extrusion<br>[1027, 1064, 13]"]
119["Sweep Extrusion<br>[391, 422, 14]"]
120["Sweep Extrusion<br>[391, 422, 14]"]
121["Sweep Extrusion<br>[590, 622, 14]"]
122["Sweep Extrusion<br>[590, 622, 14]"]
1["Plane<br>[399, 416, 2]"]
2["Plane<br>[570, 587, 3]"]
3["Plane<br>[570, 587, 3]"]
4["Plane<br>[892, 909, 3]"]
5["Plane<br>[892, 909, 3]"]
6["Plane<br>[386, 403, 4]"]
7["Plane<br>[414, 431, 5]"]
8["Plane<br>[400, 417, 6]"]
9["Plane<br>[300, 317, 7]"]
10["Plane<br>[300, 317, 7]"]
11["StartSketchOnFace<br>[1323, 1360, 3]"]
12["StartSketchOnFace<br>[1544, 1582, 3]"]
13["StartSketchOnFace<br>[922, 959, 6]"]
14["StartSketchOnFace<br>[484, 519, 7]"]
15["StartSketchOnFace<br>[1544, 1582, 3]"]
16["StartSketchOnFace<br>[1155, 1194, 3]"]
17["StartSketchOnFace<br>[733, 770, 5]"]
18["StartSketchOnFace<br>[1269, 1304, 5]"]
19["StartSketchOnFace<br>[556, 593, 4]"]
20["StartSketchOnFace<br>[1155, 1194, 3]"]
21["StartSketchOnFace<br>[1323, 1360, 3]"]
22["StartSketchOnFace<br>[484, 519, 7]"]
102["Sweep Extrusion<br>[490, 526, 2]"]
103["Sweep Extrusion<br>[688, 725, 2]"]
104["Sweep Extrusion<br>[1020, 1060, 3]"]
105["Sweep Extrusion<br>[1020, 1060, 3]"]
106["Sweep Extrusion<br>[1269, 1306, 3]"]
107["Sweep Extrusion<br>[1269, 1306, 3]"]
108["Sweep Extrusion<br>[1436, 1474, 3]"]
109["Sweep Extrusion<br>[1436, 1474, 3]"]
110["Sweep Extrusion<br>[1651, 1693, 3]"]
111["Sweep Extrusion<br>[1651, 1693, 3]"]
112["Sweep Extrusion<br>[471, 504, 4]"]
113["Sweep Extrusion<br>[661, 698, 4]"]
114["Sweep Extrusion<br>[517, 550, 5]"]
115["Sweep Extrusion<br>[1181, 1221, 5]"]
116["Sweep Extrusion<br>[1389, 1417, 5]"]
117["Sweep Extrusion<br>[826, 859, 6]"]
118["Sweep Extrusion<br>[1027, 1064, 6]"]
119["Sweep Extrusion<br>[391, 422, 7]"]
120["Sweep Extrusion<br>[391, 422, 7]"]
121["Sweep Extrusion<br>[590, 622, 7]"]
122["Sweep Extrusion<br>[590, 622, 7]"]
123[Wall]
124[Wall]
125[Wall]
@ -283,8 +283,8 @@ flowchart LR
235["SweepEdge Adjacent"]
236["SweepEdge Adjacent"]
237["SweepEdge Adjacent"]
238["EdgeCut Fillet<br>[558, 624, 12]"]
239["EdgeCut Fillet<br>[558, 624, 12]"]
238["EdgeCut Fillet<br>[558, 624, 5]"]
239["EdgeCut Fillet<br>[558, 624, 5]"]
1 --- 23
2 --- 25
3 --- 26
@ -308,24 +308,24 @@ flowchart LR
170 x--> 21
171 x--> 22
23 --- 46
23 --- 93
23 --- 94
23 ---- 102
24 --- 47
24 --- 84
24 --- 92
24 ---- 103
164 --- 24
25 --- 48
25 --- 88
25 --- 87
26 --- 49
26 --- 90
26 --- 89
27 --- 51
27 --- 85
27 --- 84
27 ---- 104
28 --- 50
28 --- 100
28 ---- 105
29 --- 53
29 --- 86
29 --- 85
29 ---- 107
159 --- 29
30 --- 52
@ -349,14 +349,14 @@ flowchart LR
34 ---- 111
169 --- 34
35 --- 58
35 --- 94
35 --- 93
35 ---- 112
36 --- 59
36 --- 101
36 ---- 113
173 --- 36
37 --- 60
37 --- 92
37 --- 91
37 ---- 114
38 --- 61
38 --- 62
@ -377,7 +377,7 @@ flowchart LR
40 --- 71
40 --- 72
40 --- 73
40 --- 87
40 --- 86
40 ---- 117
41 --- 74
41 --- 97
@ -387,24 +387,24 @@ flowchart LR
42 --- 80
42 ---- 120
43 --- 76
43 --- 91
43 --- 90
43 ---- 119
44 --- 78
44 --- 79
44 ---- 121
165 --- 44
45 --- 77
45 --- 89
45 --- 88
45 ---- 122
171 --- 45
46 --- 152
46 --- 142
46 x--> 154
46 --- 205
46 --- 236
47 --- 145
46 --- 195
46 --- 226
47 --- 152
47 x--> 164
47 --- 198
47 --- 229
47 --- 205
47 --- 236
50 --- 153
50 x--> 156
50 --- 206
@ -413,14 +413,14 @@ flowchart LR
51 x--> 159
51 --- 180
51 --- 211
52 --- 143
52 --- 144
52 x--> 156
52 --- 196
52 --- 227
53 --- 144
52 --- 197
52 --- 228
53 --- 145
53 x--> 159
53 --- 197
53 --- 228
53 --- 198
53 --- 229
54 --- 134
54 x--> 170
54 --- 187
@ -433,10 +433,10 @@ flowchart LR
56 x--> 174
56 --- 179
56 --- 210
57 --- 142
57 --- 143
57 x--> 169
57 --- 195
57 --- 226
57 --- 196
57 --- 227
58 --- 124
58 x--> 162
58 --- 177
@ -522,14 +522,14 @@ flowchart LR
78 x--> 165
78 --- 183
78 --- 214
102 --- 152
102 --- 142
102 --- 154
102 --- 164
102 --- 205
102 --- 236
103 --- 145
103 --- 198
103 --- 229
102 --- 195
102 --- 226
103 --- 152
103 --- 205
103 --- 236
104 --- 127
104 --- 159
104 --- 170
@ -540,14 +540,14 @@ flowchart LR
105 --- 166
105 --- 206
105 --- 237
106 --- 143
106 --- 144
106 --- 163
106 --- 196
106 --- 227
107 --- 144
106 --- 197
106 --- 228
107 --- 145
107 --- 167
107 --- 197
107 --- 228
107 --- 198
107 --- 229
108 --- 125
108 --- 169
108 --- 178
@ -559,9 +559,9 @@ flowchart LR
110 --- 126
110 --- 179
110 --- 210
111 --- 142
111 --- 195
111 --- 226
111 --- 143
111 --- 196
111 --- 227
112 --- 124
112 --- 162
112 --- 173
@ -710,7 +710,7 @@ flowchart LR
236 <--x 152
206 <--x 153
237 <--x 153
198 <--x 154
205 <--x 154
183 <--x 155
185 <--x 157
199 <--x 158
@ -721,13 +721,13 @@ flowchart LR
204 <--x 158
186 <--x 160
182 <--x 162
195 <--x 163
196 <--x 163
205 <--x 164
197 <--x 163
195 <--x 164
184 <--x 165
206 <--x 166
179 <--x 167
197 <--x 167
198 <--x 167
188 <--x 168
189 <--x 168
190 <--x 168

View File

@ -198,7 +198,7 @@ description: Variables in memory after executing pipe-flange-assembly.kcl
},
"gasket": {
"type": "Module",
"value": 9
"value": 2
},
"gasketInnerDiameter": {
"type": "Number",

View File

@ -5,7 +5,7 @@ description: Variables in memory after executing walkie-talkie.kcl
{
"antenna": {
"type": "Module",
"value": 12
"value": 5
},
"antennaBaseHeight": {
"type": "Number",
@ -74,7 +74,7 @@ description: Variables in memory after executing walkie-talkie.kcl
},
"body": {
"type": "Module",
"value": 9
"value": 2
},
"button": {
"type": "Function"
@ -120,7 +120,7 @@ description: Variables in memory after executing walkie-talkie.kcl
},
"case": {
"type": "Module",
"value": 10
"value": 3
},
"caseTolerance": {
"type": "Number",
@ -163,7 +163,7 @@ description: Variables in memory after executing walkie-talkie.kcl
},
"knob": {
"type": "Module",
"value": 14
"value": 7
},
"knobDiameter": {
"type": "Number",
@ -330,7 +330,7 @@ description: Variables in memory after executing walkie-talkie.kcl
},
"talkButton": {
"type": "Module",
"value": 13
"value": 6
},
"talkButtonHeight": {
"type": "Number",

View File

@ -1,16 +1,16 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[80, 105, 8]"]
3["Segment<br>[111, 128, 8]"]
4["Segment<br>[134, 151, 8]"]
5["Segment<br>[157, 175, 8]"]
6["Segment<br>[181, 199, 8]"]
7["Segment<br>[205, 213, 8]"]
2["Path<br>[80, 105, 1]"]
3["Segment<br>[111, 128, 1]"]
4["Segment<br>[134, 151, 1]"]
5["Segment<br>[157, 175, 1]"]
6["Segment<br>[181, 199, 1]"]
7["Segment<br>[205, 213, 1]"]
8[Solid2d]
end
1["Plane<br>[57, 74, 8]"]
9["Sweep Extrusion<br>[219, 238, 8]"]
1["Plane<br>[57, 74, 1]"]
9["Sweep Extrusion<br>[219, 238, 1]"]
10[Wall]
11[Wall]
12[Wall]
@ -33,22 +33,22 @@ flowchart LR
2 --- 7
2 --- 8
2 ---- 9
3 --- 11
3 --- 12
3 x--> 14
3 --- 19
3 --- 20
4 --- 12
3 --- 23
4 --- 11
4 x--> 14
4 --- 17
4 --- 16
4 --- 21
5 --- 13
5 --- 10
5 x--> 14
5 --- 16
5 --- 18
5 --- 22
6 --- 10
6 --- 13
6 x--> 14
6 --- 18
6 --- 23
6 --- 17
6 --- 20
9 --- 10
9 --- 11
9 --- 12
@ -64,16 +64,16 @@ flowchart LR
9 --- 22
9 --- 23
18 <--x 10
21 <--x 10
22 <--x 10
23 <--x 10
19 <--x 11
20 <--x 11
16 <--x 11
21 <--x 11
23 <--x 11
17 <--x 12
19 <--x 12
20 <--x 12
21 <--x 12
16 <--x 13
21 <--x 13
23 <--x 12
17 <--x 13
20 <--x 13
22 <--x 13
16 <--x 15
17 <--x 15

View File

@ -5,6 +5,6 @@ description: Variables in memory after executing module_return_using_var.kcl
{
"cube": {
"type": "Module",
"value": 8
"value": 1
}
}

View File

@ -5,11 +5,11 @@ description: Variables in memory after executing multiple-foreign-imports-all-re
{
"anothercube": {
"type": "Module",
"value": 10
"value": 3
},
"cube": {
"type": "Module",
"value": 8
"value": 1
},
"model": {
"type": "ImportedGeometry",
@ -20,6 +20,6 @@ description: Variables in memory after executing multiple-foreign-imports-all-re
},
"othercube": {
"type": "Module",
"value": 9
"value": 2
}
}

View File

@ -1,31 +1,31 @@
```mermaid
flowchart LR
subgraph path3 [Path]
3["Path<br>[63, 90, 8]"]
5["Segment<br>[98, 116, 8]"]
8["Segment<br>[124, 143, 8]"]
10["Segment<br>[151, 170, 8]"]
11["Segment<br>[178, 185, 8]"]
3["Path<br>[63, 90, 1]"]
5["Segment<br>[98, 116, 1]"]
7["Segment<br>[124, 143, 1]"]
9["Segment<br>[151, 170, 1]"]
12["Segment<br>[178, 185, 1]"]
13[Solid2d]
end
subgraph path4 [Path]
4["Path<br>[63, 90, 8]"]
6["Segment<br>[98, 116, 8]"]
7["Segment<br>[124, 143, 8]"]
9["Segment<br>[151, 170, 8]"]
12["Segment<br>[178, 185, 8]"]
4["Path<br>[63, 90, 1]"]
6["Segment<br>[98, 116, 1]"]
8["Segment<br>[124, 143, 1]"]
10["Segment<br>[151, 170, 1]"]
11["Segment<br>[178, 185, 1]"]
14[Solid2d]
end
1["Plane<br>[38, 55, 8]"]
2["Plane<br>[38, 55, 8]"]
15["Sweep Extrusion<br>[342, 376, 8]"]
16["Sweep Extrusion<br>[342, 376, 8]"]
17["Sweep Extrusion<br>[342, 376, 8]"]
18["Sweep Extrusion<br>[342, 376, 8]"]
19["Sweep Extrusion<br>[342, 376, 8]"]
20["Sweep Extrusion<br>[342, 376, 8]"]
21["Sweep Extrusion<br>[342, 376, 8]"]
22["Sweep Extrusion<br>[342, 376, 8]"]
1["Plane<br>[38, 55, 1]"]
2["Plane<br>[38, 55, 1]"]
15["Sweep Extrusion<br>[342, 376, 1]"]
16["Sweep Extrusion<br>[342, 376, 1]"]
17["Sweep Extrusion<br>[342, 376, 1]"]
18["Sweep Extrusion<br>[342, 376, 1]"]
19["Sweep Extrusion<br>[342, 376, 1]"]
20["Sweep Extrusion<br>[342, 376, 1]"]
21["Sweep Extrusion<br>[342, 376, 1]"]
22["Sweep Extrusion<br>[342, 376, 1]"]
23[Wall]
24[Wall]
25[Wall]
@ -57,63 +57,63 @@ flowchart LR
1 --- 3
2 --- 4
3 --- 5
3 --- 8
3 --- 10
3 --- 11
3 --- 7
3 --- 9
3 --- 12
3 --- 13
3 ---- 22
4 --- 6
4 --- 7
4 --- 9
4 --- 12
4 --- 8
4 --- 10
4 --- 11
4 --- 14
4 ---- 17
5 --- 28
4 ---- 16
5 --- 29
5 x--> 32
5 --- 42
5 --- 47
5 --- 50
6 --- 26
6 x--> 31
6 --- 35
6 --- 46
7 --- 24
7 x--> 31
7 --- 38
7 --- 44
8 --- 29
8 x--> 32
8 --- 40
8 --- 48
9 --- 23
9 x--> 31
9 --- 37
9 --- 45
10 --- 30
10 x--> 32
10 --- 39
10 --- 49
11 --- 27
11 x--> 32
11 --- 41
11 --- 50
12 --- 25
12 x--> 31
12 --- 36
12 --- 43
17 --- 23
17 --- 24
17 --- 25
17 --- 26
17 --- 31
17 --- 33
17 --- 35
17 --- 36
17 --- 37
17 --- 38
17 --- 43
17 --- 44
17 --- 45
17 --- 46
7 --- 28
7 x--> 32
7 --- 39
7 --- 48
8 --- 24
8 x--> 31
8 --- 38
8 --- 44
9 --- 27
9 x--> 32
9 --- 41
9 --- 49
10 --- 23
10 x--> 31
10 --- 37
10 --- 45
11 --- 25
11 x--> 31
11 --- 36
11 --- 43
12 --- 30
12 x--> 32
12 --- 40
12 --- 47
16 --- 23
16 --- 24
16 --- 25
16 --- 26
16 --- 31
16 --- 33
16 --- 35
16 --- 36
16 --- 37
16 --- 38
16 --- 43
16 --- 44
16 --- 45
16 --- 46
22 --- 27
22 --- 28
22 --- 29
@ -141,16 +141,16 @@ flowchart LR
43 <--x 26
46 <--x 26
41 <--x 27
48 <--x 27
49 <--x 27
50 <--x 27
42 <--x 28
47 <--x 28
39 <--x 28
48 <--x 28
50 <--x 28
40 <--x 29
42 <--x 29
47 <--x 29
48 <--x 29
39 <--x 30
48 <--x 30
50 <--x 29
40 <--x 30
47 <--x 30
49 <--x 30
35 <--x 33
36 <--x 33

View File

@ -1,31 +1,31 @@
```mermaid
flowchart LR
subgraph path3 [Path]
3["Path<br>[54, 89, 8]"]
5["Segment<br>[54, 89, 8]"]
3["Path<br>[54, 89, 1]"]
5["Segment<br>[54, 89, 1]"]
7[Solid2d]
end
subgraph path4 [Path]
4["Path<br>[54, 89, 8]"]
6["Segment<br>[54, 89, 8]"]
4["Path<br>[54, 89, 1]"]
6["Segment<br>[54, 89, 1]"]
8[Solid2d]
end
1["Plane<br>[29, 46, 8]"]
2["Plane<br>[29, 46, 8]"]
9["Sweep Extrusion<br>[200, 219, 8]"]
10["Sweep Extrusion<br>[200, 219, 8]"]
11["Sweep Extrusion<br>[200, 219, 8]"]
12["Sweep Extrusion<br>[200, 219, 8]"]
13["Sweep Extrusion<br>[200, 219, 8]"]
14["Sweep Extrusion<br>[200, 219, 8]"]
15["Sweep Extrusion<br>[200, 219, 8]"]
16["Sweep Extrusion<br>[200, 219, 8]"]
17["Sweep Extrusion<br>[200, 219, 8]"]
18["Sweep Extrusion<br>[200, 219, 8]"]
19["Sweep Extrusion<br>[200, 219, 8]"]
20["Sweep Extrusion<br>[200, 219, 8]"]
21["Sweep Extrusion<br>[200, 219, 8]"]
22["Sweep Extrusion<br>[200, 219, 8]"]
1["Plane<br>[29, 46, 1]"]
2["Plane<br>[29, 46, 1]"]
9["Sweep Extrusion<br>[200, 219, 1]"]
10["Sweep Extrusion<br>[200, 219, 1]"]
11["Sweep Extrusion<br>[200, 219, 1]"]
12["Sweep Extrusion<br>[200, 219, 1]"]
13["Sweep Extrusion<br>[200, 219, 1]"]
14["Sweep Extrusion<br>[200, 219, 1]"]
15["Sweep Extrusion<br>[200, 219, 1]"]
16["Sweep Extrusion<br>[200, 219, 1]"]
17["Sweep Extrusion<br>[200, 219, 1]"]
18["Sweep Extrusion<br>[200, 219, 1]"]
19["Sweep Extrusion<br>[200, 219, 1]"]
20["Sweep Extrusion<br>[200, 219, 1]"]
21["Sweep Extrusion<br>[200, 219, 1]"]
22["Sweep Extrusion<br>[200, 219, 1]"]
23[Wall]
24[Wall]
25["Cap Start"]
@ -40,32 +40,32 @@ flowchart LR
2 --- 4
3 --- 5
3 --- 7
3 ---- 20
3 ---- 10
4 --- 6
4 --- 8
4 ---- 13
5 --- 24
4 ---- 15
5 --- 23
5 x--> 25
5 --- 30
5 --- 32
6 --- 23
5 --- 29
5 --- 31
6 --- 24
6 x--> 26
6 --- 29
6 --- 31
13 --- 23
13 --- 26
13 --- 28
13 --- 29
13 --- 31
20 --- 24
20 --- 25
20 --- 27
20 --- 30
20 --- 32
6 --- 30
6 --- 32
10 --- 23
10 --- 25
10 --- 27
10 --- 29
10 --- 31
15 --- 24
15 --- 26
15 --- 28
15 --- 30
15 --- 32
29 <--x 23
31 <--x 23
30 <--x 24
32 <--x 24
30 <--x 27
29 <--x 28
29 <--x 27
30 <--x 28
```