Files
modeling-app/docs/kcl-std/functions/std-transform-scale.md
Nick Cameron df6c81b0b4 Units bug fix with modulo (#7446)
* Add degrees annotations to examples

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Fix a units bug with the modulo operation

Signed-off-by: Nick Cameron <nrc@ncameron.org>

---------

Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-06-12 08:44:55 +12:00

246 KiB

title, subtitle, excerpt, layout
title subtitle excerpt layout
scale Function in std::transform Scale a solid or a sketch. manual

Scale a solid or a sketch.

scale(
  @objects: [Solid; 1+] | [Sketch; 1+] | ImportedGeometry,
  x?: number(_),
  y?: number(_),
  z?: number(_),
  global?: bool,
): [Solid; 1+] | [Sketch; 1+] | ImportedGeometry

This is really useful for resizing parts. You can create a part and then scale it to the correct size.

For sketches, you can use this to scale a sketch and then loft it with another sketch.

By default the transform is applied in local sketch axis, therefore the origin will not move.

If you want to apply the transform in global space, set global to true. The origin of the model will move. If the model is not centered on origin and you scale globally it will look like the model moves and gets bigger at the same time. Say you have a square (1,1) - (1,2) - (2,2) - (2,1) and you scale by 2 globally it will become (2,2) - (2,4)...etc so the origin has moved from (1.5, 1.5) to (2,2).

Arguments

Name Type Description Required
objects [Solid; 1+] or [Sketch; 1+] or ImportedGeometry The solid, sketch, or set of solids or sketches to scale. Yes
x number(_) The scale factor for the x axis. No
y number(_) The scale factor for the y axis. No
z number(_) The scale factor for the z axis. No
global bool If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. No

Returns

[Solid; 1+] or [Sketch; 1+] or ImportedGeometry

Examples

// Scale a pipe.

// Create a path for the sweep.
sweepPath = startSketchOn(XZ)
  |> startProfile(at = [0.05, 0.05])
  |> line(end = [0, 7])
  |> tangentialArc(angle = 90deg, radius = 5)
  |> line(end = [-3, 0])
  |> tangentialArc(angle = -90deg, radius = 5)
  |> line(end = [0, 7])

// Create a hole for the pipe.
pipeHole = startSketchOn(XY)
  |> circle(center = [0, 0], radius = 1.5)

sweepSketch = startSketchOn(XY)
  |> circle(center = [0, 0], radius = 2)
  |> subtract2d(tool = pipeHole)
  |> sweep(path = sweepPath)
  |> scale(z = 2.5)

Rendered example of scale 0

// Scale an imported model.


import "tests/inputs/cube.sldprt" as cube

cube
  |> scale(y = 2.5)

Rendered example of scale 1

// Sweep two sketches along the same path.


sketch001 = startSketchOn(XY)
rectangleSketch = startProfile(sketch001, at = [-200, 23.86])
  |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)
  |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 50.61)
  |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()

circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)

sketch002 = startSketchOn(YZ)
sweepPath = startProfile(sketch002, at = [0, 0])
  |> yLine(length = 231.81)
  |> tangentialArc(radius = 80, angle = -90deg)
  |> xLine(length = 384.93)

parts = sweep([rectangleSketch, circleSketch], path = sweepPath)

// Scale the sweep.
scale(parts, z = 0.5)

Rendered example of scale 2