From be5e04ada7cb525a5974dd76d3664b295e493b79 Mon Sep 17 00:00:00 2001 From: Pierre Jacquier Date: Wed, 22 Jul 2026 18:50:07 -0400 Subject: [PATCH 1/3] Edge Surface Extrude Towards https://github.com/KittyCAD/roadmap/issues/445 --- .../kcl-std/functions/std-sketch-extrude.md | 6 +- .../solid-modeling/create-solids/extrude.mdx | 14 ++++ .../create-surfaces/extrude.mdx | 81 ++++++++++++++++--- 3 files changed, 85 insertions(+), 16 deletions(-) diff --git a/content/pages/docs/kcl-std/functions/std-sketch-extrude.md b/content/pages/docs/kcl-std/functions/std-sketch-extrude.md index a5fd5f0c..a98022c8 100644 --- a/content/pages/docs/kcl-std/functions/std-sketch-extrude.md +++ b/content/pages/docs/kcl-std/functions/std-sketch-extrude.md @@ -43,7 +43,7 @@ can change this behavior by using the `method` parameter. See | `length` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | How far to extrude the given sketches. Incompatible with `to`. | No | | `to` | [`Point3d`](/docs/kcl-std/types/std-types-Point3d) or [`Axis3d`](/docs/kcl-std/types/std-types-Axis3d) or [`Plane`](/docs/kcl-std/types/std-types-Plane) or [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`Face`](/docs/kcl-std/types/std-types-Face) or [`Sketch`](/docs/kcl-std/types/std-types-Sketch) or [`Solid`](/docs/kcl-std/types/std-types-Solid) or [`TaggedEdge`](/docs/kcl-std/types/std-types-TaggedEdge) or [`TaggedFace`](/docs/kcl-std/types/std-types-TaggedFace) or [`any`](/docs/kcl-std/types/std-types-any) | Reference to extrude to. Incompatible with `length` and `twistAngle`. Experimental face API: edge specifier objects (`{ sideFaces = [faceTag1, faceTag2], endFaces? = [...], index? }`) are not ready for generated or user-facing KCL yet; prefer existing point, axis, plane, edge, face, sketch, solid, or tag forms until point-and-click and migration support ships. | No | | `symmetric` | [`bool`](/docs/kcl-std/types/std-types-bool) | If true, the extrusion will happen symmetrically around the sketch. Otherwise, the extrusion will happen on only one side of the sketch. | No | -| `direction` | [`Point3d`](/docs/kcl-std/types/std-types-Point3d) or [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`TaggedEdge`](/docs/kcl-std/types/std-types-TaggedEdge) or [`Segment`](/docs/kcl-std/types/std-types-Segment) | **Experimental.** If specified, will extrude in this direction instead of the sketch plane normal. If an edge is being extruded, this defaults to halfway between the faces on either side of the edge. | No | +| `direction` | [`Point3d`](/docs/kcl-std/types/std-types-Point3d) or [`Edge`](/docs/kcl-std/types/std-types-Edge) or [`TaggedEdge`](/docs/kcl-std/types/std-types-TaggedEdge) or [`Segment`](/docs/kcl-std/types/std-types-Segment) | If specified, will extrude in this direction instead of the sketch plane normal. If an edge is being extruded, this defaults to halfway between the faces on either side of the edge. | No | | `bidirectionalLength` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | If specified, will also extrude in the opposite direction to 'distance' to the specified distance. If 'symmetric' is true, this value is ignored. | No | | `tagStart` | [`TagDecl`](/docs/kcl-std/types/std-types-TagDecl) | A named tag for the face at the start of the extrusion, i.e. the original sketch. | No | | `tagEnd` | [`TagDecl`](/docs/kcl-std/types/std-types-TagDecl) | A named tag for the face at the end of the extrusion, i.e. the new face created by extruding the original sketch. | No | @@ -646,7 +646,7 @@ extrude( ```kcl -@settings(kclVersion = 2.0, experimentalFeatures = allow) +@settings(kclVersion = 2.0) // The direction parameter can apply to sketches, segments, or edges // Directions can be specified by an axis, a sketch segment, or a body's edge. @@ -766,5 +766,3 @@ extrude002 = extrude( touch-action="pan-y" > - - diff --git a/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/solid-modeling/create-solids/extrude.mdx b/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/solid-modeling/create-solids/extrude.mdx index 37262bbe..bd2549bf 100644 --- a/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/solid-modeling/create-solids/extrude.mdx +++ b/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/solid-modeling/create-solids/extrude.mdx @@ -82,6 +82,17 @@ When creating a non-symmetric bidirectional extrusion, this sets how far to extr In this example, the extrude uses two different lengths: 5mm in one direction and 2mm in the other. This allows you to create features that extend unequally from the sketch, giving you more control and flexibility for asymmetric or custom shapes. +## Direction + +By default, a sketch profile extrudes perpendicular to its sketch plane. Set `direction` when the +extrusion should follow a different vector. In the command palette, select a sketch segment or an +existing body edge to define that direction. In KCL, you can also pass a three-component vector, a +tagged edge, or an edge returned by an edge query. + +The direction reference sets the extrusion's orientation; `length` still sets its distance. The +same parameter is available when [extruding a surface or body +edge](/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude). + ## Start Tag and End Tag Apply tags to the start face (your original sketch plane) or end face (the extruded cap) to reference them in later operations. This is mainly used for referencing faces from other objects or features, especially in code or scripts. In the usual point-and-click UI flow, you don't need to set these tags. This is mostly for advanced users who want precise control or automation. @@ -197,6 +208,9 @@ be used with `length` or `twistAngle`. `symmetric`: Splits the extrusion equally to both sides of the sketch plane. +`direction`: Overrides the sketch plane normal. Accepts a 3D vector, sketch segment, body edge, +tagged edge, or queried edge. + `bidirectionalLength`: Adds a second extrusion distance in the opposite direction. Ignored when `symmetric` is enabled. diff --git a/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx b/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx index 0dbbb408..e67e3f4c 100644 --- a/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx +++ b/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx @@ -1,14 +1,15 @@ --- title: Extrude Surface -excerpt: Create surface extrusions with the Extrude Surface tool in Zoo Design Studio. +excerpt: Create surface extrusions from sketch profiles and body edges in Zoo Design Studio. sidebarPosition: 0 --- Use the same Extrude tool used in [Extrude Solid](/docs/zoo-design-studio/features/3d-design/parametric-modeling/solid-modeling/create-solids/extrude), -then set `bodyType` to `surface` to create an open surface instead of a closed solid. This is useful -for reference geometry, patch workflows, and downstream surface edits that should remain open rather -than forming a volumetric body. +then set `bodyType` to `surface` to create an open surface instead of a closed solid. You can extrude +a sketch segment, sketch region, or an edge from an existing body. This is useful for reference +geometry, patch workflows, and downstream surface edits that should remain open rather than forming +a volumetric body. -## Selection +## Profiles -Choose a sketch segment when the surface should use a single edge as its profile. If the sketch -forms a closed region, choose the region to use the full enclosed profile instead. +Select one or more sketch segments, body edges, or sketch regions to extrude. A segment or body +edge creates a sheet surface that extends from that curve. A region uses the complete enclosed +profile and creates an open surface body instead of a solid. + +To extrude an existing body's edge, start Extrude and select the edge in the viewport. Set +`bodyType` to `surface`; edge extrusions cannot create a solid directly. Use `method = new` to keep +the new surface separate. `method = merge` is not currently supported for edge extrusion. + +You can extrude multiple body edges together, but you cannot mix body edges with sketch or face +profiles in the same `extrude` call. Use separate extrusions instead. +## Direction + +By default, a sketch profile extrudes along its sketch plane normal. When extruding a body edge, +Zoo Design Studio infers a direction halfway between the normals of the two faces beside the edge. + +Use `direction` to override that default. In the command palette, select a sketch segment or an +existing body edge to supply the direction. In KCL, `direction` also accepts a three-component +vector, a tagged edge, or an edge returned by an edge query. The selected curve supplies only its +direction; `length` still controls how far the profile is extruded. + +For example, all of these forms are valid: + +```kcl +extrude(profile, length = 5, direction = [1, 0, 1]) +extrude(profile, length = 5, direction = directionSketch.line1) +extrude(profile, length = 5, direction = getOppositeEdge(edgeTag)) +``` + ## Other Parameters -All other Extrude parameters, such as `Length`, `Extrude To Face`, `Symmetric`, -`Bidirectional Length`, `Twist Angle`, and `Start Tag / End Tag`, work the same way as they do in +`Length`, `Extrude To Face`, `Symmetric`, and `Bidirectional Length` work as described in [Extrude Solid](/docs/zoo-design-studio/features/3d-design/parametric-modeling/solid-modeling/create-solids/extrude). -For the full parameter reference, visit the solid modeling section. +Because an extruded edge or sketch segment creates no start or end cap, `Start Tag` and `End Tag` +are not available for those profiles. `direction` and `twistAngle` cannot be used together. See the +[`extrude` KCL reference](/docs/kcl-std/functions/std-sketch-extrude) for every parameter and +combination. ## Surface Extrude In The Aquarium @@ -79,8 +108,8 @@ gallery. ## Are you interested in code? -Zoo Design Studio writes KCL behind the scenes. A surface extrusion is just an `extrude` call with -`bodyType = SURFACE`, applied to a sketch segment or profile. +Zoo Design Studio writes KCL behind the scenes. A surface extrusion is an `extrude` call with +`bodyType = SURFACE`, applied to a sketch segment, body edge, or profile. ```kcl mySketch = sketch(on = XY) { @@ -94,5 +123,33 @@ mySketch = sketch(on = XY) { surfaceExtrude = extrude(mySketch.arc1, length = 5, bodyType = SURFACE) ``` +To extrude an edge from an existing body, reference the edge directly or use an edge-query +function. This example extrudes the edge opposite a tagged sketch segment and uses another sketch +segment for its direction: + +```kcl +@settings(kclVersion = 2.0) + +baseSketch = sketch(on = XY) { + line1 = line(start = [var 0mm, var 0mm], end = [var 10mm, var 0mm]) + line2 = line(start = [var 10mm, var 0mm], end = [var 10mm, var 5mm]) + line3 = line(start = [var 10mm, var 5mm], end = [var 0mm, var 5mm]) + line4 = line(start = [var 0mm, var 5mm], end = [var 0mm, var 0mm]) +} +base = extrude(region(point = [5mm, 2mm], sketch = baseSketch), length = 5) + +directionSketch = sketch(on = YZ) { + line1 = line(start = [var 0mm, var 0mm], end = [var 1mm, var 1mm]) +} + +edgeSurface = extrude( + getOppositeEdge(base.sketch.tags.line1), + length = 8, + direction = directionSketch.line1, + bodyType = SURFACE, + method = NEW, +) +``` + Want to find out more about the `extrude` function? [Check it out](/docs/kcl-std/functions/std-sketch-extrude) in our KCL docs. From f8d6779e6af7da2dbfe74be0b6bba1e0342b1161 Mon Sep 17 00:00:00 2001 From: Pierre Jacquier Date: Thu, 23 Jul 2026 09:59:18 +0200 Subject: [PATCH 2/3] Add Codex generated images --- .../extrude/edge-extrude-direction.webp | Bin 0 -> 3280 bytes .../create-surfaces/extrude/edge-extrude.webp | Bin 0 -> 2878 bytes .../extrude/select-body-edge.webp | Bin 0 -> 3828 bytes .../create-surfaces/extrude.mdx | 30 ++++++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 content/documentation-assets/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude/edge-extrude-direction.webp create mode 100644 content/documentation-assets/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude/edge-extrude.webp create mode 100644 content/documentation-assets/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude/select-body-edge.webp diff --git a/content/documentation-assets/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude/edge-extrude-direction.webp b/content/documentation-assets/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude/edge-extrude-direction.webp new file mode 100644 index 0000000000000000000000000000000000000000..fb82e6a18c8aa6967d0eb4e2ced878014c455455 GIT binary patch literal 3280 zcmeH|S5y<&8ifNAks?y07l}v-2@*O)Arh)U5EKQZ8bZC)fT1%WgeKCvqErD{AMSbj&st~gv;S|Oa`U>bZZ9hUV6KBSxnrU# zO8B+@S_sIalP1s;=rv5GQgw?8pMyl}E$m6mOs<}@xDDCT6hRq8PpY4vcCUyY<{#BRnxJhz`Xn~a`8j%= z4`C}(cW5K%b}LKnZwM!I6N28mEY88r)TT3|Q{pk1+2!wKvpU?_*LSCwR=~ENAfK2Q zD*z)jFJDmQtK|AIzCm!N6`dS4V14n%H|CPrMfH)k;PIb@|ICMc0Jyl?YeQYF%UxAO z-8o#QPkcQhTV{_R<2Qc&^Ofgt5*Hu7Tco1GoRTf8g8YguTy?3f%a6VEn3Wxsa#>-s z>@QJEVJ)NLawTVWiC8b-lVb%vJ0Tz+)Rs6mG#_sHR#9TKb_?yceJ1>e(=gFQ$C#9$5PhQEx+&nW9gd%#t(JMBcXQi(noe}-zKYy zKSk&K_0YxVo?!j-gxf!s4PkKuL2CD1RfrN^Op^guvzQJ3?B!RrnEh`W=dbsBGL)de zDcfRYK^jMD&kiRvX&Q*Z5cyK1#cW{YW=sdqM`ynt3wj6kCh`ZrjMd0au4;x>+5q-9 zBEQ>jA#rX#l9YB+ZAR0mJb96x4ldGvwQW_*-qk$cjkai$7f#$_B*17FCyds!|41p7 zm_`*Z$k;#U{-1vZ$TR@p_{7~Lxk(?pI|%rP!P+V?3&KCzY5e(9*C=!?z?ChY zH8#ZAeNPK7p~7PPp@PKePgK0?_|cZs5i1yw-BUSb$PvBXO3ivF6vc;KXn~qKrEQnJ zcle_IHQJO{ph`z>_+0ldcXa@~M=fRIn4QflB%0DrI1C8Ue(Ee(TBek~T3p{)wC&NN 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 literal 0 HcmV?d00001 diff --git a/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx b/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx index e67e3f4c..109b86ac 100644 --- a/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx +++ b/content/pages/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude.mdx @@ -45,6 +45,16 @@ the new surface separate. `method = merge` is not currently supported for edge e You can extrude multiple body edges together, but you cannot mix body edges with sketch or face profiles in the same `extrude` call. Use separate extrusions instead. + +

