This is an extension and not part of the main GoJS library. Note that the API for this class may change at any time. If you intend to use an extension in production, you should copy the code to your own source directory. Extensions can be found in the GoJS kit under the `extensions` (for loading via script tags),`extensionsTS` (UMD modules), or `extensionsJSM` (ES6 modules) folders. See the Extensions intro page for more information.

### Hierarchy

- Tool
  - RotatingTool
    - SpotRotatingTool

A custom RotatingTool that also supports the user moving the point about which the object is rotated.

This tool uses two separate Adornments -- the regular one holding the rotation handle and an additional one named "MovingSpot" that holds the handle for interactively moving the RotatingTool.rotationPoint by changing the Part.rotationSpot.

## Index

### Constructors

- constructor

### Methods

- canStart
- computeAdornmentLocation
- shiftRotationPoint
- updateAdornments

## Inherited Members

### Properties

- RotatingTool.adornedObject
- RotatingTool.handle
- RotatingTool.handleAngle
- RotatingTool.handleArchetype
- RotatingTool.handleDistance
- RotatingTool.originalAngle
- RotatingTool.rotationPoint
- RotatingTool.snapAngleEpsilon
- RotatingTool.snapAngleMultiple
- Tool.diagram
- Tool.isActive
- Tool.isEnabled
- Tool.name
- Tool.transactionResult

### Methods

- RotatingTool.computeRotate
- RotatingTool.computeRotationPoint
- RotatingTool.doDeactivate
- RotatingTool.rotate
- RotatingTool.stopTransaction
- Tool.canStartMultiTouch
- Tool.cancelWaitAfter
- Tool.doKeyDown
- Tool.doKeyUp
- Tool.doMouseDown
- Tool.doMouseWheel
- Tool.doStart
- Tool.doStop
- Tool.doWaitAfter
- Tool.findToolHandleAt
- Tool.isBeyondDragSize
- Tool.standardMouseClick
- Tool.standardMouseOver
- Tool.standardMouseSelect
- Tool.standardMouseWheel
- Tool.standardPinchZoomMove
- Tool.standardPinchZoomStart
- Tool.standardWaitAfter
- Tool.startTransaction
- Tool.stopTool

## Constructors

### constructor

- new SpotRotatingTool(): SpotRotatingTool

- You do not normally need to create an instance of this tool because one already exists as the ToolManager.rotatingTool, which you can modify.

  The Tool.name of this tool is "Rotating".

  #### Returns SpotRotatingTool

## Methods

### Override canStart

- canStart(): boolean

- In addition to the standard behavior of RotatingTool.canStart, also start when the user starts dragging the "MovingSpot" adornment/handle.

  #### Returns boolean

  boolean

### Override computeAdornmentLocation

- computeAdornmentLocation(obj: GraphObject): Point

- Change the positioning of the "Rotating" Adornment to adapt to the rotation point potentially being well outside of the object being rotated.

  This assumes that RotatingTool.handleAngle is zero.

  #### Parameters

  - ##### obj: GraphObject

    the object being rotated

  #### Returns Point

  Point in document coordinates

### Virtual shiftRotationPoint

- shiftRotationPoint(): void

- This is called by mouse moves and mouse up events when the handle being dragged is "MovingSpot". This needs to update the Part.rotationSpot and RotatingTool.rotationPoint properties.

  For each of the X and Y directions, when the handle is within the bounds of the rotated object, the new rotation Spot will be purely fractional; when it is outside the Spot will be limited to a fraction of zero or one (whichever is closer) and an absolute offset that places the rotation point where the handle is.

  #### Returns void

### Override updateAdornments

- updateAdornments(part: Part): void

- In addition to updating the standard "Rotating" Adornment, this updates a "MovingSpot" Adornment that the user may drag in order to move the RotatingTool.rotationPoint.

  #### Parameters

  - ##### part: Part

  #### Returns void

Copyright © 1998-2022 by Northwoods Software Corporation.