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

View File

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

View File

@ -474,3 +474,79 @@ extrude(profile001, length = 100)
result.first().unwrap(); result.first().unwrap();
result.last().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. /// The program that needs to be executed.
program: Node<Program>, 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. /// Argument is whether we need to reapply settings.
NoAction(bool), NoAction(bool),
} }
@ -105,7 +114,19 @@ pub(super) async fn get_changed_program(old: CacheInformation<'_>, new: CacheInf
// If the ASTs are the EXACT same we return None. // If the ASTs are the EXACT same we return None.
// We don't even need to waste time computing the digests. // We don't even need to waste time computing the digests.
if old.ast == new.ast { if old.ast == new.ast {
return CacheResult::NoAction(reapply_settings); // 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 :-( // We have to clone just because the digests are stored inline :-(
@ -119,7 +140,19 @@ pub(super) async fn get_changed_program(old: CacheInformation<'_>, new: CacheInf
// Check if the digest is the same. // Check if the digest is the same.
if old_ast.digest == new_ast.digest { if old_ast.digest == new_ast.digest {
return CacheResult::NoAction(reapply_settings); // 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. // Check if the annotations are different.
@ -242,6 +275,8 @@ fn generate_changed_program(old_ast: Node<Program>, mut new_ast: Node<Program>,
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use pretty_assertions::assert_eq;
use super::*; use super::*;
use crate::execution::{parse_execute, parse_execute_with_project_dir, ExecTestResults}; use crate::execution::{parse_execute, parse_execute_with_project_dir, ExecTestResults};
@ -658,6 +693,92 @@ extrude(profile001, length = 100)"#
) )
.await; .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); let mut exec_state = ExecState::new(&exec_ctxt);
exec_ctxt exec_ctxt
.run_concurrent( .run(
&crate::Program { &crate::Program {
ast: main.clone(), ast: main.clone(),
original_file_contents: "".to_owned(), original_file_contents: "".to_owned(),
}, },
&mut exec_state, &mut exec_state,
false,
) )
.await .await
.unwrap(); .unwrap();

View File

@ -42,6 +42,7 @@ use crate::{
parsing::ast::types::{Expr, ImportPath, NodeRef}, parsing::ast::types::{Expr, ImportPath, NodeRef},
source_range::SourceRange, source_range::SourceRange,
std::StdLib, std::StdLib,
walk::{Universe, UniverseMap},
CompilationError, ExecError, KclErrorWithOutputs, CompilationError, ExecError, KclErrorWithOutputs,
}; };
@ -586,7 +587,7 @@ impl ExecutorContext {
pub async fn run_with_caching(&self, program: crate::Program) -> Result<ExecOutcome, KclErrorWithOutputs> { pub async fn run_with_caching(&self, program: crate::Program) -> Result<ExecOutcome, KclErrorWithOutputs> {
assert!(!self.is_mock()); 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, ast: old_ast,
exec_state: mut old_state, exec_state: mut old_state,
settings: old_settings, settings: old_settings,
@ -603,7 +604,7 @@ impl ExecutorContext {
}; };
// Get the program that actually changed from the old and new information. // 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 { CacheResult::ReExecute {
clear_scene, clear_scene,
reapply_settings, reapply_settings,
@ -616,7 +617,7 @@ impl ExecutorContext {
.await .await
.is_err() .is_err()
{ {
(true, program) (true, program, None)
} else { } else {
( (
clear_scene, clear_scene,
@ -624,6 +625,52 @@ impl ExecutorContext {
ast: changed_program, ast: changed_program,
original_file_contents: program.original_file_contents, 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; let outcome = old_state.to_exec_outcome(result_env).await;
return Ok(outcome); return Ok(outcome);
} }
(true, program) (true, program, None)
} }
CacheResult::NoAction(false) => { CacheResult::NoAction(false) => {
let outcome = old_state.to_exec_outcome(result_env).await; 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) =
// Pop the execution state, since we are starting fresh. if let Some((new_universe, new_universe_map, mut new_exec_state)) = import_check_info {
let mut exec_state = old_state; // Clear the scene if the imports changed.
exec_state.reset(self); self.send_clear_scene(&mut new_exec_state, Default::default())
.await
.map_err(KclErrorWithOutputs::no_outputs)?;
// We don't do this in mock mode since there is no engine connection (new_exec_state, false, Some((new_universe, new_universe_map)))
// anyways and from the TS side we override memory and don't want to clear it. } else if clear_scene {
self.send_clear_scene(&mut exec_state, Default::default()) // Pop the execution state, since we are starting fresh.
.await let mut exec_state = old_state;
.map_err(KclErrorWithOutputs::no_outputs)?; exec_state.reset(self);
(exec_state, false) self.send_clear_scene(&mut exec_state, Default::default())
} else { .await
old_state.mut_stack().restore_env(result_env); .map_err(KclErrorWithOutputs::no_outputs)?;
(old_state, true) (exec_state, false, None)
}; } else {
old_state.mut_stack().restore_env(result_env);
(program, exec_state, preserve_mem) (old_state, true, None)
};
(program, exec_state, preserve_mem, universe_info)
} else { } else {
let mut exec_state = ExecState::new(self); let mut exec_state = ExecState::new(self);
self.send_clear_scene(&mut exec_state, Default::default()) self.send_clear_scene(&mut exec_state, Default::default())
.await .await
.map_err(KclErrorWithOutputs::no_outputs)?; .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() { if result.is_err() {
cache::bust_cache().await; cache::bust_cache().await;
@ -714,7 +769,7 @@ impl ExecutorContext {
program: &crate::Program, program: &crate::Program,
exec_state: &mut ExecState, exec_state: &mut ExecState,
) -> Result<(EnvironmentRef, Option<ModelingSessionData>), KclErrorWithOutputs> { ) -> 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 /// Perform the execution of a program using a concurrent
@ -728,47 +783,24 @@ impl ExecutorContext {
&self, &self,
program: &crate::Program, program: &crate::Program,
exec_state: &mut ExecState, exec_state: &mut ExecState,
universe_info: Option<(Universe, UniverseMap)>,
preserve_mem: bool, preserve_mem: bool,
) -> Result<(EnvironmentRef, Option<ModelingSessionData>), KclErrorWithOutputs> { ) -> 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()) self.eval_prelude(exec_state, SourceRange::synthetic())
.await .await
.map_err(KclErrorWithOutputs::no_outputs)?; .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) for modules in crate::walk::import_graph(&universe, self)
.map_err(|err| { .map_err(|err| {
let module_id_to_module_path: IndexMap<ModuleId, ModulePath> = exec_state let module_id_to_module_path: IndexMap<ModuleId, ModulePath> = exec_state
@ -821,7 +853,7 @@ impl ExecutorContext {
ModulePath::Local { value, .. } => { ModulePath::Local { value, .. } => {
// We only want to display the top-level module imports in // We only want to display the top-level module imports in
// the Feature Tree, not transitive imports. // 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 { exec_state.global.operations.push(Operation::GroupBegin {
group: Group::ModuleInstance { group: Group::ModuleInstance {
name: value.file_name().unwrap_or_default().to_string_lossy().into_owned(), 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 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 /// Perform the execution of a program. Accept all possible parameters and
/// output everything. /// output everything.
async fn inner_run( async fn inner_run(

View File

@ -238,6 +238,10 @@ impl ExecState {
self.global.id_to_source.insert(id, source.clone()); 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) { pub(super) fn add_module(&mut self, id: ModuleId, path: ModulePath, repr: ModuleRepr) {
debug_assert!(self.global.path_to_source_id.contains_key(&path)); debug_assert!(self.global.path_to_source_id.contains_key(&path));
let module_info = ModuleInfo { id, repr, 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 { pub fn in_comment(&self, pos: usize) -> bool {
// Check if its in the body. // Check if its in the body.
if self.non_code_meta.in_comment(pos) { if self.non_code_meta.in_comment(pos) {

View File

@ -21,8 +21,9 @@ type Dependency = (String, String);
type Graph = Vec<Dependency>; type Graph = Vec<Dependency>;
type DependencyInfo = (AstNode<ImportStatement>, ModuleId, ModulePath, ModuleRepr); pub(crate) type DependencyInfo = (AstNode<ImportStatement>, ModuleId, ModulePath, ModuleRepr);
type Universe = HashMap<String, DependencyInfo>; 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. /// Process a number of programs, returning the graph of dependencies.
/// ///
@ -184,7 +185,7 @@ pub(crate) async fn import_universe(
repr: &ModuleRepr, repr: &ModuleRepr,
out: &mut Universe, out: &mut Universe,
exec_state: &mut ExecState, exec_state: &mut ExecState,
) -> Result<HashMap<PathBuf, crate::parsing::ast::types::Node<ImportStatement>>, KclError> { ) -> Result<UniverseMap, KclError> {
let modules = import_dependencies(repr, ctx)?; let modules = import_dependencies(repr, ctx)?;
let mut module_imports = HashMap::new(); let mut module_imports = HashMap::new();
for (filename, import_stmt, module_path) in modules { 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_visitor::Visitable;
pub use ast_walk::walk; pub use ast_walk::walk;
pub use import_graph::import_graph; 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 ```mermaid
flowchart LR flowchart LR
subgraph path3 [Path] subgraph path3 [Path]
3["Path<br>[74, 114, 8]"] 3["Path<br>[74, 114, 1]"]
5["Segment<br>[120, 137, 8]"] 5["Segment<br>[120, 137, 1]"]
6["Segment<br>[143, 161, 8]"] 6["Segment<br>[143, 161, 1]"]
7["Segment<br>[167, 185, 8]"] 7["Segment<br>[167, 185, 1]"]
8["Segment<br>[191, 247, 8]"] 8["Segment<br>[191, 247, 1]"]
9["Segment<br>[253, 260, 8]"] 9["Segment<br>[253, 260, 1]"]
15[Solid2d] 15[Solid2d]
end end
subgraph path4 [Path] subgraph path4 [Path]
4["Path<br>[74, 112, 9]"] 4["Path<br>[74, 112, 2]"]
10["Segment<br>[118, 135, 9]"] 10["Segment<br>[118, 135, 2]"]
11["Segment<br>[141, 159, 9]"] 11["Segment<br>[141, 159, 2]"]
12["Segment<br>[165, 183, 9]"] 12["Segment<br>[165, 183, 2]"]
13["Segment<br>[189, 245, 9]"] 13["Segment<br>[189, 245, 2]"]
14["Segment<br>[251, 258, 9]"] 14["Segment<br>[251, 258, 2]"]
16[Solid2d] 16[Solid2d]
end end
1["Plane<br>[47, 64, 8]"] 1["Plane<br>[47, 64, 1]"]
2["Plane<br>[47, 64, 9]"] 2["Plane<br>[47, 64, 2]"]
17["Sweep Extrusion<br>[266, 288, 8]"] 17["Sweep Extrusion<br>[266, 288, 1]"]
18["Sweep Extrusion<br>[264, 286, 9]"] 18["Sweep Extrusion<br>[264, 286, 2]"]
19[Wall] 19[Wall]
20[Wall] 20[Wall]
21[Wall] 21[Wall]
@ -66,44 +66,44 @@ flowchart LR
4 --- 14 4 --- 14
4 --- 16 4 --- 16
4 ---- 18 4 ---- 18
5 --- 24 5 --- 25
5 x--> 27 5 x--> 28
5 --- 37 5 --- 36
5 --- 46 5 --- 43
6 --- 25 6 --- 24
6 x--> 27 6 x--> 28
6 --- 35 6 --- 37
6 --- 45 6 --- 45
7 --- 26 7 --- 23
7 x--> 27 7 x--> 28
7 --- 36 7 --- 35
7 --- 44 7 --- 44
8 --- 23 8 --- 26
8 x--> 27 8 x--> 28
8 --- 38 8 --- 38
8 --- 43 8 --- 46
10 --- 19 10 --- 19
10 x--> 28 10 x--> 27
10 --- 31 10 --- 31
10 --- 39 10 --- 40
11 --- 22 11 --- 22
11 x--> 28 11 x--> 27
11 --- 34 11 --- 33
11 --- 41 11 --- 41
12 --- 21 12 --- 21
12 x--> 28 12 x--> 27
12 --- 32 12 --- 32
12 --- 42 12 --- 39
13 --- 20 13 --- 20
13 x--> 28 13 x--> 27
13 --- 33 13 --- 34
13 --- 40 13 --- 42
17 --- 23 17 --- 23
17 --- 24 17 --- 24
17 --- 25 17 --- 25
17 --- 26 17 --- 26
17 --- 27 17 --- 28
17 --- 29 17 --- 30
17 --- 35 17 --- 35
17 --- 36 17 --- 36
17 --- 37 17 --- 37
@ -116,8 +116,8 @@ flowchart LR
18 --- 20 18 --- 20
18 --- 21 18 --- 21
18 --- 22 18 --- 22
18 --- 28 18 --- 27
18 --- 30 18 --- 29
18 --- 31 18 --- 31
18 --- 32 18 --- 32
18 --- 33 18 --- 33
@ -127,35 +127,35 @@ flowchart LR
18 --- 41 18 --- 41
18 --- 42 18 --- 42
31 <--x 19 31 <--x 19
39 <--x 19
40 <--x 19 40 <--x 19
33 <--x 20 42 <--x 19
40 <--x 20 34 <--x 20
39 <--x 20
42 <--x 20 42 <--x 20
32 <--x 21 32 <--x 21
39 <--x 21
41 <--x 21 41 <--x 21
42 <--x 21 33 <--x 22
34 <--x 22 40 <--x 22
39 <--x 22
41 <--x 22 41 <--x 22
38 <--x 23 35 <--x 23
43 <--x 23
44 <--x 23 44 <--x 23
45 <--x 23
37 <--x 24 37 <--x 24
43 <--x 24 43 <--x 24
46 <--x 24 45 <--x 24
35 <--x 25 36 <--x 25
45 <--x 25 43 <--x 25
46 <--x 25 46 <--x 25
36 <--x 26 38 <--x 26
44 <--x 26 44 <--x 26
45 <--x 26 46 <--x 26
35 <--x 29 31 <--x 29
36 <--x 29 32 <--x 29
37 <--x 29 33 <--x 29
38 <--x 29 34 <--x 29
31 <--x 30 35 <--x 30
32 <--x 30 36 <--x 30
33 <--x 30 37 <--x 30
34 <--x 30 38 <--x 30
``` ```

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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