+ Selected body edge +
+ +
+ Body edge extruded in the inferred direction +
+ + +
+ The same edge extruded with direction = [1, 0, 1] +
+ For example, all of these forms are valid: ```kcl From 8159ba6adb67d8147132cd365c6cfdf49b1b9c66 Mon Sep 17 00:00:00 2001 From: Pierre Jacquier Date: Thu, 23 Jul 2026 10:23:40 +0200 Subject: [PATCH 3/3] Update images --- .../extrude/edge-extrude-direction.webp | Bin 3280 -> 8378 bytes .../create-surfaces/extrude/edge-extrude.webp | Bin 2878 -> 7288 bytes .../extrude/select-body-edge.webp | Bin 3828 -> 5630 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/content/documentation-assets/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude/edge-extrude-direction.webp b/content/documentation-assets/docs/zoo-design-studio/features/3d-design/parametric-modeling/surface-modeling/create-surfaces/extrude/edge-extrude-direction.webp index fb82e6a18c8aa6967d0eb4e2ced878014c455455..fd7ffa73e54dce3e0882c531b699cbab37820a66 100644 GIT binary patch literal 8378 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%0DrI1C8Ue(Ee(TBek~T3p{)wC&NN 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 ZF!9})tM_R@2g;$3=;${t|Geg(^EoE literal 2878 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 literal 3828 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