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:
@ -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*
|
||||
|
@ -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)
|
||||
|
@ -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 |
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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(
|
||||
|
@ -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 };
|
||||
|
@ -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) {
|
||||
|
@ -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 {
|
||||
|
@ -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};
|
||||
|
@ -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
|
||||
```
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
```
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -3598,7 +3598,7 @@ description: Variables in memory after executing import_async.kcl
|
||||
},
|
||||
"screw": {
|
||||
"type": "Module",
|
||||
"value": 8
|
||||
"value": 1
|
||||
},
|
||||
"start": {
|
||||
"type": "Sketch",
|
||||
|
@ -5,7 +5,7 @@ description: Variables in memory after executing import_foreign.kcl
|
||||
{
|
||||
"cube": {
|
||||
"type": "Module",
|
||||
"value": 8
|
||||
"value": 1
|
||||
},
|
||||
"model": {
|
||||
"type": "ImportedGeometry",
|
||||
|
@ -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
|
||||
```
|
||||
|
@ -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
|
||||
|
@ -5,6 +5,6 @@ description: Variables in memory after executing import_transform.kcl
|
||||
{
|
||||
"screw": {
|
||||
"type": "Module",
|
||||
"value": 8
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
---
|
||||
|
@ -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"]
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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"]
|
||||
|
@ -113,6 +113,6 @@ description: Variables in memory after executing import_whole_transitive_import.
|
||||
},
|
||||
"part": {
|
||||
"type": "Module",
|
||||
"value": 8
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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]
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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",
|
||||
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -198,7 +198,7 @@ description: Variables in memory after executing pipe-flange-assembly.kcl
|
||||
},
|
||||
"gasket": {
|
||||
"type": "Module",
|
||||
"value": 9
|
||||
"value": 2
|
||||
},
|
||||
"gasketInnerDiameter": {
|
||||
"type": "Number",
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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",
|
||||
|
@ -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
|
||||
|
@ -5,6 +5,6 @@ description: Variables in memory after executing module_return_using_var.kcl
|
||||
{
|
||||
"cube": {
|
||||
"type": "Module",
|
||||
"value": 8
|
||||
"value": 1
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
```
|
||||
|
Reference in New Issue
Block a user