UNPKG

create-gojs-kit

Version:

A CLI for downloading GoJS samples, extensions, and docs

238 lines 63.1 kB
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><link rel="stylesheet" href="../../assets/css/style.css"/><link rel="preconnect" href="https://rsms.me/"/><link rel="stylesheet" href="https://rsms.me/inter/inter.css"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>RotatingTool | GoJS API</title><meta name="description" content="Documentation for GoJS API"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><link rel="stylesheet" href="../assets/custom.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script type="text/javascript">// formerly in api.js
  var hash = null;
  function changeHash() {
      var panels = document.getElementsByClassName("tsd-panel");
      for (let i = 0; i < panels.length; i++) {
          var p = panels[i];
          p.classList.remove("targeted");
      }
      hash = window.location.hash.slice(1);
      if (hash) {
          var elt = document.getElementById(hash);
          if (elt) elt.parentNode.classList.add("targeted");
      }
  }
  document.addEventListener("DOMContentLoaded", changeHash);
  window.addEventListener("hashchange", changeHash);</script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header><nav id="navTop" class="w-full h-[var(--topnav-h)] z-30 bg-[var(--color-background-secondary)] border-b border-b-[var(--color-accent)]"><div class="max-w-screen-xl mx-auto flex flex-wrap items-start justify-between px-4"><a class="!text-white bg-nwoods-primary font-bold !leading-[calc(var(--topnav-h)_-_1px)] my-0 px-2 text-4xl lg:text-5xl logo" href="../../index.html">GoJS</a><div class="relative"><button id="topnavButton" class="h-[calc(var(--topnav-h)_-_1px)] px-2 m-0 text-[var(--color-text)] bg-inherit shadow-none md:hidden hover:!bg-inherit hover:!text-nwoods-accent hover:!shadow-none" aria-label="Navigation"><svg class="h-7 w-7 block" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></button><div id="topnavList" class="hidden md:block"><div class="absolute right-0 z-30 flex flex-col items-end rounded border border-[var(--color-accent)] p-4 pl-12 shadow bg-[var(--color-background-secondary)] text-[var(--color-text)] font-semibold
                        md:flex-row md:space-x-4 md:items-start md:border-0 md:p-0 md:shadow-none md:!bg-inherit"><a href="../../learn/index.html">Learn</a><a href="../../samples/index.html">Samples</a><a href="../../intro/index.html">Intro</a><a class="active" href="../../api/index.html">API</a><a href="../../download.html">Download</a><a href="https://forum.nwoods.com/c/gojs/11" target="_blank" rel="noopener">Forum</a><a href="https://nwoods.com/contact.html" target="_blank" rel="noopener" id="contactBtn">Contact</a><a href="https://nwoods.com/sales/index.html" target="_blank" rel="noopener" id="buyBtn">Buy</a></div></div></div></div></nav><script>window.addEventListener("DOMContentLoaded", function () {
    // topnav
    var topButton = document.getElementById("topnavButton");
    var topnavList = document.getElementById("topnavList");
    if (topButton && topnavList) {
      topButton.addEventListener("click", function (e) {
        topnavList
          .classList
          .toggle("hidden");
        e.stopPropagation();
      });
      document.addEventListener("click", function (e) {
        // if the clicked element isn't the list, close the list
        if (!topnavList.classList.contains("hidden") && !e.target.closest("#topnavList")) {
          topButton.click();
        }
      });

      // set active <a> element
      // done via active tag below, always API
    }
  });</script><div class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><div id="tsd-search-help"><code class="!text-lg">/</code> to search</div><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">GoJS API</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><div class="flex w-full max-w-screen-xl mx-auto px-2 items-center justify-between"><div><ul class="tsd-breadcrumb"><li><a href="../index.html">GoJS API</a></li><li><a href="RotatingTool.html">RotatingTool</a></li></ul><h1 class="flex items-center">Class RotatingTool</h1></div><div class="text-xs"><b>GoJS</b>® Diagramming Components<br/>version 3.1.0<br/>by <a href="https://nwoods.com/">Northwoods Software®</a></div></div></div><section class="tsd-panel tsd-hierarchy"><h4>Hierarchy (<a class="link" href="../hierarchy.html#RotatingTool">view full</a>)</h4><ul class="tsd-hierarchy"><li><a href="Tool.html" class="tsd-signature-type tsd-kind-class">Tool</a><ul class="tsd-hierarchy"><li><span class="target">RotatingTool</span><ul class="tsd-hierarchy"><li><a href="RotateMultipleTool.html" class="tsd-signature-type tsd-kind-class">RotateMultipleTool</a></li><li><a href="SpotRotatingTool.html" class="tsd-signature-type tsd-kind-class">SpotRotatingTool</a></li></ul></li></ul></li></ul></section><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>The RotatingTool is used to interactively change the <a href="GraphObject.html#angle" class="tsd-kind-accessor">GraphObject.angle</a> of a <a href="GraphObject.html" class="tsd-kind-class">GraphObject</a>
