---
title: "startSketchOn"
subtitle: "Function in std::sketch"
excerpt: "Start a new 2-dimensional sketch on a specific plane or face."
layout: manual
---

Start a new 2-dimensional sketch on a specific plane or face.

```kcl
startSketchOn(
  @planeOrSolid: Plane | Solid,
  face?: TagIdentifier | Start | End,
): Plane | Face
```

### Sketch on Face Behavior

There are some important behaviors to understand when sketching on a face:

The resulting sketch will _include_ the face and thus Solid that was sketched on. So say you were to export the resulting Sketch / Solid from a sketch on a face, you would get both the artifact of the sketch on the face and the parent face / Solid itself.

This is important to understand because if you were to then sketch on the resulting Solid, it would again include the face and parent Solid that was sketched on. This could go on indefinitely.

The point is if you want to export the result of a sketch on a face, you only need to export the final Solid that was created from the sketch on the face, since it will include all the parent faces and Solids.

### Arguments

| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `planeOrSolid` | [`Plane`](/docs/kcl-std/types/std-types-Plane) or [`Solid`](/docs/kcl-std/types/std-types-Solid) | The plane or solid to sketch on | Yes |
| `face` | [`TagIdentifier`](/docs/kcl-lang/types#TagIdentifier) or [`Start`](/docs/kcl-lang/types#Start) or [`End`](/docs/kcl-lang/types#End) | Identify a face of a solid if a solid is specified as the input argument (`plane_or_solid`) | No |

### Returns

[`Plane`](/docs/kcl-std/types/std-types-Plane) or [`Face`](/docs/kcl-std/types/std-types-Face) - A sketch type.


### Examples

```kcl
exampleSketch = startSketchOn(XY)
  |> startProfile(at = [0, 0])
  |> line(end = [10, 0])
  |> line(end = [0, 10])
  |> line(end = [-10, 0])
  |> close()

example = extrude(exampleSketch, length = 5)

exampleSketch002 = startSketchOn(example, face = END)
  |> startProfile(at = [1, 1])
  |> line(end = [8, 0])
  |> line(end = [0, 8])
  |> line(end = [-8, 0])
  |> close()

example002 = extrude(exampleSketch002, length = 5)

exampleSketch003 = startSketchOn(example002, face = END)
  |> startProfile(at = [2, 2])
  |> line(end = [6, 0])
  |> line(end = [0, 6])
  |> line(end = [-6, 0])
  |> close()

example003 = extrude(exampleSketch003, length = 5)
```

![Rendered example of startSketchOn 0](data:image/png;base64,[encoded data, 102432 characters])

```kcl
// Sketch on the end of an extruded face by tagging the end face.


exampleSketch = startSketchOn(XY)
  |> startProfile(at = [0, 0])
  |> line(end = [10, 0])
  |> line(end = [0, 10])
  |> line(end = [-10, 0])
  |> close()

example = extrude(exampleSketch, length = 5, tagEnd = $end01)

exampleSketch002 = startSketchOn(example, face = end01)
  |> startProfile(at = [1, 1])
  |> line(end = [8, 0])
  |> line(end = [0, 8])
  |> line(end = [-8, 0])
  |> close()

example002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)

exampleSketch003 = startSketchOn(example002, face = end02)
  |> startProfile(at = [2, 2])
  |> line(end = [6, 0])
  |> line(end = [0, 6])
  |> line(end = [-6, 0])
  |> close()

example003 = extrude(exampleSketch003, length = 5)
```

![Rendered example of startSketchOn 1](data:image/png;base64,[encoded data, 102432 characters])

```kcl
exampleSketch = startSketchOn(XY)
  |> startProfile(at = [0, 0])
  |> line(end = [10, 0])
  |> line(end = [0, 10], tag = $sketchingFace)
  |> line(end = [-10, 0])
  |> close()

example = extrude(exampleSketch, length = 10)

exampleSketch002 = startSketchOn(example, face = sketchingFace)
  |> startProfile(at = [1, 1])
  |> line(end = [8, 0])
  |> line(end = [0, 8])
  |> line(end = [-8, 0])
  |> close(tag = $sketchingFace002)

example002 = extrude(exampleSketch002, length = 10)

exampleSketch003 = startSketchOn(example002, face = sketchingFace002)
  |> startProfile(at = [-8, 12])
  |> line(end = [0, 6])
  |> line(end = [6, 0])
  |> line(end = [0, -6])
  |> close()

example003 = extrude(exampleSketch003, length = 5)
```

![Rendered example of startSketchOn 2](data:image/png;base64,[encoded data, 89228 characters])

```kcl
exampleSketch = startSketchOn(XY)
  |> startProfile(at = [4, 12])
  |> line(end = [2, 0])
  |> line(end = [0, -6])
  |> line(end = [4, -6])
  |> line(end = [0, -6])
  |> line(end = [-3.75, -4.5])
  |> line(end = [0, -5.5])
  |> line(end = [-2, 0])
  |> close()

example = revolve(exampleSketch, axis = Y, angle = 180)

exampleSketch002 = startSketchOn(example, face = END)
  |> startProfile(at = [4.5, -5])
  |> line(end = [0, 5])
  |> line(end = [5, 0])
  |> line(end = [0, -5])
  |> close()

example002 = extrude(exampleSketch002, length = 5)
```

![Rendered example of startSketchOn 3](data:image/png;base64,[encoded data, 97472 characters])

```kcl
// Sketch on the end of a revolved face by tagging the end face.


exampleSketch = startSketchOn(XY)
  |> startProfile(at = [4, 12])
  |> line(end = [2, 0])
  |> line(end = [0, -6])
  |> line(end = [4, -6])
  |> line(end = [0, -6])
  |> line(end = [-3.75, -4.5])
  |> line(end = [0, -5.5])
  |> line(end = [-2, 0])
  |> close()

example = revolve(
  exampleSketch,
  axis = Y,
  angle = 180,
  tagEnd = $end01,
)

exampleSketch002 = startSketchOn(example, face = end01)
  |> startProfile(at = [4.5, -5])
  |> line(end = [0, 5])
  |> line(end = [5, 0])
  |> line(end = [0, -5])
  |> close()

example002 = extrude(exampleSketch002, length = 5)
```

![Rendered example of startSketchOn 4](data:image/png;base64,[encoded data, 97472 characters])

```kcl
a1 = startSketchOn({
       origin = { x = 0, y = 0, z = 0 },
       xAxis = { x = 1, y = 0, z = 0 },
       yAxis = { x = 0, y = 1, z = 0 },
       zAxis = { x = 0, y = 0, z = 1 }
     })
  |> startProfile(at = [0, 0])
  |> line(end = [100.0, 0])
  |> yLine(length = -100.0)
  |> xLine(length = -100.0)
  |> yLine(length = 100.0)
  |> close()
  |> extrude(length = 3.14)
```

![Rendered example of startSketchOn 5](data:image/png;base64,[encoded data, 93176 characters])


