Revolve/Sweep multiple sketches at once (#5779)

* revolve multiple sketches at once

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

* updates

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

* updates

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

* updates

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

* updates

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

* do the same for swweep

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

* updates

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

* do the same for swweep

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

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
Jess Frazelle
2025-03-13 09:38:22 -07:00
committed by GitHub
parent c441a3ab1c
commit 80f78e1c61
28 changed files with 1153 additions and 899 deletions

View File

@ -6,7 +6,7 @@ layout: manual
Extend a 2-dimensional sketch through a third dimension in order to create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid.
You can provide more than one sketch to extrude, and they will all be extruded in the same direction.
```js
extrude(
@ -20,7 +20,7 @@ extrude(
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `sketchSet` | [`SketchSet`](/docs/kcl/types/SketchSet) | Which sketches should be extruded | Yes |
| `sketchSet` | [`SketchSet`](/docs/kcl/types/SketchSet) | Which sketch or set of sketches should be extruded | Yes |
| `length` | [`number`](/docs/kcl/types/number) | How far to extrude the given sketches | Yes |
### Returns

File diff suppressed because one or more lines are too long

View File

@ -89138,7 +89138,7 @@
{
"name": "extrude",
"summary": "Extend a 2-dimensional sketch through a third dimension in order to create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid.",
"description": "",
"description": "You can provide more than one sketch to extrude, and they will all be extruded in the same direction.",
"tags": [],
"keywordArguments": true,
"args": [
@ -90844,7 +90844,7 @@
},
"required": true,
"includeInSnippet": true,
"description": "Which sketches should be extruded",
"description": "Which sketch or set of sketches should be extruded",
"labelRequired": false
},
{
@ -254139,7 +254139,7 @@
{
"name": "revolve",
"summary": "Rotate a sketch around some provided axis, creating a solid from its extent.",
"description": "This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its revolved around an axis rather than using the extent of the sketch linearly translated through a third dimension.\n\nRevolve occurs around a local sketch axis rather than a global axis.",
"description": "This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its revolved around an axis rather than using the extent of the sketch linearly translated through a third dimension.\n\nRevolve occurs around a local sketch axis rather than a global axis.\n\nYou can provide more than one sketch to revolve, and they will all be revolved around the same axis.",
"tags": [],
"keywordArguments": false,
"args": [
@ -255382,11 +255382,14 @@
"labelRequired": true
},
{
"name": "sketch",
"type": "Sketch",
"name": "sketchSet",
"type": "SketchSet",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "Sketch",
"title": "SketchSet",
"description": "A sketch or a group of sketches.",
"oneOf": [
{
"type": "object",
"required": [
"__meta",
@ -255396,9 +255399,16 @@
"originalId",
"paths",
"start",
"type",
"units"
],
"properties": {
"type": {
"type": "string",
"enum": [
"sketch"
]
},
"id": {
"description": "The id of the sketch (this will change when the engine's reference to it changes).",
"type": "string",
@ -255456,7 +255466,29 @@
"$ref": "#/components/schemas/Metadata"
}
}
}
},
{
"type": [
"object",
"array"
],
"items": {
"$ref": "#/components/schemas/Sketch"
},
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"sketches"
]
}
}
}
],
"definitions": {
"Axis2dOrEdgeReference": {
"description": "A 2D axis or tagged edge.",
@ -257166,10 +257198,13 @@
],
"returnValue": {
"name": "",
"type": "Solid",
"type": "SolidSet",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "Solid",
"title": "SolidSet",
"description": "A solid or a group of solids.",
"oneOf": [
{
"type": "object",
"required": [
"__meta",
@ -257177,10 +257212,17 @@
"height",
"id",
"sketch",
"type",
"units",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"solid"
]
},
"id": {
"description": "The id of the solid.",
"type": "string",
@ -257243,7 +257285,29 @@
"$ref": "#/components/schemas/Metadata"
}
}
}
},
{
"type": [
"object",
"array"
],
"items": {
"$ref": "#/components/schemas/Solid"
},
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"solids"
]
}
}
}
],
"definitions": {
"ArtifactId": {
"type": "string",
@ -258850,7 +258914,8 @@
"box = startSketchOn('XY')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 20])\n |> line(end = [20, 0])\n |> line(end = [0, -20])\n |> close()\n |> extrude(length = 20)\n\nsketch001 = startSketchOn(box, \"END\")\n |> circle(center = [10, 10], radius = 4)\n |> revolve({ angle = -90, axis = 'y' }, %)",
"box = startSketchOn('XY')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 20])\n |> line(end = [20, 0])\n |> line(end = [0, -20], tag = $revolveAxis)\n |> close()\n |> extrude(length = 20)\n\nsketch001 = startSketchOn(box, \"END\")\n |> circle(center = [10, 10], radius = 4)\n |> revolve({\n angle = 90,\n axis = getOppositeEdge(revolveAxis)\n }, %)",
"box = startSketchOn('XY')\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 20])\n |> line(end = [20, 0])\n |> line(end = [0, -20], tag = $revolveAxis)\n |> close()\n |> extrude(length = 20)\n\nsketch001 = startSketchOn(box, \"END\")\n |> circle(center = [10, 10], radius = 4)\n |> revolve({\n angle = 90,\n axis = getOppositeEdge(revolveAxis),\n tolerance = 0.0001\n }, %)",
"sketch001 = startSketchOn('XY')\n |> startProfileAt([10, 0], %)\n |> line(end = [5, -5])\n |> line(end = [5, 5])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\npart001 = revolve({\n axis = {\n custom = {\n axis = [0.0, 1.0],\n origin = [0.0, 0.0]\n }\n }\n}, sketch001)"
"sketch001 = startSketchOn('XY')\n |> startProfileAt([10, 0], %)\n |> line(end = [5, -5])\n |> line(end = [5, 5])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\npart001 = revolve({\n axis = {\n custom = {\n axis = [0.0, 1.0],\n origin = [0.0, 0.0]\n }\n }\n}, sketch001)",
"// Revolve two sketches around the same axis.\n\n\nsketch001 = startSketchOn('XY')\nprofile001 = startProfileAt([4, 8], sketch001)\n |> xLine(length = 3)\n |> yLine(length = -3)\n |> xLine(length = -3)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nprofile002 = startProfileAt([-5, 8], sketch001)\n |> xLine(length = 3)\n |> yLine(length = -3)\n |> xLine(length = -3)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nrevolve({ axis = \"X\" }, [profile001, profile002])"
]
},
{
@ -304862,16 +304927,19 @@
{
"name": "sweep",
"summary": "Extrude a sketch along a path.",
"description": "This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its path. This is useful for creating more complex shapes that can't be created with a simple extrusion.",
"description": "This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its path. This is useful for creating more complex shapes that can't be created with a simple extrusion.\n\nYou can provide more than one sketch to sweep, and they will all be swept along the same path.",
"tags": [],
"keywordArguments": true,
"args": [
{
"name": "sketch",
"type": "Sketch",
"name": "sketchSet",
"type": "SketchSet",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "Sketch",
"title": "SketchSet",
"description": "A sketch or a group of sketches.",
"oneOf": [
{
"type": "object",
"required": [
"__meta",
@ -304881,9 +304949,16 @@
"originalId",
"paths",
"start",
"type",
"units"
],
"properties": {
"type": {
"type": "string",
"enum": [
"sketch"
]
},
"id": {
"description": "The id of the sketch (this will change when the engine's reference to it changes).",
"type": "string",
@ -304941,7 +305016,29 @@
"$ref": "#/components/schemas/Metadata"
}
}
}
},
{
"type": [
"object",
"array"
],
"items": {
"$ref": "#/components/schemas/Sketch"
},
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"sketches"
]
}
}
}
],
"definitions": {
"Path": {
"description": "A path.",
@ -306536,7 +306633,7 @@
},
"required": true,
"includeInSnippet": true,
"description": "The sketch that should be swept in space",
"description": "The sketch or set of sketches that should be swept in space",
"labelRequired": false
},
{
@ -311516,10 +311613,13 @@
],
"returnValue": {
"name": "",
"type": "Solid",
"type": "SolidSet",
"schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "Solid",
"title": "SolidSet",
"description": "A solid or a group of solids.",
"oneOf": [
{
"type": "object",
"required": [
"__meta",
@ -311527,10 +311627,17 @@
"height",
"id",
"sketch",
"type",
"units",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"solid"
]
},
"id": {
"description": "The id of the solid.",
"type": "string",
@ -311593,7 +311700,29 @@
"$ref": "#/components/schemas/Metadata"
}
}
}
},
{
"type": [
"object",
"array"
],
"items": {
"$ref": "#/components/schemas/Solid"
},
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"solids"
]
}
}
}
],
"definitions": {
"ArtifactId": {
"type": "string",
@ -313194,7 +313323,8 @@
"deprecated": false,
"examples": [
"// Create a pipe using a sweep.\n\n\n// Create a path for the sweep.\nsweepPath = startSketchOn('XZ')\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn('XY')\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn('XY')\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)",
"// Create a spring by sweeping around a helix path.\n\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = 'Z',\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle(center = [0, 0], radius = 1)\n |> sweep(path = helixPath)"
"// Create a spring by sweeping around a helix path.\n\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = 'Z',\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn('YZ')\n |> circle(center = [0, 0], radius = 1)\n |> sweep(path = helixPath)",
"// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn('XY')\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine([0, 73.47], %, $rectangleSegmentA001)\n |> angledLine([\n segAng(rectangleSegmentA001) - 90,\n 50.61\n ], %)\n |> angledLine([\n segAng(rectangleSegmentA001),\n -segLen(rectangleSegmentA001)\n ], %)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn('YZ')\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nsweep([rectangleSketch, circleSketch], path = sweepPath)"
]
},
{

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -178,13 +178,8 @@ impl KclErrorWithOutputs {
path: self
.filenames
.get(&first_source_range.module_id())
.ok_or_else(|| {
anyhow::anyhow!(
"Could not find filename for module id: {:?}",
first_source_range.module_id()
)
})?
.clone(),
.cloned()
.unwrap_or(ModulePath::Main),
});
let filename = source.path.to_string();
let kcl_source = source.source.to_string();
@ -192,11 +187,10 @@ impl KclErrorWithOutputs {
let mut related = Vec::new();
for source_range in source_ranges {
let module_id = source_range.module_id();
let source = self
.source_files
.get(&module_id)
.cloned()
.ok_or_else(|| anyhow::anyhow!("Could not find source file for module id: {:?}", module_id))?;
let source = self.source_files.get(&module_id).cloned().unwrap_or(ModuleSource {
source: code.to_string(),
path: self.filenames.get(&module_id).cloned().unwrap_or(ModulePath::Main),
});
let error = self.error.override_source_ranges(vec![source_range]);
let report = Report {
error,

View File

@ -522,13 +522,6 @@ impl Args {
FromArgs::from_args(self, 0)
}
pub(crate) fn get_data_and_sketch<'a, T>(&'a self) -> Result<(T, Sketch), KclError>
where
T: serde::de::DeserializeOwned + FromArgs<'a>,
{
FromArgs::from_args(self, 0)
}
pub(crate) fn get_data_and_sketch_set<'a, T>(&'a self) -> Result<(T, SketchSet), KclError>
where
T: serde::de::DeserializeOwned + FromArgs<'a>,

View File

@ -34,6 +34,9 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// create new 3-dimensional volume, or if extruded into an existing volume,
/// cut into an existing solid.
///
/// You can provide more than one sketch to extrude, and they will all be
/// extruded in the same direction.
///
/// ```no_run
/// example = startSketchOn('XZ')
/// |> startProfileAt([0, 0], %)
@ -82,7 +85,7 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
keywords = true,
unlabeled_first = true,
args = {
sketch_set = { docs = "Which sketches should be extruded"},
sketch_set = { docs = "Which sketch or set of sketches should be extruded"},
length = { docs = "How far to extrude the given sketches"},
}
}]

View File

@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};
use crate::{
errors::{KclError, KclErrorDetails},
execution::{ExecState, KclValue, Sketch, Solid},
execution::{ExecState, KclValue, Sketch, SketchSet, SolidSet},
std::{axis_or_reference::Axis2dOrEdgeReference, extrude::do_post_extrude, fillet::default_tolerance, Args},
};
@ -28,12 +28,12 @@ pub struct RevolveData {
pub tolerance: Option<f64>,
}
/// Revolve a sketch around an axis.
/// Revolve a sketch or set of sketches around an axis.
pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let (data, sketch): (RevolveData, Sketch) = args.get_data_and_sketch()?;
let (data, sketch_set): (RevolveData, SketchSet) = args.get_data_and_sketch_set()?;
let value = inner_revolve(data, sketch, exec_state, args).await?;
Ok(KclValue::Solid { value })
let value = inner_revolve(data, sketch_set, exec_state, args).await?;
Ok(value.into())
}
/// Rotate a sketch around some provided axis, creating a solid from its extent.
@ -46,6 +46,9 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
///
/// Revolve occurs around a local sketch axis rather than a global axis.
///
/// You can provide more than one sketch to revolve, and they will all be
/// revolved around the same axis.
///
/// ```no_run
/// part001 = startSketchOn('XY')
/// |> startProfileAt([4, 12], %)
@ -174,16 +177,39 @@ pub async fn revolve(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// }
/// }, sketch001)
/// ```
///
/// ```no_run
/// // Revolve two sketches around the same axis.
///
/// sketch001 = startSketchOn('XY')
/// profile001 = startProfileAt([4, 8], sketch001)
/// |> xLine(length = 3)
/// |> yLine(length = -3)
/// |> xLine(length = -3)
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// profile002 = startProfileAt([-5, 8], sketch001)
/// |> xLine(length = 3)
/// |> yLine(length = -3)
/// |> xLine(length = -3)
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// revolve({
/// axis = "X",
/// }, [profile001, profile002])
/// ```
#[stdlib {
name = "revolve",
feature_tree_operation = true,
}]
async fn inner_revolve(
data: RevolveData,
sketch: Sketch,
sketch_set: SketchSet,
exec_state: &mut ExecState,
args: Args,
) -> Result<Box<Solid>, KclError> {
) -> Result<SolidSet, KclError> {
if let Some(angle) = data.angle {
// Return an error if the angle is zero.
// We don't use validate() here because we want to return a specific error message that is
@ -198,8 +224,12 @@ async fn inner_revolve(
let angle = Angle::from_degrees(data.angle.unwrap_or(360.0));
let sketches: Vec<Sketch> = sketch_set.into();
let mut solids = Vec::new();
for sketch in &sketches {
let id = exec_state.next_uuid();
match data.axis {
match &data.axis {
Axis2dOrEdgeReference::Axis(axis) => {
let (axis, origin) = axis.axis_and_origin()?;
args.batch_modeling_cmd(
@ -230,5 +260,8 @@ async fn inner_revolve(
}
}
do_post_extrude(sketch, id.into(), 0.0, exec_state, args).await
solids.push(do_post_extrude(sketch.clone(), id.into(), 0.0, exec_state, args.clone()).await?);
}
Ok(solids.into())
}

View File

@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};
use crate::{
errors::KclError,
execution::{ExecState, Helix, KclValue, Sketch, Solid},
execution::{ExecState, Helix, KclValue, Sketch, SketchSet, SolidSet},
std::{extrude::do_post_extrude, fillet::default_tolerance, Args},
};
@ -30,7 +30,7 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
let tolerance = args.get_kw_arg_opt("tolerance")?;
let value = inner_sweep(sketch, path, sectional, tolerance, exec_state, args).await?;
Ok(KclValue::Solid { value })
Ok(value.into())
}
/// Extrude a sketch along a path.
@ -41,6 +41,9 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// creating more complex shapes that can't be created with a simple
/// extrusion.
///
/// You can provide more than one sketch to sweep, and they will all be
/// swept along the same path.
///
/// ```no_run
/// // Create a pipe using a sweep.
///
@ -94,40 +97,79 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// |> circle( center = [0, 0], radius = 1)
/// |> sweep(path = helixPath)
/// ```
///
/// ```
/// // Sweep two sketches along the same path.
///
/// sketch001 = startSketchOn('XY')
/// rectangleSketch = startProfileAt([-200, 23.86], sketch001)
/// |> angledLine([0, 73.47], %, $rectangleSegmentA001)
/// |> angledLine([
/// segAng(rectangleSegmentA001) - 90,
/// 50.61
/// ], %)
/// |> angledLine([
/// segAng(rectangleSegmentA001),
/// -segLen(rectangleSegmentA001)
/// ], %)
/// |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
/// |> close()
///
/// circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)
///
/// sketch002 = startSketchOn('YZ')
/// sweepPath = startProfileAt([0, 0], sketch002)
/// |> yLine(length = 231.81)
/// |> tangentialArc({
/// radius = 80,
/// offset = -90,
/// }, %)
/// |> xLine(length = 384.93)
///
/// sweep([rectangleSketch, circleSketch], path = sweepPath)
/// ```
#[stdlib {
name = "sweep",
feature_tree_operation = true,
keywords = true,
unlabeled_first = true,
args = {
sketch = { docs = "The sketch that should be swept in space" },
sketch_set = { docs = "The sketch or set of sketches that should be swept in space" },
path = { docs = "The path to sweep the sketch along" },
sectional = { docs = "If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components." },
tolerance = { docs = "Tolerance for this operation" },
}
}]
async fn inner_sweep(
sketch: Sketch,
sketch_set: SketchSet,
path: SweepPath,
sectional: Option<bool>,
tolerance: Option<f64>,
exec_state: &mut ExecState,
args: Args,
) -> Result<Box<Solid>, KclError> {
) -> Result<SolidSet, KclError> {
let trajectory = match path {
SweepPath::Sketch(sketch) => sketch.id.into(),
SweepPath::Helix(helix) => helix.value.into(),
};
let sketches: Vec<Sketch> = sketch_set.into();
let mut solids = Vec::new();
for sketch in &sketches {
let id = exec_state.next_uuid();
args.batch_modeling_cmd(
id,
ModelingCmd::from(mcmd::Sweep {
target: sketch.id.into(),
trajectory: match path {
SweepPath::Sketch(sketch) => sketch.id.into(),
SweepPath::Helix(helix) => helix.value.into(),
},
trajectory,
sectional: sectional.unwrap_or(false),
tolerance: LengthUnit(tolerance.unwrap_or(default_tolerance(&args.ctx.settings.units))),
}),
)
.await?;
do_post_extrude(sketch, id.into(), 0.0, exec_state, args).await
solids.push(do_post_extrude(sketch.clone(), id.into(), 0.0, exec_state, args.clone()).await?);
}
Ok(solids.into())
}

View File

@ -1,5 +1,5 @@
---
source: kcl/src/simulation_tests.rs
source: kcl-lib/src/simulation_tests.rs
description: Operations executed import_function_not_sketch.kcl
---
[
@ -44,7 +44,7 @@ description: Operations executed import_function_not_sketch.kcl
3
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -325,7 +325,7 @@ description: Operations executed ball-bearing.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -585,7 +585,7 @@ description: Operations executed ball-bearing.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -833,7 +833,7 @@ description: Operations executed ball-bearing.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -1845,7 +1845,7 @@ description: Operations executed car-wheel-assembly.kcl
3
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -1909,7 +1909,7 @@ description: Operations executed car-wheel-assembly.kcl
3
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -2851,7 +2851,7 @@ description: Operations executed car-wheel-assembly.kcl
3
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -3101,7 +3101,7 @@ description: Operations executed car-wheel-assembly.kcl
6
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -3540,7 +3540,7 @@ description: Operations executed car-wheel-assembly.kcl
5
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -3604,7 +3604,7 @@ description: Operations executed car-wheel-assembly.kcl
7
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -57,7 +57,7 @@ description: Operations executed french-press.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -744,7 +744,7 @@ description: Operations executed french-press.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -808,7 +808,7 @@ description: Operations executed french-press.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -1340,7 +1340,7 @@ description: Operations executed french-press.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -473,7 +473,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -473,7 +473,7 @@ description: Operations executed gridfinity-baseplate.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -473,7 +473,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -3012,7 +3012,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {
@ -3346,7 +3346,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -473,7 +473,7 @@ description: Operations executed gridfinity-bins.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

File diff suppressed because one or more lines are too long

View File

@ -67,7 +67,7 @@ description: Operations executed pipe-flange-assembly.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -1,5 +1,5 @@
---
source: kcl/src/simulation_tests.rs
source: kcl-lib/src/simulation_tests.rs
description: Operations executed pipe-with-bend.kcl
---
[
@ -95,7 +95,7 @@ description: Operations executed pipe-with-bend.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -44,7 +44,7 @@ description: Operations executed pipe.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -125,7 +125,7 @@ description: Operations executed poopy-shoe.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -3134,7 +3134,7 @@ description: Operations executed walkie-talkie.kcl
7
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -125,7 +125,7 @@ description: Operations executed poop_chute.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {

View File

@ -81,7 +81,7 @@ description: Operations executed revolve_about_edge.kcl
0
]
},
"sketch": {
"sketchSet": {
"value": {
"type": "Sketch",
"value": {