@itwin/core-frontend 4.9.0-dev.24 → 4.9.0-dev.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/tools/AccuDrawTool.d.ts +34 -22
- package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawTool.js +151 -88
- package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
- package/lib/esm/tools/AccuDrawTool.d.ts +34 -22
- package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawTool.js +151 -89
- package/lib/esm/tools/AccuDrawTool.js.map +1 -1
- package/lib/public/locales/en/CoreTools.json +5 -0
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccuDrawTool.d.ts","sourceRoot":"","sources":["../../../src/tools/AccuDrawTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"AccuDrawTool.d.ts","sourceRoot":"","sources":["../../../src/tools/AccuDrawTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
* @module Tools
|
|
7
7
|
*/
|
|
8
8
|
import { BentleyStatus } from "@itwin/core-bentley";
|
|
9
|
-
import { Geometry, Matrix3d, Point3d, Transform, Vector3d } from "@itwin/core-geometry";
|
|
10
|
-
import { AccuDraw, AccuDrawFlags, CompassMode, ContextMode, ItemField, KeyinStatus, LockedStates, RotationMode, ThreeAxes } from "../AccuDraw";
|
|
9
|
+
import { AxisOrder, Geometry, Matrix3d, Point3d, Transform, Vector3d } from "@itwin/core-geometry";
|
|
10
|
+
import { AccuDraw, AccuDrawFlags, AccuDrawHintBuilder, CompassMode, ContextMode, ItemField, KeyinStatus, LockedStates, RotationMode, ThreeAxes } from "../AccuDraw";
|
|
11
11
|
import { TentativeOrAccuSnap } from "../AccuSnap";
|
|
12
12
|
import { ACSDisplayOptions } from "../AuxCoordSys";
|
|
13
|
+
import { SnapHeat } from "../HitDetail";
|
|
13
14
|
import { IModelApp } from "../IModelApp";
|
|
14
15
|
import { BeButtonEvent, CoordinateLockOverrides, CoreTools, EventHandled, InputCollector, Tool } from "./Tool";
|
|
15
16
|
// cSpell:ignore dont unlockedz
|
|
@@ -750,6 +751,9 @@ export class AccuDrawShortcuts {
|
|
|
750
751
|
static async rotateToElement() {
|
|
751
752
|
return IModelApp.tools.run("AccuDraw.RotateElement");
|
|
752
753
|
}
|
|
754
|
+
static async rotatePerpendicular() {
|
|
755
|
+
return IModelApp.tools.run("AccuDraw.RotatePerpendicular");
|
|
756
|
+
}
|
|
753
757
|
static async defineACSByElement() {
|
|
754
758
|
return IModelApp.tools.run("AccuDraw.DefineACSByElement");
|
|
755
759
|
}
|
|
@@ -898,6 +902,8 @@ export class AccuDrawShortcuts {
|
|
|
898
902
|
return AccuDrawShortcuts.rotateAxes(true);
|
|
899
903
|
case "e":
|
|
900
904
|
return AccuDrawShortcuts.rotateToElement();
|
|
905
|
+
case "p":
|
|
906
|
+
return AccuDrawShortcuts.rotatePerpendicular();
|
|
901
907
|
case "r":
|
|
902
908
|
return AccuDrawShortcuts.defineACSByPoints();
|
|
903
909
|
}
|
|
@@ -1035,38 +1041,65 @@ AccuDrawRotateViewTool.toolId = "AccuDraw.RotateView";
|
|
|
1035
1041
|
/** @internal */
|
|
1036
1042
|
class AccuDrawShortcutsTool extends InputCollector {
|
|
1037
1043
|
constructor() {
|
|
1038
|
-
super();
|
|
1039
|
-
this.
|
|
1044
|
+
super(...arguments);
|
|
1045
|
+
this._complete = false;
|
|
1046
|
+
}
|
|
1047
|
+
get allowShortcut() { return this.wantActivateOnStart ? IModelApp.accuDraw.isEnabled : true; }
|
|
1048
|
+
get wantActivateOnStart() { return false; } // Whether to automatically enable AccuDraw before the 1st data button...
|
|
1049
|
+
get wantClearSnapOnStart() { return false; } // Whether to preserve active Tentative/AccuSnap on install...
|
|
1050
|
+
get wantManipulationImmediate() { return false; } // Whether additional input is required to process on install...
|
|
1051
|
+
get wantExitOnDataButtonUp() { return false; } // Whether to exit on button up instead of down (see rotate perpendicular)...
|
|
1052
|
+
async onInstall() {
|
|
1053
|
+
if (!this.allowShortcut)
|
|
1054
|
+
return false;
|
|
1055
|
+
return super.onInstall();
|
|
1040
1056
|
}
|
|
1041
1057
|
async onPostInstall() {
|
|
1042
1058
|
await super.onPostInstall();
|
|
1043
|
-
this.
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1059
|
+
if (this.wantActivateOnStart)
|
|
1060
|
+
IModelApp.accuDraw.activate();
|
|
1061
|
+
this.onManipulationStart();
|
|
1062
|
+
if (this.wantManipulationImmediate && this.doManipulation(undefined, false)) {
|
|
1063
|
+
this._complete = true;
|
|
1064
|
+
return this.exitTool();
|
|
1065
|
+
}
|
|
1066
|
+
// NOTE: InputCollector inherits suspended primitive's state, set everything...
|
|
1067
|
+
if (this.wantClearSnapOnStart) {
|
|
1068
|
+
this.initLocateElements(false, true, undefined, CoordinateLockOverrides.None); // This clears the active Tentative/AccuSnap, some shortcuts have special behavior when invoked with an active snap...
|
|
1069
|
+
}
|
|
1070
|
+
else {
|
|
1071
|
+
IModelApp.locateManager.initLocateOptions();
|
|
1072
|
+
this.changeLocateState(false, true, undefined, CoordinateLockOverrides.None);
|
|
1073
|
+
}
|
|
1074
|
+
this.doManipulation(undefined, true);
|
|
1075
|
+
;
|
|
1076
|
+
}
|
|
1077
|
+
async onCleanup() {
|
|
1078
|
+
if (this._complete)
|
|
1079
|
+
IModelApp.accuDraw.savedStateInputCollector.ignoreFlags = this.onManipulationComplete();
|
|
1080
|
+
}
|
|
1081
|
+
async exitTool() {
|
|
1082
|
+
await super.exitTool();
|
|
1083
|
+
AccuDrawShortcuts.requestInputFocus(); // re-grab focus when auto-focus tool setting set...
|
|
1084
|
+
}
|
|
1047
1085
|
async onDataButtonDown(ev) {
|
|
1048
1086
|
if (this.doManipulation(ev, false)) {
|
|
1049
|
-
this.
|
|
1050
|
-
|
|
1087
|
+
this._complete = true;
|
|
1088
|
+
if (!this.wantExitOnDataButtonUp)
|
|
1089
|
+
await this.exitTool();
|
|
1051
1090
|
}
|
|
1052
1091
|
return EventHandled.No;
|
|
1053
1092
|
}
|
|
1054
|
-
async
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
} // re-grab focus when auto-focus tool setting set...
|
|
1059
|
-
activateAccuDrawOnStart() { return true; }
|
|
1060
|
-
doManipulationStart() {
|
|
1061
|
-
if (this.activateAccuDrawOnStart())
|
|
1062
|
-
IModelApp.accuDraw.activate();
|
|
1063
|
-
this.doManipulation(undefined, true);
|
|
1093
|
+
async onDataButtonUp(_ev) {
|
|
1094
|
+
if (this._complete && this.wantExitOnDataButtonUp)
|
|
1095
|
+
await this.exitTool();
|
|
1096
|
+
return EventHandled.No;
|
|
1064
1097
|
}
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
IModelApp.accuDraw.savedStateInputCollector.ignoreFlags = this.onManipulationComplete();
|
|
1098
|
+
async onMouseMotion(ev) {
|
|
1099
|
+
this.doManipulation(ev, true);
|
|
1068
1100
|
}
|
|
1069
|
-
|
|
1101
|
+
onManipulationStart() { }
|
|
1102
|
+
onManipulationComplete() { return AccuDrawFlags.SetRMatrix; }
|
|
1070
1103
|
}
|
|
1071
1104
|
/** @internal */
|
|
1072
1105
|
export class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {
|
|
@@ -1074,45 +1107,33 @@ export class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {
|
|
|
1074
1107
|
constructor(aboutCurrentZ = true) {
|
|
1075
1108
|
super();
|
|
1076
1109
|
this.aboutCurrentZ = aboutCurrentZ;
|
|
1077
|
-
this._immediateMode = false;
|
|
1078
1110
|
}
|
|
1079
|
-
|
|
1111
|
+
get allowShortcut() { return IModelApp.accuDraw.isActive; } // Require compass to already be active for this shortcut...
|
|
1112
|
+
get wantActivateOnStart() { return true; } // State is demoted to inactive when a tool install, still need this...
|
|
1113
|
+
get wantManipulationImmediate() {
|
|
1114
|
+
if (TentativeOrAccuSnap.isHot)
|
|
1115
|
+
return true;
|
|
1080
1116
|
const accudraw = IModelApp.accuDraw;
|
|
1081
|
-
if (
|
|
1082
|
-
return
|
|
1083
|
-
|
|
1084
|
-
accudraw.changeBaseRotationMode(RotationMode.Context); // Establish current orientation as base; base Z is used when defining compass rotation by x axis...
|
|
1085
|
-
if (accudraw.clearTentative() || IModelApp.accuSnap.isHot ||
|
|
1086
|
-
(CompassMode.Polar === accudraw.compassMode && accudraw.getFieldLock(ItemField.ANGLE_Item)) ||
|
|
1087
|
-
(CompassMode.Polar !== accudraw.compassMode && accudraw.getFieldLock(ItemField.X_Item) && accudraw.getFieldLock(ItemField.Y_Item))) {
|
|
1088
|
-
if (AccuDrawShortcuts.rotateAxesByPoint(true, this.aboutCurrentZ)) {
|
|
1089
|
-
AccuDrawShortcuts.itemFieldUnlockAll();
|
|
1090
|
-
accudraw.refreshDecorationsAndDynamics();
|
|
1091
|
-
this._immediateMode = true;
|
|
1092
|
-
}
|
|
1093
|
-
}
|
|
1094
|
-
return true;
|
|
1117
|
+
if (CompassMode.Polar === accudraw.compassMode)
|
|
1118
|
+
return accudraw.getFieldLock(ItemField.ANGLE_Item);
|
|
1119
|
+
return accudraw.getFieldLock(ItemField.X_Item) && accudraw.getFieldLock(ItemField.Y_Item);
|
|
1095
1120
|
}
|
|
1096
|
-
|
|
1097
|
-
if (this.
|
|
1098
|
-
|
|
1099
|
-
return;
|
|
1100
|
-
}
|
|
1101
|
-
return super.onPostInstall();
|
|
1102
|
-
}
|
|
1103
|
-
onManipulationComplete() { return AccuDrawFlags.SetRMatrix; }
|
|
1104
|
-
doManipulationStart() {
|
|
1105
|
-
super.doManipulationStart();
|
|
1121
|
+
onManipulationStart() {
|
|
1122
|
+
if (this.aboutCurrentZ)
|
|
1123
|
+
IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Establish current orientation as base for when defining compass rotation by x axis...
|
|
1106
1124
|
CoreTools.outputPromptByKey("AccuDraw.RotateAxes.Prompts.FirstPoint");
|
|
1107
1125
|
}
|
|
1108
1126
|
doManipulation(ev, isMotion) {
|
|
1109
1127
|
const vp = ev ? ev.viewport : IModelApp.accuDraw.currentView;
|
|
1110
1128
|
if (!vp)
|
|
1111
|
-
return
|
|
1112
|
-
AccuDrawShortcuts.rotateAxesByPoint(TentativeOrAccuSnap.isHot, this.aboutCurrentZ)
|
|
1129
|
+
return false;
|
|
1130
|
+
if (!AccuDrawShortcuts.rotateAxesByPoint(TentativeOrAccuSnap.isHot, this.aboutCurrentZ))
|
|
1131
|
+
return false;
|
|
1113
1132
|
vp.invalidateDecorations();
|
|
1114
|
-
if (!isMotion)
|
|
1133
|
+
if (!isMotion) {
|
|
1115
1134
|
AccuDrawShortcuts.itemFieldUnlockAll();
|
|
1135
|
+
IModelApp.tentativePoint.clear(true);
|
|
1136
|
+
}
|
|
1116
1137
|
return true;
|
|
1117
1138
|
}
|
|
1118
1139
|
async parseAndRun(...args) {
|
|
@@ -1128,56 +1149,101 @@ AccuDrawRotateAxesTool.toolId = "AccuDraw.RotateAxes";
|
|
|
1128
1149
|
export class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {
|
|
1129
1150
|
constructor() {
|
|
1130
1151
|
super(...arguments);
|
|
1131
|
-
this.
|
|
1152
|
+
this._moveOrigin = !IModelApp.accuDraw.isActive || IModelApp.tentativePoint.isActive; // Preserve current origin if AccuDraw already active and not tentative snap...
|
|
1153
|
+
}
|
|
1154
|
+
get wantActivateOnStart() { return true; }
|
|
1155
|
+
get wantManipulationImmediate() { return IModelApp.tentativePoint.isSnapped; }
|
|
1156
|
+
onManipulationStart() {
|
|
1157
|
+
IModelApp.accuDraw.setContext(AccuDrawFlags.FixedOrigin); // Don't move compass when updateOrientation returns false...
|
|
1158
|
+
CoreTools.outputPromptByKey("AccuDraw.RotateElement.Prompts.FirstPoint");
|
|
1132
1159
|
}
|
|
1133
|
-
async onInstall() { return IModelApp.accuDraw.isEnabled; } // Require compass to be enabled for this session...
|
|
1134
1160
|
onManipulationComplete() {
|
|
1135
1161
|
let ignoreFlags = AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable; // If AccuDraw wasn't active when the shortcut started, let it remain active for suspended tool when shortcut completes...
|
|
1136
|
-
if (this.
|
|
1162
|
+
if (this._moveOrigin)
|
|
1137
1163
|
ignoreFlags |= AccuDrawFlags.SetOrigin;
|
|
1138
1164
|
return ignoreFlags;
|
|
1139
1165
|
}
|
|
1140
|
-
|
|
1141
|
-
super.doManipulationStart();
|
|
1142
|
-
CoreTools.outputPromptByKey("AccuDraw.RotateElement.Prompts.FirstPoint");
|
|
1143
|
-
}
|
|
1144
|
-
updateOrientation(snap, vp) {
|
|
1166
|
+
updateOrientation(snap, viewport, _isMotion) {
|
|
1145
1167
|
const accudraw = IModelApp.accuDraw;
|
|
1146
|
-
const rMatrix = AccuDraw.getSnapRotation(snap,
|
|
1168
|
+
const rMatrix = AccuDraw.getSnapRotation(snap, viewport);
|
|
1147
1169
|
if (undefined === rMatrix)
|
|
1148
1170
|
return false;
|
|
1149
|
-
const
|
|
1150
|
-
accudraw.setContext(AccuDrawFlags.
|
|
1171
|
+
const point = this._moveOrigin ? snap.snapPoint : accudraw.origin;
|
|
1172
|
+
accudraw.setContext(AccuDrawFlags.SetRMatrix | AccuDrawFlags.AlwaysSetOrigin, point, rMatrix);
|
|
1151
1173
|
return true;
|
|
1152
1174
|
}
|
|
1153
1175
|
doManipulation(ev, isMotion) {
|
|
1154
|
-
const
|
|
1155
|
-
if (!
|
|
1156
|
-
return
|
|
1157
|
-
const
|
|
1158
|
-
if (undefined ===
|
|
1159
|
-
return
|
|
1176
|
+
const viewport = ev ? ev.viewport : IModelApp.accuDraw.currentView;
|
|
1177
|
+
if (!viewport)
|
|
1178
|
+
return false;
|
|
1179
|
+
const snap = TentativeOrAccuSnap.getCurrentSnap(false);
|
|
1180
|
+
if (undefined === snap || !this.updateOrientation(snap, viewport, isMotion))
|
|
1181
|
+
return false;
|
|
1160
1182
|
if (undefined === ev)
|
|
1161
|
-
AccuDrawShortcuts.processPendingHints();
|
|
1183
|
+
AccuDrawShortcuts.processPendingHints(); // Would normally be processed after button down, necessary when called from post install...
|
|
1162
1184
|
if (!isMotion)
|
|
1163
|
-
IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Hold temporary rotation for tool duration
|
|
1185
|
+
IModelApp.accuDraw.changeBaseRotationMode(RotationMode.Context); // Hold temporary rotation for tool duration...
|
|
1164
1186
|
return true;
|
|
1165
1187
|
}
|
|
1166
1188
|
}
|
|
1167
1189
|
AccuDrawRotateElementTool.toolId = "AccuDraw.RotateElement";
|
|
1168
1190
|
/** @internal */
|
|
1191
|
+
export class AccuDrawRotatePerpendicularTool extends AccuDrawRotateElementTool {
|
|
1192
|
+
get wantExitOnDataButtonUp() { return true; } // Complete on button up since button down clears tentative...
|
|
1193
|
+
onManipulationComplete() {
|
|
1194
|
+
if (undefined !== this._location) {
|
|
1195
|
+
// Use tentative to hold adjusted snap location for suspended tool...
|
|
1196
|
+
IModelApp.tentativePoint.setPoint(this._location.point);
|
|
1197
|
+
IModelApp.tentativePoint.viewport = this._location.viewport;
|
|
1198
|
+
IModelApp.tentativePoint.showTentative();
|
|
1199
|
+
}
|
|
1200
|
+
return AccuDrawFlags.SetRMatrix | AccuDrawFlags.Disable;
|
|
1201
|
+
}
|
|
1202
|
+
updateOrientation(snap, viewport, isMotion) {
|
|
1203
|
+
const curve = snap.getCurvePrimitive();
|
|
1204
|
+
if (undefined === curve)
|
|
1205
|
+
return false;
|
|
1206
|
+
const accudraw = IModelApp.accuDraw;
|
|
1207
|
+
const rMatrix = AccuDraw.getSnapRotation(snap, viewport);
|
|
1208
|
+
if (undefined === rMatrix)
|
|
1209
|
+
return false;
|
|
1210
|
+
const zVec = rMatrix.getRow(2); // This is a row matrix...
|
|
1211
|
+
const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accudraw.origin, snap.getPoint(), zVec, viewport, true);
|
|
1212
|
+
if (undefined === spacePoint)
|
|
1213
|
+
return false;
|
|
1214
|
+
const detail = curve.closestPoint(spacePoint, true);
|
|
1215
|
+
if (undefined === detail?.curve)
|
|
1216
|
+
return false;
|
|
1217
|
+
const point = AccuDrawHintBuilder.projectPointToPlaneInView(detail.point, accudraw.origin, zVec, viewport, true);
|
|
1218
|
+
if (undefined === point)
|
|
1219
|
+
return false;
|
|
1220
|
+
const xVec = new Vector3d();
|
|
1221
|
+
if (normalizedDifference(point, accudraw.origin, xVec) < Geometry.smallAngleRadians)
|
|
1222
|
+
return false;
|
|
1223
|
+
; // Closest point and compass origin coincide...
|
|
1224
|
+
const yVec = xVec.unitCrossProduct(zVec);
|
|
1225
|
+
if (undefined === yVec)
|
|
1226
|
+
return false;
|
|
1227
|
+
rMatrix.setColumns(xVec, yVec, zVec);
|
|
1228
|
+
Matrix3d.createRigidFromMatrix3d(rMatrix, AxisOrder.XZY, rMatrix);
|
|
1229
|
+
rMatrix.transposeInPlace();
|
|
1230
|
+
snap.setSnapPoint(point, SnapHeat.InRange); // Force hot snap so that adjust point uses it for alignments...
|
|
1231
|
+
accudraw.setContext(AccuDrawFlags.SetRMatrix | AccuDrawFlags.AlwaysSetOrigin, accudraw.origin, rMatrix);
|
|
1232
|
+
accudraw.adjustPoint(point, viewport, false); // Update internals for new snap location...
|
|
1233
|
+
if (!isMotion)
|
|
1234
|
+
this._location = { point, viewport };
|
|
1235
|
+
return true;
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
AccuDrawRotatePerpendicularTool.toolId = "AccuDraw.RotatePerpendicular";
|
|
1239
|
+
/** @internal */
|
|
1169
1240
|
export class DefineACSByElementTool extends AccuDrawShortcutsTool {
|
|
1170
1241
|
constructor() {
|
|
1171
1242
|
super(...arguments);
|
|
1172
1243
|
this._origin = Point3d.create();
|
|
1173
1244
|
this._rMatrix = Matrix3d.createIdentity();
|
|
1174
1245
|
}
|
|
1175
|
-
|
|
1176
|
-
onManipulationComplete() { return AccuDrawFlags.SetRMatrix; }
|
|
1177
|
-
doManipulationStart() {
|
|
1178
|
-
super.doManipulationStart();
|
|
1179
|
-
CoreTools.outputPromptByKey("AccuDraw.DefineACSByElement.Prompts.FirstPoint");
|
|
1180
|
-
}
|
|
1246
|
+
onManipulationStart() { CoreTools.outputPromptByKey("AccuDraw.DefineACSByElement.Prompts.FirstPoint"); }
|
|
1181
1247
|
updateOrientation(snap, vp) {
|
|
1182
1248
|
const rMatrix = AccuDraw.getSnapRotation(snap, vp);
|
|
1183
1249
|
if (undefined === rMatrix)
|
|
@@ -1189,10 +1255,10 @@ export class DefineACSByElementTool extends AccuDrawShortcutsTool {
|
|
|
1189
1255
|
doManipulation(ev, isMotion) {
|
|
1190
1256
|
const vp = ev ? ev.viewport : undefined;
|
|
1191
1257
|
if (!vp)
|
|
1192
|
-
return
|
|
1258
|
+
return false;
|
|
1193
1259
|
const snapDetail = TentativeOrAccuSnap.getCurrentSnap(false);
|
|
1194
1260
|
if (undefined === snapDetail || !this.updateOrientation(snapDetail, vp))
|
|
1195
|
-
return
|
|
1261
|
+
return false;
|
|
1196
1262
|
IModelApp.viewManager.invalidateDecorationsAllViews();
|
|
1197
1263
|
if (isMotion)
|
|
1198
1264
|
return true;
|
|
@@ -1220,24 +1286,20 @@ export class DefineACSByPointsTool extends AccuDrawShortcutsTool {
|
|
|
1220
1286
|
super(...arguments);
|
|
1221
1287
|
this._points = [];
|
|
1222
1288
|
}
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
doManipulationStart() {
|
|
1226
|
-
super.doManipulationStart();
|
|
1227
|
-
const tentativePoint = IModelApp.tentativePoint;
|
|
1228
|
-
if (!tentativePoint.isActive) {
|
|
1289
|
+
onManipulationStart() {
|
|
1290
|
+
if (!IModelApp.tentativePoint.isActive) {
|
|
1229
1291
|
CoreTools.outputPromptByKey("AccuDraw.DefineACSByPoints.Prompts.FirstPoint");
|
|
1230
1292
|
return;
|
|
1231
1293
|
}
|
|
1232
|
-
const origin = tentativePoint.getPoint().clone();
|
|
1294
|
+
const origin = IModelApp.tentativePoint.getPoint().clone();
|
|
1233
1295
|
CoreTools.outputPromptByKey("AccuDraw.DefineACSByPoints.Prompts.SecondPoint");
|
|
1234
1296
|
IModelApp.accuDraw.setContext(AccuDrawFlags.SetOrigin | AccuDrawFlags.FixedOrigin, origin);
|
|
1235
1297
|
this._points.push(origin);
|
|
1236
|
-
tentativePoint.clear(true);
|
|
1298
|
+
IModelApp.tentativePoint.clear(true);
|
|
1237
1299
|
}
|
|
1238
1300
|
doManipulation(ev, isMotion) {
|
|
1239
1301
|
if (!ev || !ev.viewport)
|
|
1240
|
-
return
|
|
1302
|
+
return false;
|
|
1241
1303
|
IModelApp.viewManager.invalidateDecorationsAllViews();
|
|
1242
1304
|
if (isMotion)
|
|
1243
1305
|
return false;
|