259 lines
		
	
	
		
			1.0 MiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			259 lines
		
	
	
		
			1.0 MiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: "clone"
							 | 
						||
| 
								 | 
							
								excerpt: "Clone a sketch or solid."
							 | 
						||
| 
								 | 
							
								layout: manual
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Clone a sketch or solid.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This works essentially like a copy-paste operation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This doesn't really have much utility unless you need the equivalent of a double instance pattern with zero transformations.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Really only use this function if YOU ARE SURE you need it. In most cases you do not need clone and using a pattern with `instance = 2` is more appropriate.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								clone(geometry: GeometryWithImportedGeometry): GeometryWithImportedGeometry
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Arguments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								| Name | Type | Description | Required |
							 | 
						||
| 
								 | 
							
								|----------|------|-------------|----------|
							 | 
						||
| 
								 | 
							
								| `geometry` | [`GeometryWithImportedGeometry`](/docs/kcl/types/GeometryWithImportedGeometry) | The sketch, solid, or imported geometry to be cloned | Yes |
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Returns
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[`GeometryWithImportedGeometry`](/docs/kcl/types/GeometryWithImportedGeometry) - A geometry including an imported geometry.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Examples
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								// Clone a basic sketch and move it and extrude it.
							 | 
						||
| 
								 | 
							
								exampleSketch = startSketchOn(XY)
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([0, 0], %)
							 | 
						||
| 
								 | 
							
								  |> line(end = [10, 0])
							 | 
						||
| 
								 | 
							
								  |> line(end = [0, 10])
							 | 
						||
| 
								 | 
							
								  |> line(end = [-10, 0])
							 | 
						||
| 
								 | 
							
								  |> close()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								clonedSketch = clone(exampleSketch)
							 | 
						||
| 
								 | 
							
								  |> scale(x = 1.0, y = 1.0, z = 2.5)
							 | 
						||
| 
								 | 
							
								  |> translate(x = 15.0, y = 0, z = 0)
							 | 
						||
| 
								 | 
							
								  |> extrude(length = 5)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([0, 0], %)
							 | 
						||
| 
								 | 
							
								  |> line(end = [10, 0])
							 | 
						||
| 
								 | 
							
								  |> line(end = [0, 10])
							 | 
						||
| 
								 | 
							
								  |> line(end = [-10, 0])
							 | 
						||
| 
								 | 
							
								  |> close()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								myPart = extrude(exampleSketch, length = 5)
							 | 
						||
| 
								 | 
							
								clonedPart = clone(myPart)
							 | 
						||
| 
								 | 
							
								  |> translate(x = 25.0)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([-10, 10], %)
							 | 
						||
| 
								 | 
							
								  |> xLine(length = 20)
							 | 
						||
| 
								 | 
							
								  |> yLine(length = -20)
							 | 
						||
| 
								 | 
							
								  |> xLine(length = -20)
							 | 
						||
| 
								 | 
							
								  |> close()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sketch002 = clone(sketch001)
							 | 
						||
| 
								 | 
							
								  |> translate(x = 0, y = 0, z = 20)
							 | 
						||
| 
								 | 
							
								  |> rotate(axis = [0, 0, 1.0], angle = 45)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								loft([sketch001, sketch002])
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([-10, 10], %)
							 | 
						||
| 
								 | 
							
								  |> xLine(length = 20)
							 | 
						||
| 
								 | 
							
								  |> yLine(length = -20)
							 | 
						||
| 
								 | 
							
								  |> xLine(length = -20, tag = $filletTag)
							 | 
						||
| 
								 | 
							
								  |> close()
							 | 
						||