by setting its <a href="GraphObject.html#angle" class="tsd-kind-accessor">GraphObject.angle</a> property.
You may want to save the angle to the model by using a TwoWay <a href="Binding.html" class="tsd-kind-class">Binding</a> on the &quot;angle&quot; property
of the GraphObject that is named by <a href="Part.html#rotateObjectName" class="tsd-kind-accessor">Part.rotateObjectName</a>.</p>
<p>This tool allows the user to rotate the <a href="Part.html#rotateObject" class="tsd-kind-accessor">Part.rotateObject</a> of the selected <a href="Part.html" class="tsd-kind-class">Part</a>.
The <a href="Part.html" class="tsd-kind-class">Part</a> must be <a href="Part.html#rotatable" class="tsd-kind-accessor">Part.rotatable</a>, which is false by default.
Normally this works with <a href="Part.html" class="tsd-kind-class">Part</a>s or <a href="Node.html" class="tsd-kind-class">Node</a>s; it does not make sense for whole <a href="Link.html" class="tsd-kind-class">Link</a>s
or <a href="Link.html#path" class="tsd-kind-accessor">Link.path</a>s, so if you want to rotate a label on a Link, make sure to name that label
and refer to it as the <a href="Part.html#rotateObjectName" class="tsd-kind-accessor">Part.rotateObjectName</a>.
This tool does not operate directly on a <a href="Link.html" class="tsd-kind-class">Link</a> or its path Shape(s),
but may operate on a label if you set <a href="Part.html#rotateObjectName" class="tsd-kind-accessor">Part.rotateObjectName</a> to the <a href="GraphObject.html#name" class="tsd-kind-accessor">GraphObject.name</a> of that label.</p>
<p>You can control the point about which the object is rotated by setting <a href="Part.html#rotationSpot" class="tsd-kind-accessor">Part.rotationSpot</a>.
The rotation spot can be computed dynamically by overriding <a href="RotatingTool.html#computeRotationPoint" class="tsd-kind-method">computeRotationPoint</a>.
The value of that method call is saved as <a href="RotatingTool.html#rotationPoint" class="tsd-kind-accessor">rotationPoint</a>.</p>
<p>You can limit the permitted angles by setting <a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a> and <a href="RotatingTool.html#snapAngleEpsilon" class="tsd-kind-accessor">snapAngleEpsilon</a>.
For example, if you want to permit only angles that are multiples of 90 degrees,
set <a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a> to 90 and <a href="RotatingTool.html#snapAngleEpsilon" class="tsd-kind-accessor">snapAngleEpsilon</a> to 45.
Pressing the Shift key during rotation ignores these two properties.</p>
<p>This tool makes use of an <a href="Adornment.html" class="tsd-kind-class">Adornment</a> that includes a rotation handle.
It is shown when the selected <a href="Part.html" class="tsd-kind-class">Part</a> is <a href="Part.html#rotatable" class="tsd-kind-accessor">Part.rotatable</a>.
You can control its direction relative to the <a href="RotatingTool.html#rotationPoint" class="tsd-kind-accessor">rotationPoint</a>
by setting <a href="RotatingTool.html#handleAngle" class="tsd-kind-accessor">handleAngle</a> to a multiple of 90 degrees,
and its distance from the rotation point by setting <a href="RotatingTool.html#handleDistance" class="tsd-kind-accessor">handleDistance</a>.
The rotate handle is normally a copy of <a href="RotatingTool.html#handleArchetype" class="tsd-kind-accessor">RotatingTool.handleArchetype</a>.
unless you specify a custom rotate Adornment by setting <a href="Part.html#rotateAdornmentTemplate" class="tsd-kind-accessor">Part.rotateAdornmentTemplate</a>.</p>
<p>This tool conducts a transaction while the tool is active.
A successful rotation will result in a &quot;PartRotated&quot; <a href="DiagramEvent.html" class="tsd-kind-class">DiagramEvent</a> and a &quot;Rotating&quot; transaction.</p>
<p class="boxread">
For customizing the RotatingTool, see <a href="../../intro/tools.html#RotatingTool">Introduction to the RotatingTool</a>.

