---
tag: g002
title: Arc or Circle Move
brief: Add an arc or circle movement to the planner
author: thinkyhead
contrib: shitcreek, edwilliams16

since: 1.0.0-beta
group: motion
requires: ARC_SUPPORT

codes: [ G2, G3 ]
related: [ G17, G18, G19 ]

parameters:
  -
    tag: X
    optional: true
    description: A coordinate on the X axis
    values:
      -
        tag: pos
        type: float
  -
    tag: Y
    optional: true
    description: A coordinate on the Y axis
    values:
      -
        tag: pos
        type: float
  -
    tag: Z
    optional: true
    description: A coordinate on the Z axis
    values:
      -
        tag: pos
        type: float
  -
    tag: I
    type: float
    optional: false
    description: An offset from the current X position to use as the arc center
    values:
      -
        tag: offset
        type: float
  -
    tag: J
    type: float
    optional: false
    description: An offset from the current Y position to use as the arc center
    values:
      -
        tag: offset
        type: float
  -
    tag: R
    type: float
    optional: false
    description: A radius from the current XY position to use as the arc center
    values:
      -
        tag: radius
        type: float
  -
    tag: E
    type: float
    optional: true
    description: The amount to extrude between the start point and end point
    values:
      -
        tag: pos
        type: float
  -
    tag: F
    optional: true
    description: The maximum rate of the move between the start and end point
    values:
      -
        tag: rate
        type: float
        optional: false
  -
    tag: P
    optional: true
    description: Specify complete circles. (Requires `ARC_P_CIRCLES`)
    values:
      -
        tag: count
        type: int
  -
    tag: S
    optional: true
    since: 2.0.8
    description: Set the Laser power for the move.
    values:
      -
        tag: power
        type: float

examples:
  -
    pre: Move in a clockwise arc from the current position to [125, 32] with the center offset from the current position by (10.5, 10.5).
    code: G2 X125 Y32 I10.5 J10.5
  -
    pre: Move in a counter-clockwise arc from the current position to [125, 32] with the center offset from the current position by (10.5, 10.5).
    code: G3 X125 Y32 I10.5 J10.5
  -
    pre: Move in a complete clockwise circle with the center offset from the current position by [20, 20].
    code: G2 I20 J20

images:
  -
    title: G3 command geometry
    caption: This illustrates a counter clockwise arc, starting at [9, 6]. It can be generated either by `G3 X2 Y7 I-4 J-3` or `G3 X2 Y7 R5`
    path: G3fig.png
---

`G2` adds a clockwise arc move to the planner; `G3` adds a counter-clockwise arc. An arc move starts at the current position and ends at the given XYZ, pivoting around a center-point offset given by `I` and `J` or `R`.

[`CNC_WORKSPACE_PLANES`](/docs/gcode/G017-G019.html) allows `G2/G3` to operate in the selected XY, ZX, or YZ workspace plane.

This command has two forms:
#### I J Form

 - `I` specifies an X offset. `J` specifies a Y offset.
 - At least one of the `I` `J` parameters is required.
 - `X` and `Y` can be omitted to do a complete circle.
 - The given `X` `Y` is not error-checked.
   The arc ends based on the angle of the destination.
 - Mixing `I` or `J` with `R` will throw an error.

#### R Form
 - `R` specifies the radius. `X` or `Y` is required.
 - Omitting both `X` and `Y` will throw an error.
 - `X` or `Y` must differ from the current XY position.
 - Mixing `R` with `I` or `J` will throw an error.

Arc moves actually generate several short straight-line moves, the length of which are determined by the configuration option `MM_PER_ARC_SEGMENT` (default 1mm). Any change in the Z position is linearly interpolated over the whole arc.

'ARC_P_CIRCLES' enables the use of the 'P' parameter to specify complete circles