| 
								 | 
							
								  |> extrude(length = 5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sketch002 = clone(sketch001)
							 | 
						||
| 
								 | 
							
								  |> translate(x = 0, y = 0, z = 20)
							 | 
						||
| 
								 | 
							
								  |> fillet(radius = 2, tags = [getNextAdjacentEdge(filletTag)])
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([0, 0], %)
							 | 
						||
| 
								 | 
							
								  |> line(end = [10, 0])
							 | 
						||
| 
								 | 
							
								  |> line(end = [0, 10], tag = $sketchingFace)
							 | 
						||
| 
								 | 
							
								  |> line(end = [-10, 0])
							 | 
						||
| 
								 | 
							
								  |> close()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sketch002 = clone(sketch001)
							 | 
						||
| 
								 | 
							
								  |> translate(x = 10, y = 20, z = 0)
							 | 
						||
| 
								 | 
							
								  |> extrude(length = 5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								startSketchOn(sketch002, face = sketchingFace)
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([1, 1], %)
							 | 
						||
| 
								 | 
							
								  |> line(end = [8, 0])
							 | 
						||
| 
								 | 
							
								  |> line(end = [0, 8])
							 | 
						||
| 
								 | 
							
								  |> line(end = [-8, 0])
							 | 
						||
| 
								 | 
							
								  |> close(tag = $sketchingFace002)
							 | 
						||
| 
								 | 
							
								  |> extrude(length = 10)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([-width / 2, -length / 2], %)
							 | 
						||
| 
								 | 
							
								  |> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)
							 | 
						||
| 
								 | 
							
								  |> line(endAbsolute = [width / 2, length / 2], tag = $edge2)
							 | 
						||
| 
								 | 
							
								  |> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)
							 | 
						||
| 
								 | 
							
								  |> close(tag = $edge4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								mountingPlate = extrude(mountingPlateSketch, length = thickness)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								clonedMountingPlate = clone(mountingPlate)
							 | 
						||
| 
								 | 
							
								  |> fillet(
							 | 
						||
| 
								 | 
							
								       radius = filletRadius,
							 | 
						||
| 
								 | 
							
								       tags = [
							 | 
						||
| 
								 | 
							
								         getNextAdjacentEdge(edge1),
							 | 
						||
| 
								 | 
							
								         getNextAdjacentEdge(edge2),
							 | 
						||
| 
								 | 
							
								         getNextAdjacentEdge(edge3),
							 | 
						||
| 
								 | 
							
								         getNextAdjacentEdge(edge4)
							 | 
						||
| 
								 | 
							
								       ],
							 | 
						||
| 
								 | 
							
								     )
							 | 
						||
| 
								 | 
							
								  |> translate(x = 0, y = 50, z = 0)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								springSketch = startSketchOn(YZ)
							 | 
						||
| 
								 | 
							
								  |> circle(center = [0, 0], radius = 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Create a spring by sweeping around the helix path.
							 | 
						||
| 
								 | 
							
								sweepedSpring = clone(springSketch)
							 | 
						||
| 
								 | 
							
								  |> translate(x = 100)
							 | 
						||
| 
								 | 
							
								  |> sweep(path = helixPath)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> circle(center = [15, 0], radius = 5)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sketch002 = clone(sketch001)
							 | 
						||
| 
								 | 
							
								  |> translate(z = 30)
							 | 
						||
| 
								 | 
							
								  |> revolve(angle = 360, axis = Y)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> startProfileAt([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()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								example001 = revolve(
							 | 
						||
| 
								 | 
							
								  exampleSketch,
							 | 
						||
| 
								 | 
							
								  axis = Y,
							 | 
						||
| 
								 | 
							
								  angle = 180,
							 | 
						||
| 
								 | 
							
								  tagEnd = $end01,
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// example002 = clone(example001)
							 | 
						||
| 
								 | 
							
								// |> translate(x = 0, y = 20, z = 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Sketch on the cloned face.
							 | 
						||
| 
								 | 
							
								// exampleSketch002 = startSketchOn(example002, face = end01)
							 | 
						||
| 
								 | 
							
								// |> startProfileAt([4.5, -5], %)
							 | 
						||
| 
								 | 
							
								// |> line(end = [0, 5])
							 | 
						||
| 
								 | 
							
								// |> line(end = [5, 0])
							 | 
						||
| 
								 | 
							
								// |> line(end = [0, -5])
							 | 
						||
| 
								 | 
							
								// |> close()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// example003 = extrude(exampleSketch002, length = 5)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  |> translate(x = 1020)
							 | 
						||
| 
								 | 
							
								  |> appearance(color = "#ff0000", metalness = 50, roughness = 50)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								![Rendered example of clone 9](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAFt+UlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuu
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |