BREAKING: Change array functions to call user function with keyword args (#6779)
* Change array functions to call user function with keyword args * Fix KCL to use keyword params * Remove unneeded positional call code * Update docs * Update output
This commit is contained in:
@ -50,7 +50,7 @@ r = 10 // radius
|
|||||||
// Call `map`, using an anonymous function instead of a named one.
|
// Call `map`, using an anonymous function instead of a named one.
|
||||||
circles = map(
|
circles = map(
|
||||||
[1..3],
|
[1..3],
|
||||||
f = fn(id) {
|
f = fn(@id) {
|
||||||
return startSketchOn(XY)
|
return startSketchOn(XY)
|
||||||
|> circle(center = [id * 2 * r, 0], radius = r)
|
|> circle(center = [id * 2 * r, 0], radius = r)
|
||||||
},
|
},
|
||||||
|
|||||||
@ -34,8 +34,8 @@ reduce(
|
|||||||
|
|
||||||
```kcl
|
```kcl
|
||||||
// This function adds two numbers.
|
// This function adds two numbers.
|
||||||
fn add(a, b) {
|
fn add(@a, accum) {
|
||||||
return a + b
|
return a + accum
|
||||||
}
|
}
|
||||||
|
|
||||||
// This function adds an array of numbers.
|
// This function adds an array of numbers.
|
||||||
@ -49,7 +49,7 @@ fn sum(@arr) {
|
|||||||
fn sum(arr):
|
fn sum(arr):
|
||||||
sumSoFar = 0
|
sumSoFar = 0
|
||||||
for i in arr:
|
for i in arr:
|
||||||
sumSoFar = add(sumSoFar, i)
|
sumSoFar = add(i, sumSoFar)
|
||||||
return sumSoFar */
|
return sumSoFar */
|
||||||
|
|
||||||
// We use `assert` to check that our `sum` function gives the
|
// We use `assert` to check that our `sum` function gives the
|
||||||
@ -72,8 +72,8 @@ arr = [1, 2, 3]
|
|||||||
sum = reduce(
|
sum = reduce(
|
||||||
arr,
|
arr,
|
||||||
initial = 0,
|
initial = 0,
|
||||||
f = fn(i, result_so_far) {
|
f = fn(@i, accum) {
|
||||||
return i + result_so_far
|
return i + accum
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -105,11 +105,11 @@ fn decagon(@radius) {
|
|||||||
fullDecagon = reduce(
|
fullDecagon = reduce(
|
||||||
[1..10],
|
[1..10],
|
||||||
initial = startOfDecagonSketch,
|
initial = startOfDecagonSketch,
|
||||||
f = fn(i, partialDecagon) {
|
f = fn(@i, accum) {
|
||||||
// Draw one edge of the decagon.
|
// Draw one edge of the decagon.
|
||||||
x = cos(stepAngle * i) * radius
|
x = cos(stepAngle * i) * radius
|
||||||
y = sin(stepAngle * i) * radius
|
y = sin(stepAngle * i) * radius
|
||||||
return line(partialDecagon, end = [x, y])
|
return line(accum, end = [x, y])
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -133826,7 +133826,7 @@
|
|||||||
false
|
false
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"r = 10 // radius\n// Call `map`, using an anonymous function instead of a named one.\ncircles = map(\n [1..3],\n f = fn(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n },\n)",
|
"r = 10 // radius\n// Call `map`, using an anonymous function instead of a named one.\ncircles = map(\n [1..3],\n f = fn(@id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n },\n)",
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -232586,15 +232586,15 @@
|
|||||||
"deprecated": false,
|
"deprecated": false,
|
||||||
"examples": [
|
"examples": [
|
||||||
[
|
[
|
||||||
"// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(@arr) {\n return reduce(arr, initial = 0, f = add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum([1, 2, 3]),\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)",
|
"// This function adds two numbers.\nfn add(@a, accum) {\n return a + accum\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(@arr) {\n return reduce(arr, initial = 0, f = add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(i, sumSoFar)\n return sumSoFar */\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum([1, 2, 3]),\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)",
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(\n arr,\n initial = 0,\n f = fn(i, result_so_far) {\n return i + result_so_far\n },\n)\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum,\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)",
|
"// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(\n arr,\n initial = 0,\n f = fn(@i, accum) {\n return i + accum\n },\n)\n\n// We use `assert` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassert(\n sum,\n isEqualTo = 6,\n tolerance = 0.1,\n error = \"1 + 2 + 3 summed is 6\",\n)",
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"// Declare a function that sketches a decagon.\nfn decagon(@radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = (1 / 10 * TAU): number(rad)\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [cos(0) * radius, sin(0) * radius])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce(\n [1..10],\n initial = startOfDecagonSketch,\n f = fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n },\n )\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = ((1/10) * TAU): number(rad)\n plane = startSketchOn(XY)\n startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()",
|
"// Declare a function that sketches a decagon.\nfn decagon(@radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = (1 / 10 * TAU): number(rad)\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfile(at = [cos(0) * radius, sin(0) * radius])\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce(\n [1..10],\n initial = startOfDecagonSketch,\n f = fn(@i, accum) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(accum, end = [x, y])\n },\n )\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = ((1/10) * TAU): number(rad)\n plane = startSketchOn(XY)\n startOfDecagonSketch = startProfile(plane, at = [(cos(0)*radius), (sin(0) * radius)])\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()",
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
@ -51,7 +51,7 @@ faceRotations = [
|
|||||||
// Create faces by mapping over the rotations array
|
// Create faces by mapping over the rotations array
|
||||||
dodecFaces = map(
|
dodecFaces = map(
|
||||||
faceRotations,
|
faceRotations,
|
||||||
f = fn(rotation) {
|
f = fn(@rotation) {
|
||||||
return createFaceTemplate(rotation[3])
|
return createFaceTemplate(rotation[3])
|
||||||
|> rotate(
|
|> rotate(
|
||||||
pitch = rotation[0],
|
pitch = rotation[0],
|
||||||
@ -66,15 +66,15 @@ fn calculateArrayLength(@arr) {
|
|||||||
return reduce(
|
return reduce(
|
||||||
arr,
|
arr,
|
||||||
initial = 0,
|
initial = 0,
|
||||||
f = fn(item, accumulator) {
|
f = fn(@item, accum) {
|
||||||
return accumulator + 1
|
return accum + 1
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn createIntersection(@solids) {
|
fn createIntersection(@solids) {
|
||||||
fn reduceIntersect(previous, current) {
|
fn reduceIntersect(@previous, accum) {
|
||||||
return intersect([previous, current])
|
return intersect([previous, accum])
|
||||||
}
|
}
|
||||||
lastIndex = calculateArrayLength(solids) - 1
|
lastIndex = calculateArrayLength(solids) - 1
|
||||||
lastSolid = solids[lastIndex]
|
lastSolid = solids[lastIndex]
|
||||||
|
|||||||
@ -19,7 +19,7 @@ gearHeight = 3
|
|||||||
cmo = 101
|
cmo = 101
|
||||||
rs = map(
|
rs = map(
|
||||||
[0..cmo],
|
[0..cmo],
|
||||||
f = fn(i) {
|
f = fn(@i) {
|
||||||
return baseDiameter / 2 + i / cmo * (tipDiameter - baseDiameter) / 2
|
return baseDiameter / 2 + i / cmo * (tipDiameter - baseDiameter) / 2
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -27,7 +27,7 @@ rs = map(
|
|||||||
// Calculate operating pressure angle
|
// Calculate operating pressure angle
|
||||||
angles = map(
|
angles = map(
|
||||||
rs,
|
rs,
|
||||||
f = fn(r) {
|
f = fn(@r) {
|
||||||
return units::toDegrees(acos(baseDiameter / 2 / r))
|
return units::toDegrees(acos(baseDiameter / 2 / r))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -35,7 +35,7 @@ angles = map(
|
|||||||
// Calculate the involute function
|
// Calculate the involute function
|
||||||
invas = map(
|
invas = map(
|
||||||
angles,
|
angles,
|
||||||
f = fn(a) {
|
f = fn(@a) {
|
||||||
return tan(a) - units::toRadians(a)
|
return tan(a) - units::toRadians(a)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -43,14 +43,14 @@ invas = map(
|
|||||||
// Map the involute curve
|
// Map the involute curve
|
||||||
xs = map(
|
xs = map(
|
||||||
[0..cmo],
|
[0..cmo],
|
||||||
f = fn(i) {
|
f = fn(@i) {
|
||||||
return rs[i] * cos(invas[i]: number(rad))
|
return rs[i] * cos(invas[i]: number(rad))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
ys = map(
|
ys = map(
|
||||||
[0..cmo],
|
[0..cmo],
|
||||||
f = fn(i) {
|
f = fn(@i) {
|
||||||
return rs[i] * sin(invas[i]: number(rad))
|
return rs[i] * sin(invas[i]: number(rad))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -63,15 +63,15 @@ body = startSketchOn(XY)
|
|||||||
toothAngle = 360 / nTeeth / 1.5
|
toothAngle = 360 / nTeeth / 1.5
|
||||||
|
|
||||||
// Plot the involute curve
|
// Plot the involute curve
|
||||||
fn leftInvolute(i, sg) {
|
fn leftInvolute(@i, accum) {
|
||||||
j = 100 - i // iterate backwards
|
j = 100 - i // iterate backwards
|
||||||
return line(sg, endAbsolute = [xs[j], ys[j]])
|
return line(accum, endAbsolute = [xs[j], ys[j]])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rightInvolute(i, sg) {
|
fn rightInvolute(@i, accum) {
|
||||||
x = rs[i] * cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
x = rs[i] * cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||||
y = -rs[i] * sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
y = -rs[i] * sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||||
return line(sg, endAbsolute = [x, y])
|
return line(accum, endAbsolute = [x, y])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw gear teeth
|
// Draw gear teeth
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
@ -1835,89 +1835,6 @@ impl Node<PipeExpression> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// For each argument given,
|
|
||||||
/// assign it to a parameter of the function, in the given block of function memory.
|
|
||||||
/// Returns Err if too few/too many arguments were given for the function.
|
|
||||||
fn assign_args_to_params(
|
|
||||||
function_expression: NodeRef<'_, FunctionExpression>,
|
|
||||||
args: Vec<Arg>,
|
|
||||||
exec_state: &mut ExecState,
|
|
||||||
) -> Result<(), KclError> {
|
|
||||||
let num_args = function_expression.number_of_args();
|
|
||||||
let (min_params, max_params) = num_args.into_inner();
|
|
||||||
let n = args.len();
|
|
||||||
|
|
||||||
// Check if the user supplied too many arguments
|
|
||||||
// (we'll check for too few arguments below).
|
|
||||||
let err_wrong_number_args = KclError::Semantic(KclErrorDetails {
|
|
||||||
message: if min_params == max_params {
|
|
||||||
format!("Expected {min_params} arguments, got {n}")
|
|
||||||
} else {
|
|
||||||
format!("Expected {min_params}-{max_params} arguments, got {n}")
|
|
||||||
},
|
|
||||||
source_ranges: vec![function_expression.into()],
|
|
||||||
});
|
|
||||||
if n > max_params {
|
|
||||||
return Err(err_wrong_number_args);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the arguments to the memory. A new call frame should have already
|
|
||||||
// been created.
|
|
||||||
for (index, param) in function_expression.params.iter().enumerate() {
|
|
||||||
if let Some(arg) = args.get(index) {
|
|
||||||
// Argument was provided.
|
|
||||||
|
|
||||||
if let Some(ty) = ¶m.type_ {
|
|
||||||
let value = arg
|
|
||||||
.value
|
|
||||||
.coerce(
|
|
||||||
&RuntimeType::from_parsed(ty.inner.clone(), exec_state, arg.source_range).unwrap(),
|
|
||||||
exec_state,
|
|
||||||
)
|
|
||||||
.map_err(|e| {
|
|
||||||
let mut message = format!(
|
|
||||||
"Argument requires a value with type `{}`, but found {}",
|
|
||||||
ty.inner,
|
|
||||||
arg.value.human_friendly_type(),
|
|
||||||
);
|
|
||||||
if let Some(ty) = e.explicit_coercion {
|
|
||||||
// TODO if we have access to the AST for the argument we could choose which example to suggest.
|
|
||||||
message = format!("{message}\n\nYou may need to add information about the type of the argument, for example:\n using a numeric suffix: `42{ty}`\n or using type ascription: `foo(): number({ty})`");
|
|
||||||
}
|
|
||||||
KclError::Semantic(KclErrorDetails {
|
|
||||||
message,
|
|
||||||
source_ranges: vec![arg.source_range],
|
|
||||||
})
|
|
||||||
})?;
|
|
||||||
exec_state
|
|
||||||
.mut_stack()
|
|
||||||
.add(param.identifier.name.clone(), value, (¶m.identifier).into())?;
|
|
||||||
} else {
|
|
||||||
exec_state.mut_stack().add(
|
|
||||||
param.identifier.name.clone(),
|
|
||||||
arg.value.clone(),
|
|
||||||
(¶m.identifier).into(),
|
|
||||||
)?;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Argument was not provided.
|
|
||||||
if let Some(ref default_val) = param.default_value {
|
|
||||||
// If the corresponding parameter is optional,
|
|
||||||
// then it's fine, the user doesn't need to supply it.
|
|
||||||
let value = KclValue::from_default_param(default_val.clone(), exec_state);
|
|
||||||
exec_state
|
|
||||||
.mut_stack()
|
|
||||||
.add(param.identifier.name.clone(), value, (¶m.identifier).into())?;
|
|
||||||
} else {
|
|
||||||
// But if the corresponding parameter was required,
|
|
||||||
// then the user has called with too few arguments.
|
|
||||||
return Err(err_wrong_number_args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn type_check_params_kw(
|
fn type_check_params_kw(
|
||||||
fn_name: Option<&str>,
|
fn_name: Option<&str>,
|
||||||
function_expression: NodeRef<'_, FunctionExpression>,
|
function_expression: NodeRef<'_, FunctionExpression>,
|
||||||
@ -2102,42 +2019,6 @@ fn coerce_result_type(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn call_user_defined_function(
|
|
||||||
args: Vec<Arg>,
|
|
||||||
memory: EnvironmentRef,
|
|
||||||
function_expression: NodeRef<'_, FunctionExpression>,
|
|
||||||
exec_state: &mut ExecState,
|
|
||||||
ctx: &ExecutorContext,
|
|
||||||
) -> Result<Option<KclValue>, KclError> {
|
|
||||||
// Create a new environment to execute the function body in so that local
|
|
||||||
// variables shadow variables in the parent scope. The new environment's
|
|
||||||
// parent should be the environment of the closure.
|
|
||||||
exec_state.mut_stack().push_new_env_for_call(memory);
|
|
||||||
if let Err(e) = assign_args_to_params(function_expression, args, exec_state) {
|
|
||||||
exec_state.mut_stack().pop_env();
|
|
||||||
return Err(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute the function body using the memory we just created.
|
|
||||||
let result = ctx
|
|
||||||
.exec_block(&function_expression.body, exec_state, BodyType::Block)
|
|
||||||
.await;
|
|
||||||
let mut result = result.map(|_| {
|
|
||||||
exec_state
|
|
||||||
.stack()
|
|
||||||
.get(memory::RETURN_NAME, function_expression.as_source_range())
|
|
||||||
.ok()
|
|
||||||
.cloned()
|
|
||||||
});
|
|
||||||
|
|
||||||
result = coerce_result_type(result, function_expression, exec_state);
|
|
||||||
|
|
||||||
// Restore the previous memory.
|
|
||||||
exec_state.mut_stack().pop_env();
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn call_user_defined_function_kw(
|
async fn call_user_defined_function_kw(
|
||||||
fn_name: Option<&str>,
|
fn_name: Option<&str>,
|
||||||
args: crate::std::args::KwArgs,
|
args: crate::std::args::KwArgs,
|
||||||
@ -2176,41 +2057,6 @@ async fn call_user_defined_function_kw(
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FunctionSource {
|
impl FunctionSource {
|
||||||
pub async fn call(
|
|
||||||
&self,
|
|
||||||
fn_name: Option<String>,
|
|
||||||
exec_state: &mut ExecState,
|
|
||||||
ctx: &ExecutorContext,
|
|
||||||
mut args: Vec<Arg>,
|
|
||||||
callsite: SourceRange,
|
|
||||||
) -> Result<Option<KclValue>, KclError> {
|
|
||||||
match self {
|
|
||||||
FunctionSource::Std { props, .. } => {
|
|
||||||
if args.len() <= 1 {
|
|
||||||
let args = crate::std::Args::new_kw(
|
|
||||||
KwArgs {
|
|
||||||
unlabeled: args.pop(),
|
|
||||||
labeled: IndexMap::new(),
|
|
||||||
},
|
|
||||||
callsite,
|
|
||||||
ctx.clone(),
|
|
||||||
exec_state.pipe_value().map(|v| Arg::new(v.clone(), callsite)),
|
|
||||||
);
|
|
||||||
self.call_kw(fn_name, exec_state, ctx, args, callsite).await
|
|
||||||
} else {
|
|
||||||
Err(KclError::Semantic(KclErrorDetails {
|
|
||||||
message: format!("{} requires its arguments to be labelled", props.name),
|
|
||||||
source_ranges: vec![callsite],
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FunctionSource::User { ast, memory, .. } => {
|
|
||||||
call_user_defined_function(args, *memory, ast, exec_state, ctx).await
|
|
||||||
}
|
|
||||||
FunctionSource::None => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn call_kw(
|
pub async fn call_kw(
|
||||||
&self,
|
&self,
|
||||||
fn_name: Option<String>,
|
fn_name: Option<String>,
|
||||||
@ -2404,7 +2250,7 @@ mod test {
|
|||||||
(
|
(
|
||||||
"all params required, and all given, should be OK",
|
"all params required, and all given, should be OK",
|
||||||
vec![req_param("x")],
|
vec![req_param("x")],
|
||||||
vec![mem(1)],
|
vec![("x", mem(1))],
|
||||||
Ok(additional_program_memory(&[("x".to_owned(), mem(1))])),
|
Ok(additional_program_memory(&[("x".to_owned(), mem(1))])),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -2413,7 +2259,7 @@ mod test {
|
|||||||
vec![],
|
vec![],
|
||||||
Err(KclError::Semantic(KclErrorDetails {
|
Err(KclError::Semantic(KclErrorDetails {
|
||||||
source_ranges: vec![SourceRange::default()],
|
source_ranges: vec![SourceRange::default()],
|
||||||
message: "Expected 1 arguments, got 0".to_owned(),
|
message: "This function requires a parameter x, but you haven't passed it one.".to_owned(),
|
||||||
})),
|
})),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
@ -2428,13 +2274,13 @@ mod test {
|
|||||||
vec![],
|
vec![],
|
||||||
Err(KclError::Semantic(KclErrorDetails {
|
Err(KclError::Semantic(KclErrorDetails {
|
||||||
source_ranges: vec![SourceRange::default()],
|
source_ranges: vec![SourceRange::default()],
|
||||||
message: "Expected 1-2 arguments, got 0".to_owned(),
|
message: "This function requires a parameter x, but you haven't passed it one.".to_owned(),
|
||||||
})),
|
})),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"mixed params, minimum given, should be OK",
|
"mixed params, minimum given, should be OK",
|
||||||
vec![req_param("x"), opt_param("y")],
|
vec![req_param("x"), opt_param("y")],
|
||||||
vec![mem(1)],
|
vec![("x", mem(1))],
|
||||||
Ok(additional_program_memory(&[
|
Ok(additional_program_memory(&[
|
||||||
("x".to_owned(), mem(1)),
|
("x".to_owned(), mem(1)),
|
||||||
("y".to_owned(), KclValue::none()),
|
("y".to_owned(), KclValue::none()),
|
||||||
@ -2443,21 +2289,12 @@ mod test {
|
|||||||
(
|
(
|
||||||
"mixed params, maximum given, should be OK",
|
"mixed params, maximum given, should be OK",
|
||||||
vec![req_param("x"), opt_param("y")],
|
vec![req_param("x"), opt_param("y")],
|
||||||
vec![mem(1), mem(2)],
|
vec![("x", mem(1)), ("y", mem(2))],
|
||||||
Ok(additional_program_memory(&[
|
Ok(additional_program_memory(&[
|
||||||
("x".to_owned(), mem(1)),
|
("x".to_owned(), mem(1)),
|
||||||
("y".to_owned(), mem(2)),
|
("y".to_owned(), mem(2)),
|
||||||
])),
|
])),
|
||||||
),
|
),
|
||||||
(
|
|
||||||
"mixed params, too many given",
|
|
||||||
vec![req_param("x"), opt_param("y")],
|
|
||||||
vec![mem(1), mem(2), mem(3)],
|
|
||||||
Err(KclError::Semantic(KclErrorDetails {
|
|
||||||
source_ranges: vec![SourceRange::default()],
|
|
||||||
message: "Expected 1-2 arguments, got 3".to_owned(),
|
|
||||||
})),
|
|
||||||
),
|
|
||||||
] {
|
] {
|
||||||
// Run each test.
|
// Run each test.
|
||||||
let func_expr = &Node::no_src(FunctionExpression {
|
let func_expr = &Node::no_src(FunctionExpression {
|
||||||
@ -2466,7 +2303,17 @@ mod test {
|
|||||||
return_type: None,
|
return_type: None,
|
||||||
digest: None,
|
digest: None,
|
||||||
});
|
});
|
||||||
let args = args.into_iter().map(Arg::synthetic).collect();
|
let labeled = args
|
||||||
|
.iter()
|
||||||
|
.map(|(name, value)| {
|
||||||
|
let arg = Arg::new(value.clone(), SourceRange::default());
|
||||||
|
((*name).to_owned(), arg)
|
||||||
|
})
|
||||||
|
.collect::<IndexMap<_, _>>();
|
||||||
|
let args = KwArgs {
|
||||||
|
unlabeled: None,
|
||||||
|
labeled,
|
||||||
|
};
|
||||||
let exec_ctxt = ExecutorContext {
|
let exec_ctxt = ExecutorContext {
|
||||||
engine: Arc::new(Box::new(
|
engine: Arc::new(Box::new(
|
||||||
crate::engine::conn_mock::EngineConnection::new().await.unwrap(),
|
crate::engine::conn_mock::EngineConnection::new().await.unwrap(),
|
||||||
@ -2478,7 +2325,8 @@ mod test {
|
|||||||
};
|
};
|
||||||
let mut exec_state = ExecState::new(&exec_ctxt);
|
let mut exec_state = ExecState::new(&exec_ctxt);
|
||||||
exec_state.mod_local.stack = Stack::new_for_tests();
|
exec_state.mod_local.stack = Stack::new_for_tests();
|
||||||
let actual = assign_args_to_params(func_expr, args, &mut exec_state).map(|_| exec_state.mod_local.stack);
|
let actual =
|
||||||
|
assign_args_to_params_kw(None, func_expr, args, &mut exec_state).map(|_| exec_state.mod_local.stack);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
actual, expected,
|
actual, expected,
|
||||||
"failed test '{test_name}':\ngot {actual:?}\nbut expected\n{expected:?}"
|
"failed test '{test_name}':\ngot {actual:?}\nbut expected\n{expected:?}"
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
|
use indexmap::IndexMap;
|
||||||
use kcl_derive_docs::stdlib;
|
use kcl_derive_docs::stdlib;
|
||||||
|
|
||||||
use super::{args::Arg, Args};
|
use super::{
|
||||||
|
args::{Arg, KwArgs},
|
||||||
|
Args,
|
||||||
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
errors::{KclError, KclErrorDetails},
|
errors::{KclError, KclErrorDetails},
|
||||||
execution::{
|
execution::{
|
||||||
@ -44,7 +48,7 @@ pub async fn map(exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kcl
|
|||||||
/// // Call `map`, using an anonymous function instead of a named one.
|
/// // Call `map`, using an anonymous function instead of a named one.
|
||||||
/// circles = map(
|
/// circles = map(
|
||||||
/// [1..3],
|
/// [1..3],
|
||||||
/// f = fn(id) {
|
/// f = fn(@id) {
|
||||||
/// return startSketchOn(XY)
|
/// return startSketchOn(XY)
|
||||||
/// |> circle( center= [id * 2 * r, 0], radius= r)
|
/// |> circle( center= [id * 2 * r, 0], radius= r)
|
||||||
/// }
|
/// }
|
||||||
@ -81,9 +85,17 @@ async fn call_map_closure(
|
|||||||
exec_state: &mut ExecState,
|
exec_state: &mut ExecState,
|
||||||
ctxt: &ExecutorContext,
|
ctxt: &ExecutorContext,
|
||||||
) -> Result<KclValue, KclError> {
|
) -> Result<KclValue, KclError> {
|
||||||
let output = map_fn
|
let kw_args = KwArgs {
|
||||||
.call(None, exec_state, ctxt, vec![Arg::synthetic(input)], source_range)
|
unlabeled: Some(Arg::new(input, source_range)),
|
||||||
.await?;
|
labeled: Default::default(),
|
||||||
|
};
|
||||||
|
let args = Args::new_kw(
|
||||||
|
kw_args,
|
||||||
|
source_range,
|
||||||
|
ctxt.clone(),
|
||||||
|
exec_state.pipe_value().map(|v| Arg::new(v.clone(), source_range)),
|
||||||
|
);
|
||||||
|
let output = map_fn.call_kw(None, exec_state, ctxt, args, source_range).await?;
|
||||||
let source_ranges = vec![source_range];
|
let source_ranges = vec![source_range];
|
||||||
let output = output.ok_or_else(|| {
|
let output = output.ok_or_else(|| {
|
||||||
KclError::Semantic(KclErrorDetails {
|
KclError::Semantic(KclErrorDetails {
|
||||||
@ -106,7 +118,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
|||||||
/// using the previous value and the element.
|
/// using the previous value and the element.
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// // This function adds two numbers.
|
/// // This function adds two numbers.
|
||||||
/// fn add(a, b) { return a + b }
|
/// fn add(@a, accum) { return a + accum }
|
||||||
///
|
///
|
||||||
/// // This function adds an array of numbers.
|
/// // This function adds an array of numbers.
|
||||||
/// // It uses the `reduce` function, to call the `add` function on every
|
/// // It uses the `reduce` function, to call the `add` function on every
|
||||||
@ -118,7 +130,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
|||||||
/// fn sum(arr):
|
/// fn sum(arr):
|
||||||
/// sumSoFar = 0
|
/// sumSoFar = 0
|
||||||
/// for i in arr:
|
/// for i in arr:
|
||||||
/// sumSoFar = add(sumSoFar, i)
|
/// sumSoFar = add(i, sumSoFar)
|
||||||
/// return sumSoFar
|
/// return sumSoFar
|
||||||
/// */
|
/// */
|
||||||
///
|
///
|
||||||
@ -131,7 +143,7 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
|||||||
/// // an anonymous `add` function as its parameter, instead of declaring a
|
/// // an anonymous `add` function as its parameter, instead of declaring a
|
||||||
/// // named function outside.
|
/// // named function outside.
|
||||||
/// arr = [1, 2, 3]
|
/// arr = [1, 2, 3]
|
||||||
/// sum = reduce(arr, initial = 0, f = fn (i, result_so_far) { return i + result_so_far })
|
/// sum = reduce(arr, initial = 0, f = fn (@i, accum) { return i + accum })
|
||||||
///
|
///
|
||||||
/// // We use `assert` to check that our `sum` function gives the
|
/// // We use `assert` to check that our `sum` function gives the
|
||||||
/// // expected result. It's good to check your work!
|
/// // expected result. It's good to check your work!
|
||||||
@ -150,11 +162,11 @@ pub async fn reduce(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
|||||||
/// // Use a `reduce` to draw the remaining decagon sides.
|
/// // Use a `reduce` to draw the remaining decagon sides.
|
||||||
/// // For each number in the array 1..10, run the given function,
|
/// // For each number in the array 1..10, run the given function,
|
||||||
/// // which takes a partially-sketched decagon and adds one more edge to it.
|
/// // which takes a partially-sketched decagon and adds one more edge to it.
|
||||||
/// fullDecagon = reduce([1..10], initial = startOfDecagonSketch, f = fn(i, partialDecagon) {
|
/// fullDecagon = reduce([1..10], initial = startOfDecagonSketch, f = fn(@i, accum) {
|
||||||
/// // Draw one edge of the decagon.
|
/// // Draw one edge of the decagon.
|
||||||
/// x = cos(stepAngle * i) * radius
|
/// x = cos(stepAngle * i) * radius
|
||||||
/// y = sin(stepAngle * i) * radius
|
/// y = sin(stepAngle * i) * radius
|
||||||
/// return line(partialDecagon, end = [x, y])
|
/// return line(accum, end = [x, y])
|
||||||
/// })
|
/// })
|
||||||
///
|
///
|
||||||
/// return fullDecagon
|
/// return fullDecagon
|
||||||
@ -209,16 +221,27 @@ async fn inner_reduce<'a>(
|
|||||||
|
|
||||||
async fn call_reduce_closure(
|
async fn call_reduce_closure(
|
||||||
elem: KclValue,
|
elem: KclValue,
|
||||||
start: KclValue,
|
accum: KclValue,
|
||||||
reduce_fn: &FunctionSource,
|
reduce_fn: &FunctionSource,
|
||||||
source_range: SourceRange,
|
source_range: SourceRange,
|
||||||
exec_state: &mut ExecState,
|
exec_state: &mut ExecState,
|
||||||
ctxt: &ExecutorContext,
|
ctxt: &ExecutorContext,
|
||||||
) -> Result<KclValue, KclError> {
|
) -> Result<KclValue, KclError> {
|
||||||
// Call the reduce fn for this repetition.
|
// Call the reduce fn for this repetition.
|
||||||
let reduce_fn_args = vec![Arg::synthetic(elem), Arg::synthetic(start)];
|
let mut labeled = IndexMap::with_capacity(1);
|
||||||
|
labeled.insert("accum".to_string(), Arg::new(accum, source_range));
|
||||||
|
let kw_args = KwArgs {
|
||||||
|
unlabeled: Some(Arg::new(elem, source_range)),
|
||||||
|
labeled,
|
||||||
|
};
|
||||||
|
let reduce_fn_args = Args::new_kw(
|
||||||
|
kw_args,
|
||||||
|
source_range,
|
||||||
|
ctxt.clone(),
|
||||||
|
exec_state.pipe_value().map(|v| Arg::new(v.clone(), source_range)),
|
||||||
|
);
|
||||||
let transform_fn_return = reduce_fn
|
let transform_fn_return = reduce_fn
|
||||||
.call(None, exec_state, ctxt, reduce_fn_args, source_range)
|
.call_kw(None, exec_state, ctxt, reduce_fn_args, source_range)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// Unpack the returned transform object.
|
// Unpack the returned transform object.
|
||||||
|
|||||||
@ -2532,7 +2532,7 @@ sketch002 = startSketchOn({
|
|||||||
let input = r#"squares_out = reduce(
|
let input = r#"squares_out = reduce(
|
||||||
arr,
|
arr,
|
||||||
n = 0: number,
|
n = 0: number,
|
||||||
f = fn(i, squares) {
|
f = fn(@i, accum) {
|
||||||
return 1
|
return 1
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,5 +1,150 @@
|
|||||||
---
|
---
|
||||||
source: kcl/src/simulation_tests.rs
|
source: kcl-lib/src/simulation_tests.rs
|
||||||
description: Operations executed double_map_fn.kcl
|
description: Operations executed double_map_fn.kcl
|
||||||
---
|
---
|
||||||
[]
|
[
|
||||||
|
{
|
||||||
|
"type": "GroupBegin",
|
||||||
|
"group": {
|
||||||
|
"type": "FunctionCall",
|
||||||
|
"name": null,
|
||||||
|
"functionSourceRange": [],
|
||||||
|
"unlabeledArg": {
|
||||||
|
"value": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 0.0,
|
||||||
|
"ty": {
|
||||||
|
"type": "Known",
|
||||||
|
"type": "Count"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
"labeledArgs": {}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupBegin",
|
||||||
|
"group": {
|
||||||
|
"type": "FunctionCall",
|
||||||
|
"name": null,
|
||||||
|
"functionSourceRange": [],
|
||||||
|
"unlabeledArg": {
|
||||||
|
"value": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 1.0,
|
||||||
|
"ty": {
|
||||||
|
"type": "Known",
|
||||||
|
"type": "Count"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
"labeledArgs": {}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupBegin",
|
||||||
|
"group": {
|
||||||
|
"type": "FunctionCall",
|
||||||
|
"name": null,
|
||||||
|
"functionSourceRange": [],
|
||||||
|
"unlabeledArg": {
|
||||||
|
"value": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 2.0,
|
||||||
|
"ty": {
|
||||||
|
"type": "Known",
|
||||||
|
"type": "Count"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
"labeledArgs": {}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupBegin",
|
||||||
|
"group": {
|
||||||
|
"type": "FunctionCall",
|
||||||
|
"name": null,
|
||||||
|
"functionSourceRange": [],
|
||||||
|
"unlabeledArg": {
|
||||||
|
"value": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 1.0,
|
||||||
|
"ty": {
|
||||||
|
"type": "Known",
|
||||||
|
"type": "Count"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
"labeledArgs": {}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupBegin",
|
||||||
|
"group": {
|
||||||
|
"type": "FunctionCall",
|
||||||
|
"name": null,
|
||||||
|
"functionSourceRange": [],
|
||||||
|
"unlabeledArg": {
|
||||||
|
"value": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 2.0,
|
||||||
|
"ty": {
|
||||||
|
"type": "Known",
|
||||||
|
"type": "Count"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
"labeledArgs": {}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupBegin",
|
||||||
|
"group": {
|
||||||
|
"type": "FunctionCall",
|
||||||
|
"name": null,
|
||||||
|
"functionSourceRange": [],
|
||||||
|
"unlabeledArg": {
|
||||||
|
"value": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 3.0,
|
||||||
|
"ty": {
|
||||||
|
"type": "Known",
|
||||||
|
"type": "Count"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
"labeledArgs": {}
|
||||||
|
},
|
||||||
|
"sourceRange": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupEnd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupEnd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupEnd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupEnd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupEnd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "GroupEnd"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|||||||
@ -1,235 +1,235 @@
|
|||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph path5 [Path]
|
subgraph path5 [Path]
|
||||||
5["Path<br>[1091, 1141, 0]"]
|
5["Path<br>[1096, 1146, 0]"]
|
||||||
8["Segment<br>[1091, 1141, 0]"]
|
8["Segment<br>[1096, 1146, 0]"]
|
||||||
220[Solid2d]
|
220[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path6 [Path]
|
subgraph path6 [Path]
|
||||||
6["Path<br>[1610, 1647, 0]"]
|
6["Path<br>[1629, 1666, 0]"]
|
||||||
9["Segment<br>[1306, 1344, 0]"]
|
9["Segment<br>[1315, 1356, 0]"]
|
||||||
10["Segment<br>[1306, 1344, 0]"]
|
10["Segment<br>[1315, 1356, 0]"]
|
||||||
11["Segment<br>[1306, 1344, 0]"]
|
11["Segment<br>[1315, 1356, 0]"]
|
||||||
12["Segment<br>[1306, 1344, 0]"]
|
12["Segment<br>[1315, 1356, 0]"]
|
||||||
13["Segment<br>[1306, 1344, 0]"]
|
13["Segment<br>[1315, 1356, 0]"]
|
||||||
14["Segment<br>[1306, 1344, 0]"]
|
14["Segment<br>[1315, 1356, 0]"]
|
||||||
15["Segment<br>[1306, 1344, 0]"]
|
15["Segment<br>[1315, 1356, 0]"]
|
||||||
16["Segment<br>[1306, 1344, 0]"]
|
16["Segment<br>[1315, 1356, 0]"]
|
||||||
17["Segment<br>[1306, 1344, 0]"]
|
17["Segment<br>[1315, 1356, 0]"]
|
||||||
18["Segment<br>[1306, 1344, 0]"]
|
18["Segment<br>[1315, 1356, 0]"]
|
||||||
19["Segment<br>[1306, 1344, 0]"]
|
19["Segment<br>[1315, 1356, 0]"]
|
||||||
20["Segment<br>[1306, 1344, 0]"]
|
20["Segment<br>[1315, 1356, 0]"]
|
||||||
21["Segment<br>[1306, 1344, 0]"]
|
21["Segment<br>[1315, 1356, 0]"]
|
||||||
22["Segment<br>[1306, 1344, 0]"]
|
22["Segment<br>[1315, 1356, 0]"]
|
||||||
23["Segment<br>[1306, 1344, 0]"]
|
23["Segment<br>[1315, 1356, 0]"]
|
||||||
24["Segment<br>[1306, 1344, 0]"]
|
24["Segment<br>[1315, 1356, 0]"]
|
||||||
25["Segment<br>[1306, 1344, 0]"]
|
25["Segment<br>[1315, 1356, 0]"]
|
||||||
26["Segment<br>[1306, 1344, 0]"]
|
26["Segment<br>[1315, 1356, 0]"]
|
||||||
27["Segment<br>[1306, 1344, 0]"]
|
27["Segment<br>[1315, 1356, 0]"]
|
||||||
28["Segment<br>[1306, 1344, 0]"]
|
28["Segment<br>[1315, 1356, 0]"]
|
||||||
29["Segment<br>[1306, 1344, 0]"]
|
29["Segment<br>[1315, 1356, 0]"]
|
||||||
30["Segment<br>[1306, 1344, 0]"]
|
30["Segment<br>[1315, 1356, 0]"]
|
||||||
31["Segment<br>[1306, 1344, 0]"]
|
31["Segment<br>[1315, 1356, 0]"]
|
||||||
32["Segment<br>[1306, 1344, 0]"]
|
32["Segment<br>[1315, 1356, 0]"]
|
||||||
33["Segment<br>[1306, 1344, 0]"]
|
33["Segment<br>[1315, 1356, 0]"]
|
||||||
34["Segment<br>[1306, 1344, 0]"]
|
34["Segment<br>[1315, 1356, 0]"]
|
||||||
35["Segment<br>[1306, 1344, 0]"]
|
35["Segment<br>[1315, 1356, 0]"]
|
||||||
36["Segment<br>[1306, 1344, 0]"]
|
36["Segment<br>[1315, 1356, 0]"]
|
||||||
37["Segment<br>[1306, 1344, 0]"]
|
37["Segment<br>[1315, 1356, 0]"]
|
||||||
38["Segment<br>[1306, 1344, 0]"]
|
38["Segment<br>[1315, 1356, 0]"]
|
||||||
39["Segment<br>[1306, 1344, 0]"]
|
39["Segment<br>[1315, 1356, 0]"]
|
||||||
40["Segment<br>[1306, 1344, 0]"]
|
40["Segment<br>[1315, 1356, 0]"]
|
||||||
41["Segment<br>[1306, 1344, 0]"]
|
41["Segment<br>[1315, 1356, 0]"]
|
||||||
42["Segment<br>[1306, 1344, 0]"]
|
42["Segment<br>[1315, 1356, 0]"]
|
||||||
43["Segment<br>[1306, 1344, 0]"]
|
43["Segment<br>[1315, 1356, 0]"]
|
||||||
44["Segment<br>[1306, 1344, 0]"]
|
44["Segment<br>[1315, 1356, 0]"]
|
||||||
45["Segment<br>[1306, 1344, 0]"]
|
45["Segment<br>[1315, 1356, 0]"]
|
||||||
46["Segment<br>[1306, 1344, 0]"]
|
46["Segment<br>[1315, 1356, 0]"]
|
||||||
47["Segment<br>[1306, 1344, 0]"]
|
47["Segment<br>[1315, 1356, 0]"]
|
||||||
48["Segment<br>[1306, 1344, 0]"]
|
48["Segment<br>[1315, 1356, 0]"]
|
||||||
49["Segment<br>[1306, 1344, 0]"]
|
49["Segment<br>[1315, 1356, 0]"]
|
||||||
50["Segment<br>[1306, 1344, 0]"]
|
50["Segment<br>[1315, 1356, 0]"]
|
||||||
51["Segment<br>[1306, 1344, 0]"]
|
51["Segment<br>[1315, 1356, 0]"]
|
||||||
52["Segment<br>[1306, 1344, 0]"]
|
52["Segment<br>[1315, 1356, 0]"]
|
||||||
53["Segment<br>[1306, 1344, 0]"]
|
53["Segment<br>[1315, 1356, 0]"]
|
||||||
54["Segment<br>[1306, 1344, 0]"]
|
54["Segment<br>[1315, 1356, 0]"]
|
||||||
55["Segment<br>[1306, 1344, 0]"]
|
55["Segment<br>[1315, 1356, 0]"]
|
||||||
56["Segment<br>[1306, 1344, 0]"]
|
56["Segment<br>[1315, 1356, 0]"]
|
||||||
57["Segment<br>[1306, 1344, 0]"]
|
57["Segment<br>[1315, 1356, 0]"]
|
||||||
58["Segment<br>[1306, 1344, 0]"]
|
58["Segment<br>[1315, 1356, 0]"]
|
||||||
59["Segment<br>[1306, 1344, 0]"]
|
59["Segment<br>[1315, 1356, 0]"]
|
||||||
60["Segment<br>[1306, 1344, 0]"]
|
60["Segment<br>[1315, 1356, 0]"]
|
||||||
61["Segment<br>[1306, 1344, 0]"]
|
61["Segment<br>[1315, 1356, 0]"]
|
||||||
62["Segment<br>[1306, 1344, 0]"]
|
62["Segment<br>[1315, 1356, 0]"]
|
||||||
63["Segment<br>[1306, 1344, 0]"]
|
63["Segment<br>[1315, 1356, 0]"]
|
||||||
64["Segment<br>[1306, 1344, 0]"]
|
64["Segment<br>[1315, 1356, 0]"]
|
||||||
65["Segment<br>[1306, 1344, 0]"]
|
65["Segment<br>[1315, 1356, 0]"]
|
||||||
66["Segment<br>[1306, 1344, 0]"]
|
66["Segment<br>[1315, 1356, 0]"]
|
||||||
67["Segment<br>[1306, 1344, 0]"]
|
67["Segment<br>[1315, 1356, 0]"]
|
||||||
68["Segment<br>[1306, 1344, 0]"]
|
68["Segment<br>[1315, 1356, 0]"]
|
||||||
69["Segment<br>[1306, 1344, 0]"]
|
69["Segment<br>[1315, 1356, 0]"]
|
||||||
70["Segment<br>[1306, 1344, 0]"]
|
70["Segment<br>[1315, 1356, 0]"]
|
||||||
71["Segment<br>[1306, 1344, 0]"]
|
71["Segment<br>[1315, 1356, 0]"]
|
||||||
72["Segment<br>[1306, 1344, 0]"]
|
72["Segment<br>[1315, 1356, 0]"]
|
||||||
73["Segment<br>[1306, 1344, 0]"]
|
73["Segment<br>[1315, 1356, 0]"]
|
||||||
74["Segment<br>[1306, 1344, 0]"]
|
74["Segment<br>[1315, 1356, 0]"]
|
||||||
75["Segment<br>[1306, 1344, 0]"]
|
75["Segment<br>[1315, 1356, 0]"]
|
||||||
76["Segment<br>[1306, 1344, 0]"]
|
76["Segment<br>[1315, 1356, 0]"]
|
||||||
77["Segment<br>[1306, 1344, 0]"]
|
77["Segment<br>[1315, 1356, 0]"]
|
||||||
78["Segment<br>[1306, 1344, 0]"]
|
78["Segment<br>[1315, 1356, 0]"]
|
||||||
79["Segment<br>[1306, 1344, 0]"]
|
79["Segment<br>[1315, 1356, 0]"]
|
||||||
80["Segment<br>[1306, 1344, 0]"]
|
80["Segment<br>[1315, 1356, 0]"]
|
||||||
81["Segment<br>[1306, 1344, 0]"]
|
81["Segment<br>[1315, 1356, 0]"]
|
||||||
82["Segment<br>[1306, 1344, 0]"]
|
82["Segment<br>[1315, 1356, 0]"]
|
||||||
83["Segment<br>[1306, 1344, 0]"]
|
83["Segment<br>[1315, 1356, 0]"]
|
||||||
84["Segment<br>[1306, 1344, 0]"]
|
84["Segment<br>[1315, 1356, 0]"]
|
||||||
85["Segment<br>[1306, 1344, 0]"]
|
85["Segment<br>[1315, 1356, 0]"]
|
||||||
86["Segment<br>[1306, 1344, 0]"]
|
86["Segment<br>[1315, 1356, 0]"]
|
||||||
87["Segment<br>[1306, 1344, 0]"]
|
87["Segment<br>[1315, 1356, 0]"]
|
||||||
88["Segment<br>[1306, 1344, 0]"]
|
88["Segment<br>[1315, 1356, 0]"]
|
||||||
89["Segment<br>[1306, 1344, 0]"]
|
89["Segment<br>[1315, 1356, 0]"]
|
||||||
90["Segment<br>[1306, 1344, 0]"]
|
90["Segment<br>[1315, 1356, 0]"]
|
||||||
91["Segment<br>[1306, 1344, 0]"]
|
91["Segment<br>[1315, 1356, 0]"]
|
||||||
92["Segment<br>[1306, 1344, 0]"]
|
92["Segment<br>[1315, 1356, 0]"]
|
||||||
93["Segment<br>[1306, 1344, 0]"]
|
93["Segment<br>[1315, 1356, 0]"]
|
||||||
94["Segment<br>[1306, 1344, 0]"]
|
94["Segment<br>[1315, 1356, 0]"]
|
||||||
95["Segment<br>[1306, 1344, 0]"]
|
95["Segment<br>[1315, 1356, 0]"]
|
||||||
96["Segment<br>[1306, 1344, 0]"]
|
96["Segment<br>[1315, 1356, 0]"]
|
||||||
97["Segment<br>[1306, 1344, 0]"]
|
97["Segment<br>[1315, 1356, 0]"]
|
||||||
98["Segment<br>[1306, 1344, 0]"]
|
98["Segment<br>[1315, 1356, 0]"]
|
||||||
99["Segment<br>[1306, 1344, 0]"]
|
99["Segment<br>[1315, 1356, 0]"]
|
||||||
100["Segment<br>[1306, 1344, 0]"]
|
100["Segment<br>[1315, 1356, 0]"]
|
||||||
101["Segment<br>[1306, 1344, 0]"]
|
101["Segment<br>[1315, 1356, 0]"]
|
||||||
102["Segment<br>[1306, 1344, 0]"]
|
102["Segment<br>[1315, 1356, 0]"]
|
||||||
103["Segment<br>[1306, 1344, 0]"]
|
103["Segment<br>[1315, 1356, 0]"]
|
||||||
104["Segment<br>[1306, 1344, 0]"]
|
104["Segment<br>[1315, 1356, 0]"]
|
||||||
105["Segment<br>[1306, 1344, 0]"]
|
105["Segment<br>[1315, 1356, 0]"]
|
||||||
106["Segment<br>[1306, 1344, 0]"]
|
106["Segment<br>[1315, 1356, 0]"]
|
||||||
107["Segment<br>[1306, 1344, 0]"]
|
107["Segment<br>[1315, 1356, 0]"]
|
||||||
108["Segment<br>[1306, 1344, 0]"]
|
108["Segment<br>[1315, 1356, 0]"]
|
||||||
109["Segment<br>[1306, 1344, 0]"]
|
109["Segment<br>[1315, 1356, 0]"]
|
||||||
110["Segment<br>[1526, 1556, 0]"]
|
110["Segment<br>[1542, 1575, 0]"]
|
||||||
111["Segment<br>[1526, 1556, 0]"]
|
111["Segment<br>[1542, 1575, 0]"]
|
||||||
112["Segment<br>[1526, 1556, 0]"]
|
112["Segment<br>[1542, 1575, 0]"]
|
||||||
113["Segment<br>[1526, 1556, 0]"]
|
113["Segment<br>[1542, 1575, 0]"]
|
||||||
114["Segment<br>[1526, 1556, 0]"]
|
114["Segment<br>[1542, 1575, 0]"]
|
||||||
115["Segment<br>[1526, 1556, 0]"]
|
115["Segment<br>[1542, 1575, 0]"]
|
||||||
116["Segment<br>[1526, 1556, 0]"]
|
116["Segment<br>[1542, 1575, 0]"]
|
||||||
117["Segment<br>[1526, 1556, 0]"]
|
117["Segment<br>[1542, 1575, 0]"]
|
||||||
118["Segment<br>[1526, 1556, 0]"]
|
118["Segment<br>[1542, 1575, 0]"]
|
||||||
119["Segment<br>[1526, 1556, 0]"]
|
119["Segment<br>[1542, 1575, 0]"]
|
||||||
120["Segment<br>[1526, 1556, 0]"]
|
120["Segment<br>[1542, 1575, 0]"]
|
||||||
121["Segment<br>[1526, 1556, 0]"]
|
121["Segment<br>[1542, 1575, 0]"]
|
||||||
122["Segment<br>[1526, 1556, 0]"]
|
122["Segment<br>[1542, 1575, 0]"]
|
||||||
123["Segment<br>[1526, 1556, 0]"]
|
123["Segment<br>[1542, 1575, 0]"]
|
||||||
124["Segment<br>[1526, 1556, 0]"]
|
124["Segment<br>[1542, 1575, 0]"]
|
||||||
125["Segment<br>[1526, 1556, 0]"]
|
125["Segment<br>[1542, 1575, 0]"]
|
||||||
126["Segment<br>[1526, 1556, 0]"]
|
126["Segment<br>[1542, 1575, 0]"]
|
||||||
127["Segment<br>[1526, 1556, 0]"]
|
127["Segment<br>[1542, 1575, 0]"]
|
||||||
128["Segment<br>[1526, 1556, 0]"]
|
128["Segment<br>[1542, 1575, 0]"]
|
||||||
129["Segment<br>[1526, 1556, 0]"]
|
129["Segment<br>[1542, 1575, 0]"]
|
||||||
130["Segment<br>[1526, 1556, 0]"]
|
130["Segment<br>[1542, 1575, 0]"]
|
||||||
131["Segment<br>[1526, 1556, 0]"]
|
131["Segment<br>[1542, 1575, 0]"]
|
||||||
132["Segment<br>[1526, 1556, 0]"]
|
132["Segment<br>[1542, 1575, 0]"]
|
||||||
133["Segment<br>[1526, 1556, 0]"]
|
133["Segment<br>[1542, 1575, 0]"]
|
||||||
134["Segment<br>[1526, 1556, 0]"]
|
134["Segment<br>[1542, 1575, 0]"]
|
||||||
135["Segment<br>[1526, 1556, 0]"]
|
135["Segment<br>[1542, 1575, 0]"]
|
||||||
136["Segment<br>[1526, 1556, 0]"]
|
136["Segment<br>[1542, 1575, 0]"]
|
||||||
137["Segment<br>[1526, 1556, 0]"]
|
137["Segment<br>[1542, 1575, 0]"]
|
||||||
138["Segment<br>[1526, 1556, 0]"]
|
138["Segment<br>[1542, 1575, 0]"]
|
||||||
139["Segment<br>[1526, 1556, 0]"]
|
139["Segment<br>[1542, 1575, 0]"]
|
||||||
140["Segment<br>[1526, 1556, 0]"]
|
140["Segment<br>[1542, 1575, 0]"]
|
||||||
141["Segment<br>[1526, 1556, 0]"]
|
141["Segment<br>[1542, 1575, 0]"]
|
||||||
142["Segment<br>[1526, 1556, 0]"]
|
142["Segment<br>[1542, 1575, 0]"]
|
||||||
143["Segment<br>[1526, 1556, 0]"]
|
143["Segment<br>[1542, 1575, 0]"]
|
||||||
144["Segment<br>[1526, 1556, 0]"]
|
144["Segment<br>[1542, 1575, 0]"]
|
||||||
145["Segment<br>[1526, 1556, 0]"]
|
145["Segment<br>[1542, 1575, 0]"]
|
||||||
146["Segment<br>[1526, 1556, 0]"]
|
146["Segment<br>[1542, 1575, 0]"]
|
||||||
147["Segment<br>[1526, 1556, 0]"]
|
147["Segment<br>[1542, 1575, 0]"]
|
||||||
148["Segment<br>[1526, 1556, 0]"]
|
148["Segment<br>[1542, 1575, 0]"]
|
||||||
149["Segment<br>[1526, 1556, 0]"]
|
149["Segment<br>[1542, 1575, 0]"]
|
||||||
150["Segment<br>[1526, 1556, 0]"]
|
150["Segment<br>[1542, 1575, 0]"]
|
||||||
151["Segment<br>[1526, 1556, 0]"]
|
151["Segment<br>[1542, 1575, 0]"]
|
||||||
152["Segment<br>[1526, 1556, 0]"]
|
152["Segment<br>[1542, 1575, 0]"]
|
||||||
153["Segment<br>[1526, 1556, 0]"]
|
153["Segment<br>[1542, 1575, 0]"]
|
||||||
154["Segment<br>[1526, 1556, 0]"]
|
154["Segment<br>[1542, 1575, 0]"]
|
||||||
155["Segment<br>[1526, 1556, 0]"]
|
155["Segment<br>[1542, 1575, 0]"]
|
||||||
156["Segment<br>[1526, 1556, 0]"]
|
156["Segment<br>[1542, 1575, 0]"]
|
||||||
157["Segment<br>[1526, 1556, 0]"]
|
157["Segment<br>[1542, 1575, 0]"]
|
||||||
158["Segment<br>[1526, 1556, 0]"]
|
158["Segment<br>[1542, 1575, 0]"]
|
||||||
159["Segment<br>[1526, 1556, 0]"]
|
159["Segment<br>[1542, 1575, 0]"]
|
||||||
160["Segment<br>[1526, 1556, 0]"]
|
160["Segment<br>[1542, 1575, 0]"]
|
||||||
161["Segment<br>[1526, 1556, 0]"]
|
161["Segment<br>[1542, 1575, 0]"]
|
||||||
162["Segment<br>[1526, 1556, 0]"]
|
162["Segment<br>[1542, 1575, 0]"]
|
||||||
163["Segment<br>[1526, 1556, 0]"]
|
163["Segment<br>[1542, 1575, 0]"]
|
||||||
164["Segment<br>[1526, 1556, 0]"]
|
164["Segment<br>[1542, 1575, 0]"]
|
||||||
165["Segment<br>[1526, 1556, 0]"]
|
165["Segment<br>[1542, 1575, 0]"]
|
||||||
166["Segment<br>[1526, 1556, 0]"]
|
166["Segment<br>[1542, 1575, 0]"]
|
||||||
167["Segment<br>[1526, 1556, 0]"]
|
167["Segment<br>[1542, 1575, 0]"]
|
||||||
168["Segment<br>[1526, 1556, 0]"]
|
168["Segment<br>[1542, 1575, 0]"]
|
||||||
169["Segment<br>[1526, 1556, 0]"]
|
169["Segment<br>[1542, 1575, 0]"]
|
||||||
170["Segment<br>[1526, 1556, 0]"]
|
170["Segment<br>[1542, 1575, 0]"]
|
||||||
171["Segment<br>[1526, 1556, 0]"]
|
171["Segment<br>[1542, 1575, 0]"]
|
||||||
172["Segment<br>[1526, 1556, 0]"]
|
172["Segment<br>[1542, 1575, 0]"]
|
||||||
173["Segment<br>[1526, 1556, 0]"]
|
173["Segment<br>[1542, 1575, 0]"]
|
||||||
174["Segment<br>[1526, 1556, 0]"]
|
174["Segment<br>[1542, 1575, 0]"]
|
||||||
175["Segment<br>[1526, 1556, 0]"]
|
175["Segment<br>[1542, 1575, 0]"]
|
||||||
176["Segment<br>[1526, 1556, 0]"]
|
176["Segment<br>[1542, 1575, 0]"]
|
||||||
177["Segment<br>[1526, 1556, 0]"]
|
177["Segment<br>[1542, 1575, 0]"]
|
||||||
178["Segment<br>[1526, 1556, 0]"]
|
178["Segment<br>[1542, 1575, 0]"]
|
||||||
179["Segment<br>[1526, 1556, 0]"]
|
179["Segment<br>[1542, 1575, 0]"]
|
||||||
180["Segment<br>[1526, 1556, 0]"]
|
180["Segment<br>[1542, 1575, 0]"]
|
||||||
181["Segment<br>[1526, 1556, 0]"]
|
181["Segment<br>[1542, 1575, 0]"]
|
||||||
182["Segment<br>[1526, 1556, 0]"]
|
182["Segment<br>[1542, 1575, 0]"]
|
||||||
183["Segment<br>[1526, 1556, 0]"]
|
183["Segment<br>[1542, 1575, 0]"]
|
||||||
184["Segment<br>[1526, 1556, 0]"]
|
184["Segment<br>[1542, 1575, 0]"]
|
||||||
185["Segment<br>[1526, 1556, 0]"]
|
185["Segment<br>[1542, 1575, 0]"]
|
||||||
186["Segment<br>[1526, 1556, 0]"]
|
186["Segment<br>[1542, 1575, 0]"]
|
||||||
187["Segment<br>[1526, 1556, 0]"]
|
187["Segment<br>[1542, 1575, 0]"]
|
||||||
188["Segment<br>[1526, 1556, 0]"]
|
188["Segment<br>[1542, 1575, 0]"]
|
||||||
189["Segment<br>[1526, 1556, 0]"]
|
189["Segment<br>[1542, 1575, 0]"]
|
||||||
190["Segment<br>[1526, 1556, 0]"]
|
190["Segment<br>[1542, 1575, 0]"]
|
||||||
191["Segment<br>[1526, 1556, 0]"]
|
191["Segment<br>[1542, 1575, 0]"]
|
||||||
192["Segment<br>[1526, 1556, 0]"]
|
192["Segment<br>[1542, 1575, 0]"]
|
||||||
193["Segment<br>[1526, 1556, 0]"]
|
193["Segment<br>[1542, 1575, 0]"]
|
||||||
194["Segment<br>[1526, 1556, 0]"]
|
194["Segment<br>[1542, 1575, 0]"]
|
||||||
195["Segment<br>[1526, 1556, 0]"]
|
195["Segment<br>[1542, 1575, 0]"]
|
||||||
196["Segment<br>[1526, 1556, 0]"]
|
196["Segment<br>[1542, 1575, 0]"]
|
||||||
197["Segment<br>[1526, 1556, 0]"]
|
197["Segment<br>[1542, 1575, 0]"]
|
||||||
198["Segment<br>[1526, 1556, 0]"]
|
198["Segment<br>[1542, 1575, 0]"]
|
||||||
199["Segment<br>[1526, 1556, 0]"]
|
199["Segment<br>[1542, 1575, 0]"]
|
||||||
200["Segment<br>[1526, 1556, 0]"]
|
200["Segment<br>[1542, 1575, 0]"]
|
||||||
201["Segment<br>[1526, 1556, 0]"]
|
201["Segment<br>[1542, 1575, 0]"]
|
||||||
202["Segment<br>[1526, 1556, 0]"]
|
202["Segment<br>[1542, 1575, 0]"]
|
||||||
203["Segment<br>[1526, 1556, 0]"]
|
203["Segment<br>[1542, 1575, 0]"]
|
||||||
204["Segment<br>[1526, 1556, 0]"]
|
204["Segment<br>[1542, 1575, 0]"]
|
||||||
205["Segment<br>[1526, 1556, 0]"]
|
205["Segment<br>[1542, 1575, 0]"]
|
||||||
206["Segment<br>[1526, 1556, 0]"]
|
206["Segment<br>[1542, 1575, 0]"]
|
||||||
207["Segment<br>[1526, 1556, 0]"]
|
207["Segment<br>[1542, 1575, 0]"]
|
||||||
208["Segment<br>[1526, 1556, 0]"]
|
208["Segment<br>[1542, 1575, 0]"]
|
||||||
209["Segment<br>[1526, 1556, 0]"]
|
209["Segment<br>[1542, 1575, 0]"]
|
||||||
210["Segment<br>[1526, 1556, 0]"]
|
210["Segment<br>[1542, 1575, 0]"]
|
||||||
211["Segment<br>[1713, 1811, 0]"]
|
211["Segment<br>[1732, 1830, 0]"]
|
||||||
212["Segment<br>[1871, 1878, 0]"]
|
212["Segment<br>[1890, 1897, 0]"]
|
||||||
219[Solid2d]
|
219[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path7 [Path]
|
subgraph path7 [Path]
|
||||||
7["Path<br>[2359, 2438, 0]"]
|
7["Path<br>[2378, 2457, 0]"]
|
||||||
213["Segment<br>[2444, 2471, 0]"]
|
213["Segment<br>[2463, 2490, 0]"]
|
||||||
214["Segment<br>[2477, 2505, 0]"]
|
214["Segment<br>[2496, 2524, 0]"]
|
||||||
215["Segment<br>[2511, 2539, 0]"]
|
215["Segment<br>[2530, 2558, 0]"]
|
||||||
216["Segment<br>[2545, 2668, 0]"]
|
216["Segment<br>[2564, 2687, 0]"]
|
||||||
217["Segment<br>[2674, 2786, 0]"]
|
217["Segment<br>[2693, 2805, 0]"]
|
||||||
218["Segment<br>[2792, 2799, 0]"]
|
218["Segment<br>[2811, 2818, 0]"]
|
||||||
221[Solid2d]
|
221[Solid2d]
|
||||||
end
|
end
|
||||||
1["Plane<br>[168, 185, 0]"]
|
1["Plane<br>[168, 185, 0]"]
|
||||||
2["Plane<br>[1068, 1085, 0]"]
|
2["Plane<br>[1073, 1090, 0]"]
|
||||||
3["Plane<br>[1587, 1604, 0]"]
|
3["Plane<br>[1606, 1623, 0]"]
|
||||||
4["StartSketchOnFace<br>[2322, 2353, 0]"]
|
4["StartSketchOnFace<br>[2341, 2372, 0]"]
|
||||||
222["Sweep Extrusion<br>[1147, 1175, 0]"]
|
222["Sweep Extrusion<br>[1152, 1180, 0]"]
|
||||||
223["Sweep Extrusion<br>[1884, 1912, 0]"]
|
223["Sweep Extrusion<br>[1903, 1931, 0]"]
|
||||||
224["Sweep Extrusion<br>[2805, 2834, 0]"]
|
224["Sweep Extrusion<br>[2824, 2853, 0]"]
|
||||||
225[Wall]
|
225[Wall]
|
||||||
226[Wall]
|
226[Wall]
|
||||||
227[Wall]
|
227[Wall]
|
||||||
|
|||||||
@ -857,7 +857,8 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -1093,7 +1094,8 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": "r",
|
"name": "r",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -1324,7 +1326,8 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": "a",
|
"name": "a",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -1526,7 +1529,8 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -1748,7 +1752,8 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -2308,7 +2313,7 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
@ -2358,14 +2363,15 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Parameter",
|
"type": "Parameter",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
}
|
||||||
@ -2924,7 +2930,7 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
@ -2956,14 +2962,15 @@ description: Result of parsing import_async.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Parameter",
|
"type": "Parameter",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,26 +22,26 @@ gearHeight = 3
|
|||||||
|
|
||||||
// Interpolate points along the involute curve
|
// Interpolate points along the involute curve
|
||||||
cmo = 101
|
cmo = 101
|
||||||
rs = map([0..cmo], f = fn(i) {
|
rs = map([0..cmo], f = fn(@i) {
|
||||||
return baseDiameter / 2 + i / cmo * (tipDiameter - baseDiameter) / 2
|
return baseDiameter / 2 + i / cmo * (tipDiameter - baseDiameter) / 2
|
||||||
})
|
})
|
||||||
|
|
||||||
// Calculate operating pressure angle
|
// Calculate operating pressure angle
|
||||||
angles = map(rs, f = fn(r) {
|
angles = map(rs, f = fn(@r) {
|
||||||
return units::toDegrees( acos(baseDiameter / 2 / r))
|
return units::toDegrees( acos(baseDiameter / 2 / r))
|
||||||
})
|
})
|
||||||
|
|
||||||
// Calculate the involute function
|
// Calculate the involute function
|
||||||
invas = map(angles, f = fn(a) {
|
invas = map(angles, f = fn(@a) {
|
||||||
return tan(units::toRadians(a)) - units::toRadians(a)
|
return tan(units::toRadians(a)) - units::toRadians(a)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Map the involute curve
|
// Map the involute curve
|
||||||
xs = map([0..cmo], f = fn(i) {
|
xs = map([0..cmo], f = fn(@i) {
|
||||||
return rs[i] * cos(invas[i]: number(rad))
|
return rs[i] * cos(invas[i]: number(rad))
|
||||||
})
|
})
|
||||||
|
|
||||||
ys = map([0..cmo], f = fn(i) {
|
ys = map([0..cmo], f = fn(@i) {
|
||||||
return rs[i] * sin(invas[i]: number(rad))
|
return rs[i] * sin(invas[i]: number(rad))
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -53,15 +53,15 @@ body = startSketchOn(XY)
|
|||||||
toothAngle = 360 / nTeeth / 1.5
|
toothAngle = 360 / nTeeth / 1.5
|
||||||
|
|
||||||
// Plot the involute curve
|
// Plot the involute curve
|
||||||
fn leftInvolute(i, sg) {
|
fn leftInvolute(@i, accum) {
|
||||||
j = 100 - i // iterate backwards
|
j = 100 - i // iterate backwards
|
||||||
return line(sg, endAbsolute = [xs[j], ys[j]])
|
return line(accum, endAbsolute = [xs[j], ys[j]])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rightInvolute(i, sg) {
|
fn rightInvolute(@i, accum) {
|
||||||
x = rs[i] * cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
x = rs[i] * cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||||
y = -rs[i] * sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
y = -rs[i] * sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||||
return line(sg, endAbsolute = [x, y])
|
return line(accum, endAbsolute = [x, y])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw gear teeth
|
// Draw gear teeth
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -27,7 +27,7 @@ gearHeight = 3
|
|||||||
cmo = 101
|
cmo = 101
|
||||||
rs = map(
|
rs = map(
|
||||||
[0..cmo],
|
[0..cmo],
|
||||||
f = fn(i) {
|
f = fn(@i) {
|
||||||
return baseDiameter / 2 + i / cmo * (tipDiameter - baseDiameter) / 2
|
return baseDiameter / 2 + i / cmo * (tipDiameter - baseDiameter) / 2
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -35,7 +35,7 @@ rs = map(
|
|||||||
// Calculate operating pressure angle
|
// Calculate operating pressure angle
|
||||||
angles = map(
|
angles = map(
|
||||||
rs,
|
rs,
|
||||||
f = fn(r) {
|
f = fn(@r) {
|
||||||
return units::toDegrees(acos(baseDiameter / 2 / r))
|
return units::toDegrees(acos(baseDiameter / 2 / r))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -43,7 +43,7 @@ angles = map(
|
|||||||
// Calculate the involute function
|
// Calculate the involute function
|
||||||
invas = map(
|
invas = map(
|
||||||
angles,
|
angles,
|
||||||
f = fn(a) {
|
f = fn(@a) {
|
||||||
return tan(units::toRadians(a)) - units::toRadians(a)
|
return tan(units::toRadians(a)) - units::toRadians(a)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -51,14 +51,14 @@ invas = map(
|
|||||||
// Map the involute curve
|
// Map the involute curve
|
||||||
xs = map(
|
xs = map(
|
||||||
[0..cmo],
|
[0..cmo],
|
||||||
f = fn(i) {
|
f = fn(@i) {
|
||||||
return rs[i] * cos(invas[i]: number(rad))
|
return rs[i] * cos(invas[i]: number(rad))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
ys = map(
|
ys = map(
|
||||||
[0..cmo],
|
[0..cmo],
|
||||||
f = fn(i) {
|
f = fn(@i) {
|
||||||
return rs[i] * sin(invas[i]: number(rad))
|
return rs[i] * sin(invas[i]: number(rad))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -71,15 +71,15 @@ body = startSketchOn(XY)
|
|||||||
toothAngle = 360 / nTeeth / 1.5
|
toothAngle = 360 / nTeeth / 1.5
|
||||||
|
|
||||||
// Plot the involute curve
|
// Plot the involute curve
|
||||||
fn leftInvolute(i, sg) {
|
fn leftInvolute(@i, accum) {
|
||||||
j = 100 - i // iterate backwards
|
j = 100 - i // iterate backwards
|
||||||
return line(sg, endAbsolute = [xs[j], ys[j]])
|
return line(accum, endAbsolute = [xs[j], ys[j]])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rightInvolute(i, sg) {
|
fn rightInvolute(@i, accum) {
|
||||||
x = rs[i] * cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
x = rs[i] * cos(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||||
y = -rs[i] * sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
y = -rs[i] * sin(-toothAngle + units::toDegrees(atan(ys[i] / xs[i])))
|
||||||
return line(sg, endAbsolute = [x, y])
|
return line(accum, endAbsolute = [x, y])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw gear teeth
|
// Draw gear teeth
|
||||||
|
|||||||
@ -120,17 +120,17 @@ flowchart LR
|
|||||||
94["Sweep Extrusion<br>[771, 821, 0]"]
|
94["Sweep Extrusion<br>[771, 821, 0]"]
|
||||||
95["Sweep Extrusion<br>[771, 821, 0]"]
|
95["Sweep Extrusion<br>[771, 821, 0]"]
|
||||||
96["Sweep Extrusion<br>[771, 821, 0]"]
|
96["Sweep Extrusion<br>[771, 821, 0]"]
|
||||||
97["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
97["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
98["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
98["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
99["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
99["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
100["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
100["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
101["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
101["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
102["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
102["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
103["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
103["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
104["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
104["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
105["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
105["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
106["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
106["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
107["CompositeSolid Intersect<br>[2018, 2048, 0]"]
|
107["CompositeSolid Intersect<br>[2007, 2035, 0]"]
|
||||||
108[Wall]
|
108[Wall]
|
||||||
109[Wall]
|
109[Wall]
|
||||||
110[Wall]
|
110[Wall]
|
||||||
|
|||||||
@ -2249,7 +2249,8 @@ description: Result of parsing dodecahedron.kcl
|
|||||||
"name": "rotation",
|
"name": "rotation",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -2372,7 +2373,7 @@ description: Result of parsing dodecahedron.kcl
|
|||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "accumulator",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
@ -2420,14 +2421,15 @@ description: Result of parsing dodecahedron.kcl
|
|||||||
"name": "item",
|
"name": "item",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Parameter",
|
"type": "Parameter",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "accumulator",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
}
|
||||||
@ -2593,7 +2595,7 @@ description: Result of parsing dodecahedron.kcl
|
|||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "current",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
@ -2631,14 +2633,15 @@ description: Result of parsing dodecahedron.kcl
|
|||||||
"name": "previous",
|
"name": "previous",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Parameter",
|
"type": "Parameter",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "current",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,234 +1,234 @@
|
|||||||
```mermaid
|
```mermaid
|
||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph path4 [Path]
|
subgraph path4 [Path]
|
||||||
4["Path<br>[1431, 1481, 0]"]
|
4["Path<br>[1436, 1486, 0]"]
|
||||||
7["Segment<br>[1431, 1481, 0]"]
|
7["Segment<br>[1436, 1486, 0]"]
|
||||||
219[Solid2d]
|
219[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path5 [Path]
|
subgraph path5 [Path]
|
||||||
5["Path<br>[1950, 1987, 0]"]
|
5["Path<br>[1969, 2006, 0]"]
|
||||||
8["Segment<br>[1646, 1684, 0]"]
|
8["Segment<br>[1655, 1696, 0]"]
|
||||||
9["Segment<br>[1646, 1684, 0]"]
|
9["Segment<br>[1655, 1696, 0]"]
|
||||||
10["Segment<br>[1646, 1684, 0]"]
|
10["Segment<br>[1655, 1696, 0]"]
|
||||||
11["Segment<br>[1646, 1684, 0]"]
|
11["Segment<br>[1655, 1696, 0]"]
|
||||||
12["Segment<br>[1646, 1684, 0]"]
|
12["Segment<br>[1655, 1696, 0]"]
|
||||||
13["Segment<br>[1646, 1684, 0]"]
|
13["Segment<br>[1655, 1696, 0]"]
|
||||||
14["Segment<br>[1646, 1684, 0]"]
|
14["Segment<br>[1655, 1696, 0]"]
|
||||||
15["Segment<br>[1646, 1684, 0]"]
|
15["Segment<br>[1655, 1696, 0]"]
|
||||||
16["Segment<br>[1646, 1684, 0]"]
|
16["Segment<br>[1655, 1696, 0]"]
|
||||||
17["Segment<br>[1646, 1684, 0]"]
|
17["Segment<br>[1655, 1696, 0]"]
|
||||||
18["Segment<br>[1646, 1684, 0]"]
|
18["Segment<br>[1655, 1696, 0]"]
|
||||||
19["Segment<br>[1646, 1684, 0]"]
|
19["Segment<br>[1655, 1696, 0]"]
|
||||||
20["Segment<br>[1646, 1684, 0]"]
|
20["Segment<br>[1655, 1696, 0]"]
|
||||||
21["Segment<br>[1646, 1684, 0]"]
|
21["Segment<br>[1655, 1696, 0]"]
|
||||||
22["Segment<br>[1646, 1684, 0]"]
|
22["Segment<br>[1655, 1696, 0]"]
|
||||||
23["Segment<br>[1646, 1684, 0]"]
|
23["Segment<br>[1655, 1696, 0]"]
|
||||||
24["Segment<br>[1646, 1684, 0]"]
|
24["Segment<br>[1655, 1696, 0]"]
|
||||||
25["Segment<br>[1646, 1684, 0]"]
|
25["Segment<br>[1655, 1696, 0]"]
|
||||||
26["Segment<br>[1646, 1684, 0]"]
|
26["Segment<br>[1655, 1696, 0]"]
|
||||||
27["Segment<br>[1646, 1684, 0]"]
|
27["Segment<br>[1655, 1696, 0]"]
|
||||||
28["Segment<br>[1646, 1684, 0]"]
|
28["Segment<br>[1655, 1696, 0]"]
|
||||||
29["Segment<br>[1646, 1684, 0]"]
|
29["Segment<br>[1655, 1696, 0]"]
|
||||||
30["Segment<br>[1646, 1684, 0]"]
|
30["Segment<br>[1655, 1696, 0]"]
|
||||||
31["Segment<br>[1646, 1684, 0]"]
|
31["Segment<br>[1655, 1696, 0]"]
|
||||||
32["Segment<br>[1646, 1684, 0]"]
|
32["Segment<br>[1655, 1696, 0]"]
|
||||||
33["Segment<br>[1646, 1684, 0]"]
|
33["Segment<br>[1655, 1696, 0]"]
|
||||||
34["Segment<br>[1646, 1684, 0]"]
|
34["Segment<br>[1655, 1696, 0]"]
|
||||||
35["Segment<br>[1646, 1684, 0]"]
|
35["Segment<br>[1655, 1696, 0]"]
|
||||||
36["Segment<br>[1646, 1684, 0]"]
|
36["Segment<br>[1655, 1696, 0]"]
|
||||||
37["Segment<br>[1646, 1684, 0]"]
|
37["Segment<br>[1655, 1696, 0]"]
|
||||||
38["Segment<br>[1646, 1684, 0]"]
|
38["Segment<br>[1655, 1696, 0]"]
|
||||||
39["Segment<br>[1646, 1684, 0]"]
|
39["Segment<br>[1655, 1696, 0]"]
|
||||||
40["Segment<br>[1646, 1684, 0]"]
|
40["Segment<br>[1655, 1696, 0]"]
|
||||||
41["Segment<br>[1646, 1684, 0]"]
|
41["Segment<br>[1655, 1696, 0]"]
|
||||||
42["Segment<br>[1646, 1684, 0]"]
|
42["Segment<br>[1655, 1696, 0]"]
|
||||||
43["Segment<br>[1646, 1684, 0]"]
|
43["Segment<br>[1655, 1696, 0]"]
|
||||||
44["Segment<br>[1646, 1684, 0]"]
|
44["Segment<br>[1655, 1696, 0]"]
|
||||||
45["Segment<br>[1646, 1684, 0]"]
|
45["Segment<br>[1655, 1696, 0]"]
|
||||||
46["Segment<br>[1646, 1684, 0]"]
|
46["Segment<br>[1655, 1696, 0]"]
|
||||||
47["Segment<br>[1646, 1684, 0]"]
|
47["Segment<br>[1655, 1696, 0]"]
|
||||||
48["Segment<br>[1646, 1684, 0]"]
|
48["Segment<br>[1655, 1696, 0]"]
|
||||||
49["Segment<br>[1646, 1684, 0]"]
|
49["Segment<br>[1655, 1696, 0]"]
|
||||||
50["Segment<br>[1646, 1684, 0]"]
|
50["Segment<br>[1655, 1696, 0]"]
|
||||||
51["Segment<br>[1646, 1684, 0]"]
|
51["Segment<br>[1655, 1696, 0]"]
|
||||||
52["Segment<br>[1646, 1684, 0]"]
|
52["Segment<br>[1655, 1696, 0]"]
|
||||||
53["Segment<br>[1646, 1684, 0]"]
|
53["Segment<br>[1655, 1696, 0]"]
|
||||||
54["Segment<br>[1646, 1684, 0]"]
|
54["Segment<br>[1655, 1696, 0]"]
|
||||||
55["Segment<br>[1646, 1684, 0]"]
|
55["Segment<br>[1655, 1696, 0]"]
|
||||||
56["Segment<br>[1646, 1684, 0]"]
|
56["Segment<br>[1655, 1696, 0]"]
|
||||||
57["Segment<br>[1646, 1684, 0]"]
|
57["Segment<br>[1655, 1696, 0]"]
|
||||||
58["Segment<br>[1646, 1684, 0]"]
|
58["Segment<br>[1655, 1696, 0]"]
|
||||||
59["Segment<br>[1646, 1684, 0]"]
|
59["Segment<br>[1655, 1696, 0]"]
|
||||||
60["Segment<br>[1646, 1684, 0]"]
|
60["Segment<br>[1655, 1696, 0]"]
|
||||||
61["Segment<br>[1646, 1684, 0]"]
|
61["Segment<br>[1655, 1696, 0]"]
|
||||||
62["Segment<br>[1646, 1684, 0]"]
|
62["Segment<br>[1655, 1696, 0]"]
|
||||||
63["Segment<br>[1646, 1684, 0]"]
|
63["Segment<br>[1655, 1696, 0]"]
|
||||||
64["Segment<br>[1646, 1684, 0]"]
|
64["Segment<br>[1655, 1696, 0]"]
|
||||||
65["Segment<br>[1646, 1684, 0]"]
|
65["Segment<br>[1655, 1696, 0]"]
|
||||||
66["Segment<br>[1646, 1684, 0]"]
|
66["Segment<br>[1655, 1696, 0]"]
|
||||||
67["Segment<br>[1646, 1684, 0]"]
|
67["Segment<br>[1655, 1696, 0]"]
|
||||||
68["Segment<br>[1646, 1684, 0]"]
|
68["Segment<br>[1655, 1696, 0]"]
|
||||||
69["Segment<br>[1646, 1684, 0]"]
|
69["Segment<br>[1655, 1696, 0]"]
|
||||||
70["Segment<br>[1646, 1684, 0]"]
|
70["Segment<br>[1655, 1696, 0]"]
|
||||||
71["Segment<br>[1646, 1684, 0]"]
|
71["Segment<br>[1655, 1696, 0]"]
|
||||||
72["Segment<br>[1646, 1684, 0]"]
|
72["Segment<br>[1655, 1696, 0]"]
|
||||||
73["Segment<br>[1646, 1684, 0]"]
|
73["Segment<br>[1655, 1696, 0]"]
|
||||||
74["Segment<br>[1646, 1684, 0]"]
|
74["Segment<br>[1655, 1696, 0]"]
|
||||||
75["Segment<br>[1646, 1684, 0]"]
|
75["Segment<br>[1655, 1696, 0]"]
|
||||||
76["Segment<br>[1646, 1684, 0]"]
|
76["Segment<br>[1655, 1696, 0]"]
|
||||||
77["Segment<br>[1646, 1684, 0]"]
|
77["Segment<br>[1655, 1696, 0]"]
|
||||||
78["Segment<br>[1646, 1684, 0]"]
|
78["Segment<br>[1655, 1696, 0]"]
|
||||||
79["Segment<br>[1646, 1684, 0]"]
|
79["Segment<br>[1655, 1696, 0]"]
|
||||||
80["Segment<br>[1646, 1684, 0]"]
|
80["Segment<br>[1655, 1696, 0]"]
|
||||||
81["Segment<br>[1646, 1684, 0]"]
|
81["Segment<br>[1655, 1696, 0]"]
|
||||||
82["Segment<br>[1646, 1684, 0]"]
|
82["Segment<br>[1655, 1696, 0]"]
|
||||||
83["Segment<br>[1646, 1684, 0]"]
|
83["Segment<br>[1655, 1696, 0]"]
|
||||||
84["Segment<br>[1646, 1684, 0]"]
|
84["Segment<br>[1655, 1696, 0]"]
|
||||||
85["Segment<br>[1646, 1684, 0]"]
|
85["Segment<br>[1655, 1696, 0]"]
|
||||||
86["Segment<br>[1646, 1684, 0]"]
|
86["Segment<br>[1655, 1696, 0]"]
|
||||||
87["Segment<br>[1646, 1684, 0]"]
|
87["Segment<br>[1655, 1696, 0]"]
|
||||||
88["Segment<br>[1646, 1684, 0]"]
|
88["Segment<br>[1655, 1696, 0]"]
|
||||||
89["Segment<br>[1646, 1684, 0]"]
|
89["Segment<br>[1655, 1696, 0]"]
|
||||||
90["Segment<br>[1646, 1684, 0]"]
|
90["Segment<br>[1655, 1696, 0]"]
|
||||||
91["Segment<br>[1646, 1684, 0]"]
|
91["Segment<br>[1655, 1696, 0]"]
|
||||||
92["Segment<br>[1646, 1684, 0]"]
|
92["Segment<br>[1655, 1696, 0]"]
|
||||||
93["Segment<br>[1646, 1684, 0]"]
|
93["Segment<br>[1655, 1696, 0]"]
|
||||||
94["Segment<br>[1646, 1684, 0]"]
|
94["Segment<br>[1655, 1696, 0]"]
|
||||||
95["Segment<br>[1646, 1684, 0]"]
|
95["Segment<br>[1655, 1696, 0]"]
|
||||||
96["Segment<br>[1646, 1684, 0]"]
|
96["Segment<br>[1655, 1696, 0]"]
|
||||||
97["Segment<br>[1646, 1684, 0]"]
|
97["Segment<br>[1655, 1696, 0]"]
|
||||||
98["Segment<br>[1646, 1684, 0]"]
|
98["Segment<br>[1655, 1696, 0]"]
|
||||||
99["Segment<br>[1646, 1684, 0]"]
|
99["Segment<br>[1655, 1696, 0]"]
|
||||||
100["Segment<br>[1646, 1684, 0]"]
|
100["Segment<br>[1655, 1696, 0]"]
|
||||||
101["Segment<br>[1646, 1684, 0]"]
|
101["Segment<br>[1655, 1696, 0]"]
|
||||||
102["Segment<br>[1646, 1684, 0]"]
|
102["Segment<br>[1655, 1696, 0]"]
|
||||||
103["Segment<br>[1646, 1684, 0]"]
|
103["Segment<br>[1655, 1696, 0]"]
|
||||||
104["Segment<br>[1646, 1684, 0]"]
|
104["Segment<br>[1655, 1696, 0]"]
|
||||||
105["Segment<br>[1646, 1684, 0]"]
|
105["Segment<br>[1655, 1696, 0]"]
|
||||||
106["Segment<br>[1646, 1684, 0]"]
|
106["Segment<br>[1655, 1696, 0]"]
|
||||||
107["Segment<br>[1646, 1684, 0]"]
|
107["Segment<br>[1655, 1696, 0]"]
|
||||||
108["Segment<br>[1646, 1684, 0]"]
|
108["Segment<br>[1655, 1696, 0]"]
|
||||||
109["Segment<br>[1866, 1896, 0]"]
|
109["Segment<br>[1882, 1915, 0]"]
|
||||||
110["Segment<br>[1866, 1896, 0]"]
|
110["Segment<br>[1882, 1915, 0]"]
|
||||||
111["Segment<br>[1866, 1896, 0]"]
|
111["Segment<br>[1882, 1915, 0]"]
|
||||||
112["Segment<br>[1866, 1896, 0]"]
|
112["Segment<br>[1882, 1915, 0]"]
|
||||||
113["Segment<br>[1866, 1896, 0]"]
|
113["Segment<br>[1882, 1915, 0]"]
|
||||||
114["Segment<br>[1866, 1896, 0]"]
|
114["Segment<br>[1882, 1915, 0]"]
|
||||||
115["Segment<br>[1866, 1896, 0]"]
|
115["Segment<br>[1882, 1915, 0]"]
|
||||||
116["Segment<br>[1866, 1896, 0]"]
|
116["Segment<br>[1882, 1915, 0]"]
|
||||||
117["Segment<br>[1866, 1896, 0]"]
|
117["Segment<br>[1882, 1915, 0]"]
|
||||||
118["Segment<br>[1866, 1896, 0]"]
|
118["Segment<br>[1882, 1915, 0]"]
|
||||||
119["Segment<br>[1866, 1896, 0]"]
|
119["Segment<br>[1882, 1915, 0]"]
|
||||||
120["Segment<br>[1866, 1896, 0]"]
|
120["Segment<br>[1882, 1915, 0]"]
|
||||||
121["Segment<br>[1866, 1896, 0]"]
|
121["Segment<br>[1882, 1915, 0]"]
|
||||||
122["Segment<br>[1866, 1896, 0]"]
|
122["Segment<br>[1882, 1915, 0]"]
|
||||||
123["Segment<br>[1866, 1896, 0]"]
|
123["Segment<br>[1882, 1915, 0]"]
|
||||||
124["Segment<br>[1866, 1896, 0]"]
|
124["Segment<br>[1882, 1915, 0]"]
|
||||||
125["Segment<br>[1866, 1896, 0]"]
|
125["Segment<br>[1882, 1915, 0]"]
|
||||||
126["Segment<br>[1866, 1896, 0]"]
|
126["Segment<br>[1882, 1915, 0]"]
|
||||||
127["Segment<br>[1866, 1896, 0]"]
|
127["Segment<br>[1882, 1915, 0]"]
|
||||||
128["Segment<br>[1866, 1896, 0]"]
|
128["Segment<br>[1882, 1915, 0]"]
|
||||||
129["Segment<br>[1866, 1896, 0]"]
|
129["Segment<br>[1882, 1915, 0]"]
|
||||||
130["Segment<br>[1866, 1896, 0]"]
|
130["Segment<br>[1882, 1915, 0]"]
|
||||||
131["Segment<br>[1866, 1896, 0]"]
|
131["Segment<br>[1882, 1915, 0]"]
|
||||||
132["Segment<br>[1866, 1896, 0]"]
|
132["Segment<br>[1882, 1915, 0]"]
|
||||||
133["Segment<br>[1866, 1896, 0]"]
|
133["Segment<br>[1882, 1915, 0]"]
|
||||||
134["Segment<br>[1866, 1896, 0]"]
|
134["Segment<br>[1882, 1915, 0]"]
|
||||||
135["Segment<br>[1866, 1896, 0]"]
|
135["Segment<br>[1882, 1915, 0]"]
|
||||||
136["Segment<br>[1866, 1896, 0]"]
|
136["Segment<br>[1882, 1915, 0]"]
|
||||||
137["Segment<br>[1866, 1896, 0]"]
|
137["Segment<br>[1882, 1915, 0]"]
|
||||||
138["Segment<br>[1866, 1896, 0]"]
|
138["Segment<br>[1882, 1915, 0]"]
|
||||||
139["Segment<br>[1866, 1896, 0]"]
|
139["Segment<br>[1882, 1915, 0]"]
|
||||||
140["Segment<br>[1866, 1896, 0]"]
|
140["Segment<br>[1882, 1915, 0]"]
|
||||||
141["Segment<br>[1866, 1896, 0]"]
|
141["Segment<br>[1882, 1915, 0]"]
|
||||||
142["Segment<br>[1866, 1896, 0]"]
|
142["Segment<br>[1882, 1915, 0]"]
|
||||||
143["Segment<br>[1866, 1896, 0]"]
|
143["Segment<br>[1882, 1915, 0]"]
|
||||||
144["Segment<br>[1866, 1896, 0]"]
|
144["Segment<br>[1882, 1915, 0]"]
|
||||||
145["Segment<br>[1866, 1896, 0]"]
|
145["Segment<br>[1882, 1915, 0]"]
|
||||||
146["Segment<br>[1866, 1896, 0]"]
|
146["Segment<br>[1882, 1915, 0]"]
|
||||||
147["Segment<br>[1866, 1896, 0]"]
|
147["Segment<br>[1882, 1915, 0]"]
|
||||||
148["Segment<br>[1866, 1896, 0]"]
|
148["Segment<br>[1882, 1915, 0]"]
|
||||||
149["Segment<br>[1866, 1896, 0]"]
|
149["Segment<br>[1882, 1915, 0]"]
|
||||||
150["Segment<br>[1866, 1896, 0]"]
|
150["Segment<br>[1882, 1915, 0]"]
|
||||||
151["Segment<br>[1866, 1896, 0]"]
|
151["Segment<br>[1882, 1915, 0]"]
|
||||||
152["Segment<br>[1866, 1896, 0]"]
|
152["Segment<br>[1882, 1915, 0]"]
|
||||||
153["Segment<br>[1866, 1896, 0]"]
|
153["Segment<br>[1882, 1915, 0]"]
|
||||||
154["Segment<br>[1866, 1896, 0]"]
|
154["Segment<br>[1882, 1915, 0]"]
|
||||||
155["Segment<br>[1866, 1896, 0]"]
|
155["Segment<br>[1882, 1915, 0]"]
|
||||||
156["Segment<br>[1866, 1896, 0]"]
|
156["Segment<br>[1882, 1915, 0]"]
|
||||||
157["Segment<br>[1866, 1896, 0]"]
|
157["Segment<br>[1882, 1915, 0]"]
|
||||||
158["Segment<br>[1866, 1896, 0]"]
|
158["Segment<br>[1882, 1915, 0]"]
|
||||||
159["Segment<br>[1866, 1896, 0]"]
|
159["Segment<br>[1882, 1915, 0]"]
|
||||||
160["Segment<br>[1866, 1896, 0]"]
|
160["Segment<br>[1882, 1915, 0]"]
|
||||||
161["Segment<br>[1866, 1896, 0]"]
|
161["Segment<br>[1882, 1915, 0]"]
|
||||||
162["Segment<br>[1866, 1896, 0]"]
|
162["Segment<br>[1882, 1915, 0]"]
|
||||||
163["Segment<br>[1866, 1896, 0]"]
|
163["Segment<br>[1882, 1915, 0]"]
|
||||||
164["Segment<br>[1866, 1896, 0]"]
|
164["Segment<br>[1882, 1915, 0]"]
|
||||||
165["Segment<br>[1866, 1896, 0]"]
|
165["Segment<br>[1882, 1915, 0]"]
|
||||||
166["Segment<br>[1866, 1896, 0]"]
|
166["Segment<br>[1882, 1915, 0]"]
|
||||||
167["Segment<br>[1866, 1896, 0]"]
|
167["Segment<br>[1882, 1915, 0]"]
|
||||||
168["Segment<br>[1866, 1896, 0]"]
|
168["Segment<br>[1882, 1915, 0]"]
|
||||||
169["Segment<br>[1866, 1896, 0]"]
|
169["Segment<br>[1882, 1915, 0]"]
|
||||||
170["Segment<br>[1866, 1896, 0]"]
|
170["Segment<br>[1882, 1915, 0]"]
|
||||||
171["Segment<br>[1866, 1896, 0]"]
|
171["Segment<br>[1882, 1915, 0]"]
|
||||||
172["Segment<br>[1866, 1896, 0]"]
|
172["Segment<br>[1882, 1915, 0]"]
|
||||||
173["Segment<br>[1866, 1896, 0]"]
|
173["Segment<br>[1882, 1915, 0]"]
|
||||||
174["Segment<br>[1866, 1896, 0]"]
|
174["Segment<br>[1882, 1915, 0]"]
|
||||||
175["Segment<br>[1866, 1896, 0]"]
|
175["Segment<br>[1882, 1915, 0]"]
|
||||||
176["Segment<br>[1866, 1896, 0]"]
|
176["Segment<br>[1882, 1915, 0]"]
|
||||||
177["Segment<br>[1866, 1896, 0]"]
|
177["Segment<br>[1882, 1915, 0]"]
|
||||||
178["Segment<br>[1866, 1896, 0]"]
|
178["Segment<br>[1882, 1915, 0]"]
|
||||||
179["Segment<br>[1866, 1896, 0]"]
|
179["Segment<br>[1882, 1915, 0]"]
|
||||||
180["Segment<br>[1866, 1896, 0]"]
|
180["Segment<br>[1882, 1915, 0]"]
|
||||||
181["Segment<br>[1866, 1896, 0]"]
|
181["Segment<br>[1882, 1915, 0]"]
|
||||||
182["Segment<br>[1866, 1896, 0]"]
|
182["Segment<br>[1882, 1915, 0]"]
|
||||||
183["Segment<br>[1866, 1896, 0]"]
|
183["Segment<br>[1882, 1915, 0]"]
|
||||||
184["Segment<br>[1866, 1896, 0]"]
|
184["Segment<br>[1882, 1915, 0]"]
|
||||||
185["Segment<br>[1866, 1896, 0]"]
|
185["Segment<br>[1882, 1915, 0]"]
|
||||||
186["Segment<br>[1866, 1896, 0]"]
|
186["Segment<br>[1882, 1915, 0]"]
|
||||||
187["Segment<br>[1866, 1896, 0]"]
|
187["Segment<br>[1882, 1915, 0]"]
|
||||||
188["Segment<br>[1866, 1896, 0]"]
|
188["Segment<br>[1882, 1915, 0]"]
|
||||||
189["Segment<br>[1866, 1896, 0]"]
|
189["Segment<br>[1882, 1915, 0]"]
|
||||||
190["Segment<br>[1866, 1896, 0]"]
|
190["Segment<br>[1882, 1915, 0]"]
|
||||||
191["Segment<br>[1866, 1896, 0]"]
|
191["Segment<br>[1882, 1915, 0]"]
|
||||||
192["Segment<br>[1866, 1896, 0]"]
|
192["Segment<br>[1882, 1915, 0]"]
|
||||||
193["Segment<br>[1866, 1896, 0]"]
|
193["Segment<br>[1882, 1915, 0]"]
|
||||||
194["Segment<br>[1866, 1896, 0]"]
|
194["Segment<br>[1882, 1915, 0]"]
|
||||||
195["Segment<br>[1866, 1896, 0]"]
|
195["Segment<br>[1882, 1915, 0]"]
|
||||||
196["Segment<br>[1866, 1896, 0]"]
|
196["Segment<br>[1882, 1915, 0]"]
|
||||||
197["Segment<br>[1866, 1896, 0]"]
|
197["Segment<br>[1882, 1915, 0]"]
|
||||||
198["Segment<br>[1866, 1896, 0]"]
|
198["Segment<br>[1882, 1915, 0]"]
|
||||||
199["Segment<br>[1866, 1896, 0]"]
|
199["Segment<br>[1882, 1915, 0]"]
|
||||||
200["Segment<br>[1866, 1896, 0]"]
|
200["Segment<br>[1882, 1915, 0]"]
|
||||||
201["Segment<br>[1866, 1896, 0]"]
|
201["Segment<br>[1882, 1915, 0]"]
|
||||||
202["Segment<br>[1866, 1896, 0]"]
|
202["Segment<br>[1882, 1915, 0]"]
|
||||||
203["Segment<br>[1866, 1896, 0]"]
|
203["Segment<br>[1882, 1915, 0]"]
|
||||||
204["Segment<br>[1866, 1896, 0]"]
|
204["Segment<br>[1882, 1915, 0]"]
|
||||||
205["Segment<br>[1866, 1896, 0]"]
|
205["Segment<br>[1882, 1915, 0]"]
|
||||||
206["Segment<br>[1866, 1896, 0]"]
|
206["Segment<br>[1882, 1915, 0]"]
|
||||||
207["Segment<br>[1866, 1896, 0]"]
|
207["Segment<br>[1882, 1915, 0]"]
|
||||||
208["Segment<br>[1866, 1896, 0]"]
|
208["Segment<br>[1882, 1915, 0]"]
|
||||||
209["Segment<br>[1866, 1896, 0]"]
|
209["Segment<br>[1882, 1915, 0]"]
|
||||||
210["Segment<br>[2053, 2122, 0]"]
|
210["Segment<br>[2072, 2141, 0]"]
|
||||||
211["Segment<br>[2182, 2189, 0]"]
|
211["Segment<br>[2201, 2208, 0]"]
|
||||||
218[Solid2d]
|
218[Solid2d]
|
||||||
end
|
end
|
||||||
subgraph path6 [Path]
|
subgraph path6 [Path]
|
||||||
6["Path<br>[2670, 2770, 0]"]
|
6["Path<br>[2689, 2789, 0]"]
|
||||||
212["Segment<br>[2776, 2803, 0]"]
|
212["Segment<br>[2795, 2822, 0]"]
|
||||||
213["Segment<br>[2809, 2837, 0]"]
|
213["Segment<br>[2828, 2856, 0]"]
|
||||||
214["Segment<br>[2843, 2871, 0]"]
|
214["Segment<br>[2862, 2890, 0]"]
|
||||||
215["Segment<br>[2877, 2971, 0]"]
|
215["Segment<br>[2896, 2990, 0]"]
|
||||||
216["Segment<br>[2977, 3060, 0]"]
|
216["Segment<br>[2996, 3079, 0]"]
|
||||||
217["Segment<br>[3066, 3073, 0]"]
|
217["Segment<br>[3085, 3092, 0]"]
|
||||||
220[Solid2d]
|
220[Solid2d]
|
||||||
end
|
end
|
||||||
1["Plane<br>[1408, 1425, 0]"]
|
1["Plane<br>[1413, 1430, 0]"]
|
||||||
2["Plane<br>[1927, 1944, 0]"]
|
2["Plane<br>[1946, 1963, 0]"]
|
||||||
3["StartSketchOnFace<br>[2633, 2664, 0]"]
|
3["StartSketchOnFace<br>[2652, 2683, 0]"]
|
||||||
221["Sweep Extrusion<br>[1487, 1515, 0]"]
|
221["Sweep Extrusion<br>[1492, 1520, 0]"]
|
||||||
222["Sweep Extrusion<br>[2195, 2223, 0]"]
|
222["Sweep Extrusion<br>[2214, 2242, 0]"]
|
||||||
223["Sweep Extrusion<br>[3079, 3108, 0]"]
|
223["Sweep Extrusion<br>[3098, 3127, 0]"]
|
||||||
224[Wall]
|
224[Wall]
|
||||||
225[Wall]
|
225[Wall]
|
||||||
226[Wall]
|
226[Wall]
|
||||||
|
|||||||
@ -698,7 +698,8 @@ description: Result of parsing gear.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -934,7 +935,8 @@ description: Result of parsing gear.kcl
|
|||||||
"name": "r",
|
"name": "r",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -1135,7 +1137,8 @@ description: Result of parsing gear.kcl
|
|||||||
"name": "a",
|
"name": "a",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -1337,7 +1340,8 @@ description: Result of parsing gear.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -1559,7 +1563,8 @@ description: Result of parsing gear.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start": 0,
|
"start": 0,
|
||||||
@ -2119,7 +2124,7 @@ description: Result of parsing gear.kcl
|
|||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
@ -2169,14 +2174,15 @@ description: Result of parsing gear.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Parameter",
|
"type": "Parameter",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
}
|
||||||
@ -2735,7 +2741,7 @@ description: Result of parsing gear.kcl
|
|||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
@ -2767,14 +2773,15 @@ description: Result of parsing gear.kcl
|
|||||||
"name": "i",
|
"name": "i",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Parameter",
|
"type": "Parameter",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sg",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -2,60 +2,60 @@
|
|||||||
flowchart LR
|
flowchart LR
|
||||||
subgraph path2 [Path]
|
subgraph path2 [Path]
|
||||||
2["Path<br>[733, 769, 0]"]
|
2["Path<br>[733, 769, 0]"]
|
||||||
3["Segment<br>[923, 987, 0]"]
|
3["Segment<br>[923, 986, 0]"]
|
||||||
4["Segment<br>[923, 987, 0]"]
|
4["Segment<br>[923, 986, 0]"]
|
||||||
5["Segment<br>[923, 987, 0]"]
|
5["Segment<br>[923, 986, 0]"]
|
||||||
6["Segment<br>[923, 987, 0]"]
|
6["Segment<br>[923, 986, 0]"]
|
||||||
7["Segment<br>[923, 987, 0]"]
|
7["Segment<br>[923, 986, 0]"]
|
||||||
8["Segment<br>[923, 987, 0]"]
|
8["Segment<br>[923, 986, 0]"]
|
||||||
9["Segment<br>[923, 987, 0]"]
|
9["Segment<br>[923, 986, 0]"]
|
||||||
10["Segment<br>[923, 987, 0]"]
|
10["Segment<br>[923, 986, 0]"]
|
||||||
11["Segment<br>[923, 987, 0]"]
|
11["Segment<br>[923, 986, 0]"]
|
||||||
12["Segment<br>[923, 987, 0]"]
|
12["Segment<br>[923, 986, 0]"]
|
||||||
13["Segment<br>[923, 987, 0]"]
|
13["Segment<br>[923, 986, 0]"]
|
||||||
14["Segment<br>[923, 987, 0]"]
|
14["Segment<br>[923, 986, 0]"]
|
||||||
15["Segment<br>[923, 987, 0]"]
|
15["Segment<br>[923, 986, 0]"]
|
||||||
16["Segment<br>[923, 987, 0]"]
|
16["Segment<br>[923, 986, 0]"]
|
||||||
17["Segment<br>[923, 987, 0]"]
|
17["Segment<br>[923, 986, 0]"]
|
||||||
18["Segment<br>[923, 987, 0]"]
|
18["Segment<br>[923, 986, 0]"]
|
||||||
19["Segment<br>[923, 987, 0]"]
|
19["Segment<br>[923, 986, 0]"]
|
||||||
20["Segment<br>[923, 987, 0]"]
|
20["Segment<br>[923, 986, 0]"]
|
||||||
21["Segment<br>[923, 987, 0]"]
|
21["Segment<br>[923, 986, 0]"]
|
||||||
22["Segment<br>[923, 987, 0]"]
|
22["Segment<br>[923, 986, 0]"]
|
||||||
23["Segment<br>[923, 987, 0]"]
|
23["Segment<br>[923, 986, 0]"]
|
||||||
24["Segment<br>[923, 987, 0]"]
|
24["Segment<br>[923, 986, 0]"]
|
||||||
25["Segment<br>[923, 987, 0]"]
|
25["Segment<br>[923, 986, 0]"]
|
||||||
26["Segment<br>[923, 987, 0]"]
|
26["Segment<br>[923, 986, 0]"]
|
||||||
27["Segment<br>[923, 987, 0]"]
|
27["Segment<br>[923, 986, 0]"]
|
||||||
28["Segment<br>[923, 987, 0]"]
|
28["Segment<br>[923, 986, 0]"]
|
||||||
29["Segment<br>[923, 987, 0]"]
|
29["Segment<br>[923, 986, 0]"]
|
||||||
30["Segment<br>[923, 987, 0]"]
|
30["Segment<br>[923, 986, 0]"]
|
||||||
31["Segment<br>[923, 987, 0]"]
|
31["Segment<br>[923, 986, 0]"]
|
||||||
32["Segment<br>[923, 987, 0]"]
|
32["Segment<br>[923, 986, 0]"]
|
||||||
33["Segment<br>[923, 987, 0]"]
|
33["Segment<br>[923, 986, 0]"]
|
||||||
34["Segment<br>[923, 987, 0]"]
|
34["Segment<br>[923, 986, 0]"]
|
||||||
35["Segment<br>[923, 987, 0]"]
|
35["Segment<br>[923, 986, 0]"]
|
||||||
36["Segment<br>[923, 987, 0]"]
|
36["Segment<br>[923, 986, 0]"]
|
||||||
37["Segment<br>[923, 987, 0]"]
|
37["Segment<br>[923, 986, 0]"]
|
||||||
38["Segment<br>[923, 987, 0]"]
|
38["Segment<br>[923, 986, 0]"]
|
||||||
39["Segment<br>[923, 987, 0]"]
|
39["Segment<br>[923, 986, 0]"]
|
||||||
40["Segment<br>[923, 987, 0]"]
|
40["Segment<br>[923, 986, 0]"]
|
||||||
41["Segment<br>[923, 987, 0]"]
|
41["Segment<br>[923, 986, 0]"]
|
||||||
42["Segment<br>[923, 987, 0]"]
|
42["Segment<br>[923, 986, 0]"]
|
||||||
43["Segment<br>[923, 987, 0]"]
|
43["Segment<br>[923, 986, 0]"]
|
||||||
44["Segment<br>[923, 987, 0]"]
|
44["Segment<br>[923, 986, 0]"]
|
||||||
45["Segment<br>[923, 987, 0]"]
|
45["Segment<br>[923, 986, 0]"]
|
||||||
46["Segment<br>[923, 987, 0]"]
|
46["Segment<br>[923, 986, 0]"]
|
||||||
47["Segment<br>[923, 987, 0]"]
|
47["Segment<br>[923, 986, 0]"]
|
||||||
48["Segment<br>[923, 987, 0]"]
|
48["Segment<br>[923, 986, 0]"]
|
||||||
49["Segment<br>[923, 987, 0]"]
|
49["Segment<br>[923, 986, 0]"]
|
||||||
50["Segment<br>[923, 987, 0]"]
|
50["Segment<br>[923, 986, 0]"]
|
||||||
51["Segment<br>[923, 987, 0]"]
|
51["Segment<br>[923, 986, 0]"]
|
||||||
52["Segment<br>[1051, 1069, 0]"]
|
52["Segment<br>[1050, 1068, 0]"]
|
||||||
53[Solid2d]
|
53[Solid2d]
|
||||||
end
|
end
|
||||||
1["Plane<br>[710, 727, 0]"]
|
1["Plane<br>[710, 727, 0]"]
|
||||||
54["Sweep Extrusion<br>[1123, 1161, 0]"]
|
54["Sweep Extrusion<br>[1122, 1160, 0]"]
|
||||||
55[Wall]
|
55[Wall]
|
||||||
56[Wall]
|
56[Wall]
|
||||||
57[Wall]
|
57[Wall]
|
||||||
|
|||||||
@ -801,7 +801,7 @@ description: Result of parsing loop_tag.kcl
|
|||||||
"name": {
|
"name": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sketch",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
},
|
},
|
||||||
@ -833,14 +833,15 @@ description: Result of parsing loop_tag.kcl
|
|||||||
"name": "index",
|
"name": "index",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
},
|
||||||
|
"labeled": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Parameter",
|
"type": "Parameter",
|
||||||
"identifier": {
|
"identifier": {
|
||||||
"commentStart": 0,
|
"commentStart": 0,
|
||||||
"end": 0,
|
"end": 0,
|
||||||
"name": "sketch",
|
"name": "accum",
|
||||||
"start": 0,
|
"start": 0,
|
||||||
"type": "Identifier"
|
"type": "Identifier"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,8 +27,8 @@ initialSketch = startSketchOn(XY)
|
|||||||
finalSketch = reduce(
|
finalSketch = reduce(
|
||||||
[1..numSides-1],
|
[1..numSides-1],
|
||||||
initial = initialSketch,
|
initial = initialSketch,
|
||||||
f = fn(index, sketch) {
|
f = fn(@index, accum) {
|
||||||
return line(sketch, end = calculatePoint(index), tag = $problematicTag)
|
return line(accum, end = calculatePoint(index), tag = $problematicTag)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -34,8 +34,8 @@ initialSketch = startSketchOn(XY)
|
|||||||
finalSketch = reduce(
|
finalSketch = reduce(
|
||||||
[1 .. numSides - 1],
|
[1 .. numSides - 1],
|
||||||
initial = initialSketch,
|
initial = initialSketch,
|
||||||
f = fn(index, sketch) {
|
f = fn(@index, accum) {
|
||||||
return line(sketch, end = calculatePoint(index), tag = $problematicTag)
|
return line(accum, end = calculatePoint(index), tag = $problematicTag)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user