<p>If you want to programmatically start a user&#39;s rotating of the <a href="Part.html#rotateObject" class="tsd-kind-accessor">Part.rotateObject</a> of an existing selected node,
you can set the <a href="RotatingTool.html#handle" class="tsd-kind-accessor">handle</a> property to the rotate handle and then start and activate the tool.</p>
<pre><code class="language-js"><span class="hl-2">  </span><span class="hl-1">const</span><span class="hl-2"> </span><span class="hl-3">node</span><span class="hl-2"> = ...;</span><br/><span class="hl-2">  </span><span class="hl-4">myDiagram</span><span class="hl-2">.</span><span class="hl-5">select</span><span class="hl-2">(</span><span class="hl-4">node</span><span class="hl-2">);</span><br/><span class="hl-2">  </span><span class="hl-1">const</span><span class="hl-2"> </span><span class="hl-3">adorn</span><span class="hl-2"> = </span><span class="hl-4">node</span><span class="hl-2">.</span><span class="hl-5">findAdornment</span><span class="hl-2">(</span><span class="hl-6">&quot;Rotating&quot;</span><span class="hl-2">);</span><br/><span class="hl-2">  </span><span class="hl-1">const</span><span class="hl-2"> </span><span class="hl-3">tool</span><span class="hl-2"> = </span><span class="hl-4">myDiagram</span><span class="hl-2">.</span><span class="hl-4">toolManager</span><span class="hl-2">.</span><span class="hl-4">rotatingTool</span><span class="hl-2">;</span><br/><span class="hl-2">  </span><span class="hl-0">// specify the rotation handle of the &quot;Rotating&quot; Adornment of the selected node</span><br/><span class="hl-2">  </span><span class="hl-4">tool</span><span class="hl-2">.</span><span class="hl-4">handle</span><span class="hl-2"> = </span><span class="hl-4">adorn</span><span class="hl-2">.</span><span class="hl-5">elt</span><span class="hl-2">(</span><span class="hl-7">0</span><span class="hl-2">);</span><br/><span class="hl-2">  </span><span class="hl-4">myDiagram</span><span class="hl-2">.</span><span class="hl-4">currentTool</span><span class="hl-2"> = </span><span class="hl-4">tool</span><span class="hl-2">;  </span><span class="hl-0">// starts the RotatingTool</span><br/><span class="hl-2">  </span><span class="hl-4">tool</span><span class="hl-2">.</span><span class="hl-5">doActivate</span><span class="hl-2">();             </span><span class="hl-0">// activates the RotatingTool</span>
</code><button>Copy</button></pre>
</div></section><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" role="button" aria-expanded="true" tabIndex="0"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-chevronSmall"></use></svg> Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="RotatingTool.html#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="RotatingTool.html#adornedObject" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>adorned<wbr/>Object</span></a>
<a href="RotatingTool.html#handle" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle</span></a>
<a href="RotatingTool.html#handleAngle" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle<wbr/>Angle</span></a>
<a href="RotatingTool.html#handleArchetype" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle<wbr/>Archetype</span></a>
<a href="RotatingTool.html#handleDistance" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle<wbr/>Distance</span></a>
<a href="RotatingTool.html#originalAngle" class="tsd-index-link"><svg class="readonly tsd-subicon" viewBox="0 0 28 28"><g id="subicon-R,#FF4D4D"><rect fill="var(--color-icon-background)" width="28" height="28" rx="14"></rect><path transform="translate(2, 2)" fill="none" stroke-width="1.5" stroke="var(--color-text)" d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" stroke-linecap="round" stroke-linejoin="round"></path></g></svg><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>original<wbr/>Angle</span></a>
<a href="RotatingTool.html#rotationPoint" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>rotation<wbr/>Point</span></a>
<a href="RotatingTool.html#snapAngleEpsilon" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>snap<wbr/>Angle<wbr/>Epsilon</span></a>
<a href="RotatingTool.html#snapAngleMultiple" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>snap<wbr/>Angle<wbr/>Multiple</span></a>
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="RotatingTool.html#canStart" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>can<wbr/>Start</span></a>
<a href="RotatingTool.html#computeRotate" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>compute<wbr/>Rotate</span></a>
<a href="RotatingTool.html#computeRotationPoint" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>compute<wbr/>Rotation<wbr/>Point</span></a>
<a href="RotatingTool.html#doActivate" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Activate</span></a>
<a href="RotatingTool.html#doCancel" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Cancel</span></a>
<a href="RotatingTool.html#doDeactivate" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Deactivate</span></a>
<a href="RotatingTool.html#doMouseMove" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Mouse<wbr/>Move</span></a>
<a href="RotatingTool.html#doMouseUp" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Mouse<wbr/>Up</span></a>
<a href="RotatingTool.html#rotate" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>rotate</span></a>
<a href="RotatingTool.html#stopTransaction" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>stop<wbr/>Transaction</span></a>
<a href="RotatingTool.html#updateAdornments" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>update<wbr/>Adornments</span></a>
</div></section></div></details></section></section><section class="tsd-panel-group tsd-index-group tsd-is-inherited"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-index-accordion"><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex="0"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-chevronSmall"></use></svg> Inherited Index</h5></summary><div class="tsd-accordion-details"><div class="tsd-index-content"><section class="tsd-index-section"><h3 class="tsd-index-heading">Accessors</h3><div class="tsd-index-list"><a href="Tool.html#diagram" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>Tool.diagram</span></a>
<a href="Tool.html#isActive" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>Tool.is<wbr/>Active</span></a>
<a href="Tool.html#isEnabled" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>Tool.is<wbr/>Enabled</span></a>
<a href="Tool.html#name" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>Tool.name</span></a>
<a href="Tool.html#transactionResult" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>Tool.transaction<wbr/>Result</span></a>
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="Tool.html#canStartMultiTouch" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.can<wbr/>Start<wbr/>Multi<wbr/>Touch</span></a>
<a href="Tool.html#cancelWaitAfter" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.cancel<wbr/>Wait<wbr/>After</span></a>
<a href="Tool.html#doKeyDown" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.do<wbr/>Key<wbr/>Down</span></a>
<a href="Tool.html#doKeyUp" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.do<wbr/>Key<wbr/>Up</span></a>
<a href="Tool.html#doMouseDown" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.do<wbr/>Mouse<wbr/>Down</span></a>
<a href="Tool.html#doMouseWheel" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.do<wbr/>Mouse<wbr/>Wheel</span></a>
<a href="Tool.html#doStart" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.do<wbr/>Start</span></a>
<a href="Tool.html#doStop" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.do<wbr/>Stop</span></a>
<a href="Tool.html#doWaitAfter" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.do<wbr/>Wait<wbr/>After</span></a>
<a href="Tool.html#findToolHandleAt" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.find<wbr/>Tool<wbr/>Handle<wbr/>At</span></a>
<a href="Tool.html#isBeyondDragSize" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.is<wbr/>Beyond<wbr/>Drag<wbr/>Size</span></a>
<a href="Tool.html#standardMouseClick" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.standard<wbr/>Mouse<wbr/>Click</span></a>
<a href="Tool.html#standardMouseOver" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.standard<wbr/>Mouse<wbr/>Over</span></a>
<a href="Tool.html#standardMouseSelect" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.standard<wbr/>Mouse<wbr/>Select</span></a>
<a href="Tool.html#standardMouseWheel" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.standard<wbr/>Mouse<wbr/>Wheel</span></a>
<a href="Tool.html#standardPinchZoomMove" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.standard<wbr/>Pinch<wbr/>Zoom<wbr/>Move</span></a>
<a href="Tool.html#standardPinchZoomStart" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.standard<wbr/>Pinch<wbr/>Zoom<wbr/>Start</span></a>
<a href="Tool.html#standardWaitAfter" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.standard<wbr/>Wait<wbr/>After</span></a>
<a href="Tool.html#startTransaction" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.start<wbr/>Transaction</span></a>
<a href="Tool.html#stopTool" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>Tool.stop<wbr/>Tool</span></a>
</div></section></div></div></details></section></section><section class="tsd-panel-group tsd-member-group"><h2>Constructors</h2><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="constructor.new_RotatingTool" class="tsd-anchor"></a><span class="tsd-kind-constructor-signature">new <wbr/>Rotating<wbr/>Tool</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">init</span><span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="RotatingTool.html" class="tsd-signature-type tsd-kind-class">RotatingTool</a><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="RotatingTool.html" class="tsd-signature-type tsd-kind-class">RotatingTool</a><a href="#constructor.new_RotatingTool" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>You do not normally need to create an instance of this tool
because one already exists as the <a href="ToolManager.html#rotatingTool" class="tsd-kind-accessor">ToolManager.rotatingTool</a>, which you can modify.</p>
<p>The <a href="Tool.html#name" class="tsd-kind-accessor">Tool.name</a> of this tool is &quot;Rotating&quot;.</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><code class="tsd-tag ts-flagOptional">Optional</code> <span class="tsd-kind-parameter">init</span>: <span class="tsd-signature-type">Partial</span><span class="tsd-signature-symbol">&lt;</span><a href="RotatingTool.html" class="tsd-signature-type tsd-kind-class">RotatingTool</a><span class="tsd-signature-symbol">&gt;</span></h5></li></ul></div><h4 class="tsd-returns-title">Returns <a href="RotatingTool.html" class="tsd-signature-type tsd-kind-class">RotatingTool</a></h4></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2>Accessors</h2><section class="tsd-panel tsd-member"><a id="adornedObject" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>adorned<wbr/>Object</span><div class="membertype"><span class="tsd-signature-symbol">: </span><a href="GraphObject.html" class="tsd-signature-type tsd-kind-class">GraphObject</a></div><a href="#adornedObject" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Gets or sets the <a href="GraphObject.html" class="tsd-kind-class">GraphObject</a> that is being rotated.
This may be the same object as the selected <a href="Part.html" class="tsd-kind-class">Part</a> or it may be contained within that Part.</p>
<p>This property is also settable, but should only be set when overriding functions
in RotatingTool, and not during normal operation.</p>
</div></li></ul></section><section class="tsd-panel tsd-member"><a id="handle" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>handle</span><div class="membertype"><span class="tsd-signature-symbol">: </span><a href="GraphObject.html" class="tsd-signature-type tsd-kind-class">GraphObject</a></div><a href="#handle" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>This read-only property returns the <a href="GraphObject.html" class="tsd-kind-class">GraphObject</a> that is the tool handle being dragged by the user.
This will be contained by an <a href="Adornment.html" class="tsd-kind-class">Adornment</a> whose category is &quot;RotatingTool&quot;.
Its <a href="Adornment.html#adornedObject" class="tsd-kind-accessor">Adornment.adornedObject</a> is the same as the <a href="RotatingTool.html#adornedObject" class="tsd-kind-accessor">adornedObject</a>.</p>
<p>This property is also settable, but should only be set either within an override of <a href="RotatingTool.html#doActivate" class="tsd-kind-method">doActivate</a>
or prior to calling <a href="RotatingTool.html#doActivate" class="tsd-kind-method">doActivate</a>.</p>
</div></li></ul></section><section class="tsd-panel tsd-member"><a id="handleAngle" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>handle<wbr/>Angle</span><div class="membertype"><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></div><a href="#handleAngle" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Gets or sets the spot to locate the Adornment for the rotation handle when it does not have a Placeholder.
This assumes the Adornment&#39;s location will be at the center of the rotation handle.</p>
<p>By default this is zero degrees, which locates the Adornment
so that it is placed to the right of an un-rotated object.
You can set this to a multiple of 90 degrees to position the rotation handle differently
with respect to the <a href="RotatingTool.html#rotationPoint" class="tsd-kind-accessor">rotationPoint</a>.</p>
</div><div class="tsd-comment-tags tsd-typography"><div class="flex items-center"><code class="tsd-tag">since</code><p>2.0</p>
</div></div></li></ul></section><section class="tsd-panel tsd-member"><a id="handleArchetype" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>handle<wbr/>Archetype</span><div class="membertype"><span class="tsd-signature-symbol">: </span><a href="GraphObject.html" class="tsd-signature-type tsd-kind-class">GraphObject</a></div><a href="#handleArchetype" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Gets or sets a small GraphObject that is copied as a rotation handle for the selected part.
By default this is a <a href="Shape.html" class="tsd-kind-class">Shape</a> that is a small yellow circle.
Setting this property does not raise any events.</p>
<p>Here is an example of changing the default handle to be green &quot;X&quot;:</p>
<pre><code class="language-js"><span class="hl-4">myDiagram</span><span class="hl-2">.</span><span class="hl-4">toolManager</span><span class="hl-2">.</span><span class="hl-4">rotatingTool</span><span class="hl-2">.</span><span class="hl-4">handleArchetype</span><span class="hl-2"> =</span><br/><span class="hl-2">  </span><span class="hl-1">new</span><span class="hl-2"> </span><span class="hl-4">go</span><span class="hl-2">.</span><span class="hl-5">Shape</span><span class="hl-2">(</span><span class="hl-6">&#39;XLine&#39;</span><span class="hl-2">, {</span><br/><span class="hl-2">    </span><span class="hl-4">width:</span><span class="hl-2"> </span><span class="hl-7">8</span><span class="hl-2">,</span><br/><span class="hl-2">    </span><span class="hl-4">height:</span><span class="hl-2"> </span><span class="hl-7">8</span><span class="hl-2">,</span><br/><span class="hl-2">    </span><span class="hl-4">stroke:</span><span class="hl-2"> </span><span class="hl-6">&#39;green&#39;</span><span class="hl-2">,</span><br/><span class="hl-2">    </span><span class="hl-4">fill:</span><span class="hl-2"> </span><span class="hl-6">&#39;transparent&#39;</span><span class="hl-2">,</span><br/><span class="hl-2">    </span><span class="hl-4">cursor:</span><span class="hl-2"> </span><span class="hl-6">&#39;pointer&#39;</span><br/><span class="hl-2">  });</span>
</code><button>Copy</button></pre>
<p>This property is ignored when a custom rotating Adornment is specified as the <a href="Part.html#rotateAdornmentTemplate" class="tsd-kind-accessor">Part.rotateAdornmentTemplate</a>.</p>
</div></li></ul></section><section class="tsd-panel tsd-member"><a id="handleDistance" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>handle<wbr/>Distance</span><div class="membertype"><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></div><a href="#handleDistance" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Gets or sets the spot to locate the Adornment at a particular distance from the <a href="RotatingTool.html#adornedObject" class="tsd-kind-accessor">adornedObject</a>.
This assumes the Adornment&#39;s location will be at the center of the rotation handle.</p>
<p>By default this is 50, which locates the Adornment
so that it is placed to the right of an un-rotated object.</p>
</div><div class="tsd-comment-tags tsd-typography"><div class="flex items-center"><code class="tsd-tag">since</code><p>2.0</p>
</div></div></li></ul></section><section class="tsd-panel tsd-member"><a id="originalAngle" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagReadOnly">Readonly</code><span>original<wbr/>Angle</span><div class="membertype"><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></div><a href="#originalAngle" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>This read-only property returns the angle that was the original value of the <a href="GraphObject.html#angle" class="tsd-kind-accessor">GraphObject.angle</a>
of the GraphObject that is being rotated.
The value is invalid when this tool is not active.</p>
</div></li></ul></section><section class="tsd-panel tsd-member"><a id="rotationPoint" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>rotation<wbr/>Point</span><div class="membertype"><span class="tsd-signature-symbol">: </span><a href="Point.html" class="tsd-signature-type tsd-kind-class">Point</a></div><a href="#rotationPoint" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Gets or sets the Point at which the axis of the rotation should be.
<a href="RotatingTool.html#doActivate" class="tsd-kind-method">doActivate</a> saves here the value returned by the call to <a href="RotatingTool.html#computeRotationPoint" class="tsd-kind-method">computeRotationPoint</a>.
The value is invalid when this tool is not active.</p>
</div><div class="tsd-comment-tags tsd-typography"><div class="flex items-center"><code class="tsd-tag">since</code><p>2.0</p>
</div></div></li></ul></section><section class="tsd-panel tsd-member"><a id="snapAngleEpsilon" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>snap<wbr/>Angle<wbr/>Epsilon</span><div class="membertype"><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></div><a href="#snapAngleEpsilon" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Gets or sets the the closeness to a desired angle at which the angle is &quot;snapped to&quot;.</p>
<p>The default value is 2 degrees, meaning that any angle within 2 degrees
of a multiple of the <a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a> automatically
snaps to that multiple.
Values are limited to half of the <a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a>;
such values restrict user selected angles only to exact multiples of
<a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a> -- no other angles between them.
Setting this property does not raise any events.</p>
</div></li></ul></section><section class="tsd-panel tsd-member"><a id="snapAngleMultiple" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>snap<wbr/>Angle<wbr/>Multiple</span><div class="membertype"><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span></div><a href="#snapAngleMultiple" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Gets or sets the preferred angles for the selected object.</p>
<p>The default value is 45 degrees, meaning that angles that are multiples
of 45 degrees are automatically preferred, if the actual angle is
close to that multiple.
The closeness is determined by the <a href="RotatingTool.html#snapAngleEpsilon" class="tsd-kind-accessor">snapAngleEpsilon</a> property.
A value of zero for <a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a> results in no snapping at all.
Setting this property does not raise any events.</p>
</div></li></ul></section></section><section class="tsd-panel-group tsd-member-group"><h2>Methods</h2><section class="tsd-panel tsd-member"><a id="canStart" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagVirtual">Virtual</code><code class="tsd-tag ts-flagOverride">Override</code><span>can<wbr/>Start</span><a href="#canStart" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="canStart.canStart-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">can<wbr/>Start</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><a href="#canStart.canStart-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>This tool may run when there is a mouse-down event on a rotate handle,
the diagram is not read-only and it allows rotation,
the left mouse button is being used,
and this tool&#39;s adornment&#39;s rotate handle is at the current mouse point.</p>
<p>This method may be overridden.
Please read the Introduction page on <a href="../../intro/extensions.html">Extensions</a> for how to override methods and how to call this base method.</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="computeRotate" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagVirtual">Virtual</code><span>compute<wbr/>Rotate</span><a href="#computeRotate" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="computeRotate.computeRotate-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">compute<wbr/>Rotate</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">newPoint</span><span class="tsd-signature-symbol">: </span><a href="Point.html" class="tsd-signature-type tsd-kind-class">Point</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><a href="#computeRotate.computeRotate-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Compute the new angle given a point.
If the Shift key is pressed, this method ignores the <a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a> and <a href="RotatingTool.html#snapAngleEpsilon" class="tsd-kind-accessor">snapAngleEpsilon</a>.</p>
<p>If the angle is close (by <a href="RotatingTool.html#snapAngleEpsilon" class="tsd-kind-accessor">snapAngleEpsilon</a> degrees)
to a multiple of <a href="RotatingTool.html#snapAngleMultiple" class="tsd-kind-accessor">snapAngleMultiple</a> degrees,
make it exactly that multiple.</p>
<p>This method is called by both <a href="RotatingTool.html#doMouseMove" class="tsd-kind-method">doMouseMove</a> and <a href="RotatingTool.html#doMouseUp" class="tsd-kind-method">doMouseUp</a>.
This method may be overridden.
Please read the Introduction page on <a href="../../intro/extensions.html">Extensions</a> for how to override methods and how to call this base method.</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">newPoint</span>: <a href="Point.html" class="tsd-signature-type tsd-kind-class">Point</a></h5><div class="tsd-comment tsd-typography"><p>in document coordinates.</p>
</div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">number</span></h4><p>the new angle, in degrees.</p>
</li></ul></section><section class="tsd-panel tsd-member"><a id="computeRotationPoint" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagVirtual">Virtual</code><span>compute<wbr/>Rotation<wbr/>Point</span><a href="#computeRotationPoint" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="computeRotationPoint.computeRotationPoint-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">compute<wbr/>Rotation<wbr/>Point</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">obj</span><span class="tsd-signature-symbol">: </span><a href="GraphObject.html" class="tsd-signature-type tsd-kind-class">GraphObject</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="Point.html" class="tsd-signature-type tsd-kind-class">Point</a><a href="#computeRotationPoint.computeRotationPoint-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Compute the Point about which things should rotate.
This is called when this tool is activated and sometimes when updating the Adornment.
The value of the call is remembered as <a href="RotatingTool.html#rotationPoint" class="tsd-kind-accessor">rotationPoint</a>.</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">obj</span>: <a href="GraphObject.html" class="tsd-signature-type tsd-kind-class">GraphObject</a></h5><div class="tsd-comment tsd-typography"><p>the <a href="Part.html#rotateObject" class="tsd-kind-accessor">Part.rotateObject</a></p>
</div></li></ul></div><h4 class="tsd-returns-title">Returns <a href="Point.html" class="tsd-signature-type tsd-kind-class">Point</a></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="doActivate" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOverride">Override</code><span>do<wbr/>Activate</span><a href="#doActivate" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="doActivate.doActivate-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">do<wbr/>Activate</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#doActivate.doActivate-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Capture the mouse, remember the original <a href="GraphObject.html#angle" class="tsd-kind-accessor">GraphObject.angle</a>,
and start a transaction.</p>
<p>Normally when this method is called the value of <a href="RotatingTool.html#handle" class="tsd-kind-accessor">handle</a> will be null,
resulting in a call to <a href="Tool.html#findToolHandleAt" class="tsd-kind-method">Tool.findToolHandleAt</a> to find a &quot;Rotating&quot; tool handle,
which is then remembered as the value of <a href="RotatingTool.html#handle" class="tsd-kind-accessor">handle</a>.
If when this method is called the value of <a href="RotatingTool.html#handle" class="tsd-kind-accessor">handle</a> is already set,
then there is no need to call <a href="Tool.html#findToolHandleAt" class="tsd-kind-method">Tool.findToolHandleAt</a>,
because the programmer has already set up which rotate handle they want the user to be rotating.</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="doCancel" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOverride">Override</code><span>do<wbr/>Cancel</span><a href="#doCancel" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="doCancel.doCancel-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">do<wbr/>Cancel</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#doCancel.doCancel-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Restore the original <a href="GraphObject.html#angle" class="tsd-kind-accessor">GraphObject.angle</a> of the adorned object.</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="doDeactivate" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOverride">Override</code><span>do<wbr/>Deactivate</span><a href="#doDeactivate" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="doDeactivate.doDeactivate-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">do<wbr/>Deactivate</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#doDeactivate.doDeactivate-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Stop the current transaction, forget the <a href="RotatingTool.html#handle" class="tsd-kind-accessor">handle</a> and <a href="RotatingTool.html#adornedObject" class="tsd-kind-accessor">adornedObject</a>, and release the mouse.</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="doMouseMove" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOverride">Override</code><span>do<wbr/>Mouse<wbr/>Move</span><a href="#doMouseMove" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="doMouseMove.doMouseMove-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">do<wbr/>Mouse<wbr/>Move</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#doMouseMove.doMouseMove-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Call <a href="RotatingTool.html#rotate" class="tsd-kind-method">rotate</a> with a new angle determined by the current mouse point.
This determines the new angle by calling <a href="RotatingTool.html#computeRotate" class="tsd-kind-method">computeRotate</a>.</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="doMouseUp" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagOverride">Override</code><span>do<wbr/>Mouse<wbr/>Up</span><a href="#doMouseUp" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="doMouseUp.doMouseUp-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">do<wbr/>Mouse<wbr/>Up</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#doMouseUp.doMouseUp-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Call <a href="RotatingTool.html#rotate" class="tsd-kind-method">rotate</a> with an angle based on the most recent mouse point,
commit the transaction, and raise the &quot;PartRotated&quot; <a href="DiagramEvent.html" class="tsd-kind-class">DiagramEvent</a>.</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="rotate" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagVirtual">Virtual</code><span>rotate</span><a href="#rotate" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="rotate.rotate-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">rotate</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">newangle</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">number</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#rotate.rotate-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Change the angle of the selected part&#39;s <a href="Part.html#rotateObject" class="tsd-kind-accessor">Part.rotateObject</a>.
This modifies its <a href="GraphObject.html#angle" class="tsd-kind-accessor">GraphObject.angle</a>.</p>
<p>This method may be overridden.
Please read the Introduction page on <a href="../../intro/extensions.html">Extensions</a> for how to override methods and how to call this base method.</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">newangle</span>: <span class="tsd-signature-type">number</span></h5><div class="tsd-comment tsd-typography"><p>in degrees.</p>
</div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section><section class="tsd-panel tsd-member"><a id="stopTransaction" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagVirtual">Virtual</code><code class="tsd-tag ts-flagOverride">Override</code><span>stop<wbr/>Transaction</span><a href="#stopTransaction" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="stopTransaction.stopTransaction-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">stop<wbr/>Transaction</span><span class="tsd-signature-symbol">(</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">boolean</span><a href="#stopTransaction.stopTransaction-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>This calls the super <a href="Tool.html#stopTransaction" class="tsd-kind-method">Tool.stopTransaction</a> method, and if the result is <code>true</code>,
attempts to optimize the transaction by removing all changes except the first and last
by calling <a href="Transaction.html#optimize" class="tsd-kind-method">Transaction.optimize</a>.</p>
<p>This method may be overridden.
Please read the Introduction page on <a href="../../intro/extensions.html">Extensions</a> for how to override methods and how to call this base method.</p>
</div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4><p>the result of the call to rollback or commit the transaction.</p>
</li></ul></section><section class="tsd-panel tsd-member"><a id="updateAdornments" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><code class="tsd-tag ts-flagVirtual">Virtual</code><code class="tsd-tag ts-flagOverride">Override</code><span>update<wbr/>Adornments</span><a href="#updateAdornments" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="updateAdornments.updateAdornments-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">update<wbr/>Adornments</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">part</span><span class="tsd-signature-symbol">: </span><a href="Part.html" class="tsd-signature-type tsd-kind-class">Part</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">void</span><a href="#updateAdornments.updateAdornments-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Show an <a href="Adornment.html" class="tsd-kind-class">Adornment</a> with a rotate handle at a point to the side of the adorned object
if the part is selected and visible and if <a href="Part.html#canRotate" class="tsd-kind-method">Part.canRotate</a>() is true.</p>
<p>This method may be overridden.
Please read the Introduction page on <a href="../../intro/extensions.html">Extensions</a> for how to override methods and how to call this base method.</p>
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><h5><span class="tsd-kind-parameter">part</span>: <a href="Part.html" class="tsd-signature-type tsd-kind-class">Part</a></h5><div class="tsd-comment tsd-typography"><p>the part.</p>
</div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></section></section></div><div class="col-sidebar"><div class="page-menu"><details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><ul><li><a href="#constructor"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></li><li><a href="#adornedObject"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>adorned<wbr/>Object</span></a></li><li><a href="#handle"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle</span></a></li><li><a href="#handleAngle"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle<wbr/>Angle</span></a></li><li><a href="#handleArchetype"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle<wbr/>Archetype</span></a></li><li><a href="#handleDistance"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>handle<wbr/>Distance</span></a></li><li><a href="#originalAngle"><svg class="readonly tsd-subicon" viewBox="0 0 28 28"><use href="#subicon-R,#FF4D4D"></use></svg><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>original<wbr/>Angle</span></a></li><li><a href="#rotationPoint"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>rotation<wbr/>Point</span></a></li><li><a href="#snapAngleEpsilon"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>snap<wbr/>Angle<wbr/>Epsilon</span></a></li><li><a href="#snapAngleMultiple"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-262144"></use></svg><span>snap<wbr/>Angle<wbr/>Multiple</span></a></li><li><a href="#canStart"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>can<wbr/>Start</span></a></li><li><a href="#computeRotate"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>compute<wbr/>Rotate</span></a></li><li><a href="#computeRotationPoint"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>compute<wbr/>Rotation<wbr/>Point</span></a></li><li><a href="#doActivate"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Activate</span></a></li><li><a href="#doCancel"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Cancel</span></a></li><li><a href="#doDeactivate"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Deactivate</span></a></li><li><a href="#doMouseMove"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Mouse<wbr/>Move</span></a></li><li><a href="#doMouseUp"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>do<wbr/>Mouse<wbr/>Up</span></a></li><li><a href="#rotate"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>rotate</span></a></li><li><a href="#stopTransaction"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>stop<wbr/>Transaction</span></a></li><li><a href="#updateAdornments"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-2048"></use></svg><span>update<wbr/>Adornments</span></a></li></ul></div></details><div class="tsd-navigation settings"><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">System</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../index.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>GoJS API</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><div class="tsd w-full max-w-screen-xl mx-auto px-2"><div class="bottom-copyright">Copyright © 1998-2025 by Northwoods Software Corporation.</div></div><div class="overlay"></div><script async src="https://www.googletagmanager.com/gtag/js?id=G-S5QK8VSK84"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-S5QK8VSK84');
var getOutboundLink = function(url, label) {
  gtag('event', 'click', {
  'event_category': 'outbound',
  'event_label': label,
  'transport_type': 'beacon'
  });
}

document.getElementById("contactBtn").addEventListener("click", function() {
  getOutboundLink('https://nwoods.com/contact.html', 'contact');
});
document.getElementById("buyBtn").addEventListener("click", function() {
  getOutboundLink('https://nwoods.com/sales/index.html', 'buy');
});</script></body></html>