@itwin/editor-backend 3.0.0-extension.1 → 3.0.0

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 CHANGED
@@ -1,6 +1,100 @@
1
1
  # Change Log - @itwin/editor-backend
2
2
 
3
- This log was last generated on Tue, 21 Sep 2021 21:06:40 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 24 Jan 2022 14:00:52 GMT and should not be manually modified.
4
+
5
+ ## 3.0.0
6
+ Mon, 24 Jan 2022 14:00:52 GMT
7
+
8
+ ### Updates
9
+
10
+ - fix code for breaking change to .query() method
11
+ - Upgrade target to ES2019
12
+ - Dynamics should honor appearance overrides appliled to original element. Added blend tools.
13
+ - Aquire locks for built-in edit commands.
14
+ - Updated to Electron 14
15
+ - Added ability to convert iModel coordinates to or from any Geographic CRS
16
+ - rename to @itwin/editor-backend
17
+ - Basic solid modeling operations are now covered.
18
+ - Don't hide original elements until we get a result. Cache filterHit status.
19
+ - Fix for IModel._ecefTrans not being updated when setting IModel._ecefLocation.
20
+ - New solid modeling ipc interface
21
+ - More solid modeling functionality.
22
+ - New tools to sweep/spin faces and delete faces/imprinted edges.
23
+
24
+ ## 2.19.28
25
+ Wed, 12 Jan 2022 14:52:38 GMT
26
+
27
+ _Version update only_
28
+
29
+ ## 2.19.27
30
+ Wed, 05 Jan 2022 20:07:20 GMT
31
+
32
+ _Version update only_
33
+
34
+ ## 2.19.26
35
+ Wed, 08 Dec 2021 20:54:52 GMT
36
+
37
+ _Version update only_
38
+
39
+ ## 2.19.25
40
+ Fri, 03 Dec 2021 20:05:49 GMT
41
+
42
+ _Version update only_
43
+
44
+ ## 2.19.24
45
+ Mon, 29 Nov 2021 18:44:31 GMT
46
+
47
+ _Version update only_
48
+
49
+ ## 2.19.23
50
+ Mon, 22 Nov 2021 20:41:39 GMT
51
+
52
+ _Version update only_
53
+
54
+ ## 2.19.22
55
+ Wed, 17 Nov 2021 01:23:26 GMT
56
+
57
+ _Version update only_
58
+
59
+ ## 2.19.21
60
+ Wed, 10 Nov 2021 10:58:24 GMT
61
+
62
+ _Version update only_
63
+
64
+ ## 2.19.20
65
+ Fri, 29 Oct 2021 16:14:22 GMT
66
+
67
+ _Version update only_
68
+
69
+ ## 2.19.19
70
+ Mon, 25 Oct 2021 16:16:25 GMT
71
+
72
+ _Version update only_
73
+
74
+ ## 2.19.18
75
+ Thu, 21 Oct 2021 20:59:44 GMT
76
+
77
+ _Version update only_
78
+
79
+ ## 2.19.17
80
+ Thu, 14 Oct 2021 21:19:43 GMT
81
+
82
+ _Version update only_
83
+
84
+ ## 2.19.16
85
+ Mon, 11 Oct 2021 17:37:46 GMT
86
+
87
+ _Version update only_
88
+
89
+ ## 2.19.15
90
+ Fri, 08 Oct 2021 16:44:23 GMT
91
+
92
+ _Version update only_
93
+
94
+ ## 2.19.14
95
+ Fri, 01 Oct 2021 13:07:03 GMT
96
+
97
+ _Version update only_
4
98
 
5
99
  ## 2.19.13
6
100
  Tue, 21 Sep 2021 21:06:40 GMT
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright © 2017-2021 Bentley Systems, Incorporated. All rights reserved.
3
+ Copyright © 2017-2022 Bentley Systems, Incorporated. All rights reserved.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
6
 
@@ -5,7 +5,7 @@ import { CompressedId64Set, Id64String, IModelStatus } from "@itwin/core-bentley
5
5
  import { Matrix3dProps, Range3dProps, TransformProps, XYZProps } from "@itwin/core-geometry";
6
6
  import { IModelDb } from "@itwin/core-backend";
7
7
  import { EcefLocationProps, ElementGeometryInfo, GeometricElementProps, GeometryPartProps } from "@itwin/core-common";
8
- import { BasicManipulationCommandIpc, BlendEdgesProps, BooleanOperationProps, BRepEntityType, ChamferEdgesProps, ConnectedSubEntityProps, DeleteSubEntityProps, EdgeParameterRangeProps, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, EvaluatedEdgeProps, EvaluatedFaceProps, EvaluatedVertexProps, FaceParameterRangeProps, FlatBufferGeometricElementData, FlatBufferGeometryFilter, FlatBufferGeometryPartData, HollowFacesProps, LocateSubEntityProps, OffsetEdgesProps, OffsetFacesProps, PointInsideResultProps, SewSheetProps, SolidModelingCommandIpc, SpinFacesProps, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType, SweepFacesProps, ThickenSheetProps, TransformSubEntityProps } from "@itwin/editor-common";
8
+ import { BasicManipulationCommandIpc, BlendEdgesProps, BooleanOperationProps, BRepEntityType, ChamferEdgesProps, ConnectedSubEntityProps, CutProps, DeleteSubEntityProps, EdgeParameterRangeProps, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, EmbossProps, EvaluatedEdgeProps, EvaluatedFaceProps, EvaluatedVertexProps, FaceParameterRangeProps, FlatBufferGeometricElementData, FlatBufferGeometryFilter, FlatBufferGeometryPartData, HollowFacesProps, ImprintProps, LocateSubEntityProps, LoftProps, OffsetEdgesProps, OffsetFacesProps, PointInsideResultProps, SewSheetProps, SolidModelingCommandIpc, SpinFacesProps, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType, SweepFacesProps, SweepPathProps, ThickenSheetProps, TransformSubEntityProps } from "@itwin/editor-common";
9
9
  import { EditCommand } from "./EditCommand";
10
10
  /** @alpha */
11
11
  export declare class BasicManipulationCommand extends EditCommand implements BasicManipulationCommandIpc {
@@ -38,9 +38,11 @@ export declare class SolidModelingCommand extends BasicManipulationCommand imple
38
38
  isSmoothEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
39
39
  isLaminarEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
40
40
  isLinearEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
41
+ isRedundantEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
41
42
  isSmoothVertex(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
42
43
  private bodyQuery;
43
44
  isDisjointBody(id: Id64String, index: number): Promise<boolean>;
45
+ isPlanarBody(id: Id64String, index: number): Promise<boolean>;
44
46
  isSingleFacePlanarSheet(id: Id64String, index: number): Promise<boolean>;
45
47
  hasOnlyPlanarFaces(id: Id64String, index: number): Promise<boolean>;
46
48
  hasCurvedFaceOrEdge(id: Id64String, index: number): Promise<boolean>;
@@ -57,6 +59,11 @@ export declare class SolidModelingCommand extends BasicManipulationCommand imple
57
59
  booleanOperation(id: Id64String, params: BooleanOperationProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
58
60
  sewSheets(id: Id64String, params: SewSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
59
61
  thickenSheets(id: Id64String, params: ThickenSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
62
+ cutSolid(id: Id64String, params: CutProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
63
+ embossBody(id: Id64String, params: EmbossProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
64
+ imprintBody(id: Id64String, params: ImprintProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
65
+ sweepAlongPath(id: Id64String, params: SweepPathProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
66
+ loftProfiles(id: Id64String, params: LoftProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
60
67
  offsetFaces(id: Id64String, params: OffsetFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
61
68
  offsetEdges(id: Id64String, params: OffsetEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
62
69
  hollowFaces(id: Id64String, params: HollowFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"EditBuiltInCommand.d.ts","sourceRoot":"","sources":["../../src/EditBuiltInCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EditBuiltInCommand.d.ts","sourceRoot":"","sources":["../../src/EditBuiltInCommand.ts"],"names":[],"mappings":"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"}
@@ -20,37 +20,44 @@ class BasicManipulationCommand extends EditCommand_1.EditCommand {
20
20
  this._str = _str;
21
21
  }
22
22
  async deleteElements(ids) {
23
- for (const id of core_bentley_1.CompressedId64Set.iterable(ids))
23
+ const idSet = core_bentley_1.CompressedId64Set.decompressSet(ids);
24
+ await this.iModel.locks.acquireLocks({ exclusive: idSet });
25
+ for (const id of idSet)
24
26
  this.iModel.elements.deleteElement(id);
25
27
  return core_bentley_1.IModelStatus.Success;
26
28
  }
27
29
  async transformPlacement(ids, transProps) {
30
+ const idSet = core_bentley_1.CompressedId64Set.decompressSet(ids);
31
+ await this.iModel.locks.acquireLocks({ exclusive: idSet });
28
32
  const transform = core_geometry_1.Transform.fromJSON(transProps);
29
- for (const id of core_bentley_1.CompressedId64Set.iterable(ids)) {
33
+ for (const id of idSet) {
30
34
  const element = this.iModel.elements.getElement(id);
31
35
  if (!element.placement.isValid)
32
36
  continue; // Ignore assembly parents w/o geometry, etc...
33
37
  element.placement.multiplyTransform(transform);
34
- this.iModel.elements.updateElement(element);
38
+ this.iModel.elements.updateElement(element.toJSON());
35
39
  }
36
40
  return core_bentley_1.IModelStatus.Success;
37
41
  }
38
42
  async rotatePlacement(ids, matrixProps, aboutCenter) {
43
+ const idSet = core_bentley_1.CompressedId64Set.decompressSet(ids);
44
+ await this.iModel.locks.acquireLocks({ exclusive: idSet });
39
45
  const matrix = core_geometry_1.Matrix3d.fromJSON(matrixProps);
40
- for (const id of core_bentley_1.CompressedId64Set.iterable(ids)) {
46
+ for (const id of idSet) {
41
47
  const element = this.iModel.elements.getElement(id);
42
48
  if (!element.placement.isValid)
43
49
  continue; // Ignore assembly parents w/o geometry, etc...
44
50
  const fixedPoint = aboutCenter ? element.placement.calculateRange().center : core_geometry_1.Point3d.createFrom(element.placement.origin);
45
51
  const transform = core_geometry_1.Transform.createFixedPointAndMatrix(fixedPoint, matrix);
46
52
  element.placement.multiplyTransform(transform);
47
- this.iModel.elements.updateElement(element);
53
+ this.iModel.elements.updateElement(element.toJSON());
48
54
  }
49
55
  return core_bentley_1.IModelStatus.Success;
50
56
  }
51
57
  async insertGeometricElement(props, data) {
58
+ await this.iModel.locks.acquireLocks({ shared: props.model });
52
59
  const newElem = this.iModel.elements.createElement(props);
53
- const newId = this.iModel.elements.insertElement(newElem);
60
+ const newId = newElem.insert();
54
61
  if (undefined === data)
55
62
  return newId;
56
63
  const updateProps = {
@@ -67,13 +74,14 @@ class BasicManipulationCommand extends EditCommand_1.EditCommand {
67
74
  return newId;
68
75
  }
69
76
  async insertGeometryPart(props, data) {
77
+ await this.iModel.locks.acquireLocks({ shared: props.model });
70
78
  if (undefined === props.geom && undefined !== data) {
71
79
  const builder = new core_common_1.GeometryStreamBuilder();
72
80
  builder.appendGeometry(core_geometry_1.PointString3d.create(core_geometry_1.Point3d.createZero()));
73
81
  props.geom = builder.geometryStream; // can't insert a DgnGeometryPart without geometry...
74
82
  }
75
83
  const newElem = this.iModel.elements.createElement(props);
76
- const newId = this.iModel.elements.insertElement(newElem);
84
+ const newId = newElem.insert();
77
85
  if (undefined === data)
78
86
  return newId;
79
87
  const updateProps = {
@@ -93,13 +101,14 @@ class BasicManipulationCommand extends EditCommand_1.EditCommand {
93
101
  if (typeof propsOrId === "string") {
94
102
  if (undefined === data)
95
103
  throw new core_common_1.IModelError(core_bentley_1.DbResult.BE_SQLITE_ERROR, "Flatbuffer data required for update by id");
96
- props = this.iModel.elements.getElement(propsOrId);
104
+ props = this.iModel.elements.getElementProps(propsOrId);
97
105
  }
98
106
  else {
99
107
  props = propsOrId;
100
108
  }
101
109
  if (undefined === props.id)
102
110
  throw new core_common_1.IModelError(core_bentley_1.DbResult.BE_SQLITE_ERROR, "Element id required for update");
111
+ await this.iModel.locks.acquireLocks({ exclusive: props.id });
103
112
  this.iModel.elements.updateElement(props);
104
113
  if (undefined === data)
105
114
  return;
@@ -178,6 +187,7 @@ class BasicManipulationCommand extends EditCommand_1.EditCommand {
178
187
  newExtents.setFromJSON(extents);
179
188
  if (newExtents.isNull)
180
189
  throw new core_common_1.IModelError(core_bentley_1.DbResult.BE_SQLITE_ERROR, "Invalid project extents");
190
+ await this.iModel.acquireSchemaLock();
181
191
  this.iModel.updateProjectExtents(newExtents);
182
192
  // Set source from calculated to user so connectors preserve the change.
183
193
  const unitsProps = { name: "Units", namespace: "dgn_Db" };
@@ -192,6 +202,7 @@ class BasicManipulationCommand extends EditCommand_1.EditCommand {
192
202
  }
193
203
  }
194
204
  async updateEcefLocation(ecefLocation) {
205
+ await this.iModel.acquireSchemaLock();
195
206
  // Clear GCS that caller already determined was invalid...
196
207
  this.iModel.deleteFileProperty({ name: "DgnGCS", namespace: "dgn_Db" });
197
208
  const newEcefLocation = new core_common_1.EcefLocation(ecefLocation);
@@ -212,6 +223,8 @@ var QuerySubEntity;
212
223
  QuerySubEntity[QuerySubEntity["LinearEdge"] = 3] = "LinearEdge";
213
224
  /** Return whether the angle between the normals of the supplied vertices's edges never exceeds the internal smooth angle tolerance along the length of the edge */
214
225
  QuerySubEntity[QuerySubEntity["SmoothVertex"] = 4] = "SmoothVertex";
226
+ /** Return whether the supplied sub-entity is a redundant edge (containing faces share surface) */
227
+ QuerySubEntity[QuerySubEntity["RedundantEdge"] = 5] = "RedundantEdge";
215
228
  })(QuerySubEntity || (QuerySubEntity = {}));
216
229
  var QueryBody;
217
230
  (function (QueryBody) {
@@ -223,6 +236,8 @@ var QueryBody;
223
236
  QueryBody[QueryBody["OnlyPlanarFaces"] = 2] = "OnlyPlanarFaces";
224
237
  /** Return whether the geometric primitive index is a body with any edge that is non-linear or any face that is non-planar */
225
238
  QueryBody[QueryBody["CurvedFaceOrEdge"] = 3] = "CurvedFaceOrEdge";
239
+ /** Return whether the geometric primitive index is a planar sheet or wire body */
240
+ QueryBody[QueryBody["PlanarBody"] = 4] = "PlanarBody";
226
241
  })(QueryBody || (QueryBody = {}));
227
242
  var OperationType;
228
243
  (function (OperationType) {
@@ -255,10 +270,8 @@ var OperationType;
255
270
  OperationType[OperationType["Cut"] = 26] = "Cut";
256
271
  OperationType[OperationType["Emboss"] = 27] = "Emboss";
257
272
  OperationType[OperationType["Imprint"] = 28] = "Imprint";
258
- OperationType[OperationType["SweepBody"] = 29] = "SweepBody";
259
- OperationType[OperationType["SpinBody"] = 30] = "SpinBody";
260
- OperationType[OperationType["SweepPath"] = 31] = "SweepPath";
261
- OperationType[OperationType["Loft"] = 32] = "Loft";
273
+ OperationType[OperationType["SweepPath"] = 29] = "SweepPath";
274
+ OperationType[OperationType["Loft"] = 30] = "Loft";
262
275
  })(OperationType || (OperationType = {}));
263
276
  /** @alpha */
264
277
  class SolidModelingCommand extends BasicManipulationCommand {
@@ -340,6 +353,7 @@ class SolidModelingCommand extends BasicManipulationCommand {
340
353
  type: "3d",
341
354
  placement: { origin: core_geometry_1.Point3d.createZero(), angles: core_geometry_1.YawPitchRollAngles.createDegrees(0, 0, 0) },
342
355
  categoryId: geometryProps.category,
356
+ elementId: id,
343
357
  geometry: { format: "flatbuffer", data: [geometryProps.geometry] },
344
358
  };
345
359
  resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);
@@ -387,6 +401,9 @@ class SolidModelingCommand extends BasicManipulationCommand {
387
401
  async isLinearEdge(id, subEntity) {
388
402
  return this.subEntityQuery(id, subEntity, QuerySubEntity.LinearEdge);
389
403
  }
404
+ async isRedundantEdge(id, subEntity) {
405
+ return this.subEntityQuery(id, subEntity, QuerySubEntity.RedundantEdge);
406
+ }
390
407
  async isSmoothVertex(id, subEntity) {
391
408
  return this.subEntityQuery(id, subEntity, QuerySubEntity.SmoothVertex);
392
409
  }
@@ -403,6 +420,9 @@ class SolidModelingCommand extends BasicManipulationCommand {
403
420
  async isDisjointBody(id, index) {
404
421
  return this.bodyQuery(id, index, QueryBody.DisjointBody);
405
422
  }
423
+ async isPlanarBody(id, index) {
424
+ return this.bodyQuery(id, index, QueryBody.PlanarBody);
425
+ }
406
426
  async isSingleFacePlanarSheet(id, index) {
407
427
  return this.bodyQuery(id, index, QueryBody.SingleFacePlanarSheet);
408
428
  }
@@ -492,7 +512,7 @@ class SolidModelingCommand extends BasicManipulationCommand {
492
512
  this.iModel.nativeDb.elementGeometryCacheOperation(props);
493
513
  return accepted;
494
514
  }
495
- async getElementGeometryResults(id, info, opts) {
515
+ async getElementGeometryResults(id, info, opts, tools) {
496
516
  if (0 === info.entryArray.length || undefined === info.categoryId || undefined === info.bbox)
497
517
  return undefined;
498
518
  const resultProps = {};
@@ -516,6 +536,15 @@ class SolidModelingCommand extends BasicManipulationCommand {
516
536
  placement = { origin, angles };
517
537
  }
518
538
  if (opts.writeChanges) {
539
+ if (undefined !== tools) {
540
+ if (opts.insertProps) {
541
+ // NOTE: Insert model may be different than tool model(s), can't rely on getting shared lock from them...
542
+ await this.iModel.locks.acquireLocks({ shared: opts.insertProps.model, exclusive: tools });
543
+ }
544
+ else {
545
+ await this.iModel.locks.acquireLocks({ exclusive: [id, ...tools] });
546
+ }
547
+ }
519
548
  if (opts.insertProps) {
520
549
  opts.insertProps.placement = placement; // entryArray is local to this placement...
521
550
  delete opts.insertProps.geom; // Ignore geometry if present...
@@ -528,6 +557,10 @@ class SolidModelingCommand extends BasicManipulationCommand {
528
557
  await this.updateGeometricElement(updateProps, { entryArray: info.entryArray });
529
558
  resultProps.elementId = id;
530
559
  }
560
+ if (undefined !== tools) {
561
+ for (const toolId of core_bentley_1.Id64.iterable(tools))
562
+ this.iModel.elements.deleteElement(toolId);
563
+ }
531
564
  }
532
565
  if (!opts.wantGraphic)
533
566
  return resultProps;
@@ -540,12 +573,13 @@ class SolidModelingCommand extends BasicManipulationCommand {
540
573
  type: "3d",
541
574
  placement,
542
575
  categoryId: info.categoryId,
576
+ elementId: id,
543
577
  geometry: { format: "flatbuffer", data: info.entryArray },
544
578
  };
545
579
  resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);
546
580
  return resultProps;
547
581
  }
548
- async doElementGeometryOperation(props, opts) {
582
+ async doElementGeometryOperation(props, opts, tools) {
549
583
  let accepted;
550
584
  const onGeometry = (info) => {
551
585
  accepted = info;
@@ -554,32 +588,53 @@ class SolidModelingCommand extends BasicManipulationCommand {
554
588
  this.iModel.nativeDb.elementGeometryCacheOperation(props);
555
589
  if (undefined === accepted)
556
590
  return undefined;
557
- return this.getElementGeometryResults(props.id, accepted, opts);
591
+ return this.getElementGeometryResults(props.id, accepted, opts, tools);
558
592
  }
559
593
  async booleanOperation(id, params, opts) {
560
- const props = { id, op: OperationType.BooleanOp, params };
561
- const resultProps = await this.doElementGeometryOperation(props, opts);
562
594
  // target insert = keep tools, target update = delete tools...
563
- if (undefined !== resultProps && opts.writeChanges && undefined === opts.insertProps) {
564
- for (const toolId of params.tools)
565
- this.iModel.elements.deleteElement(toolId);
566
- }
567
- return resultProps;
595
+ const props = { id, op: OperationType.BooleanOp, params };
596
+ return this.doElementGeometryOperation(props, opts, undefined === opts.insertProps ? params.tools : undefined);
568
597
  }
569
598
  async sewSheets(id, params, opts) {
570
- const props = { id, op: OperationType.SewSheets, params };
571
- const resultProps = await this.doElementGeometryOperation(props, opts);
572
599
  // target insert = keep tools, target update = delete tools...
573
- if (undefined !== resultProps && opts.writeChanges && undefined === opts.insertProps) {
574
- for (const toolId of params.tools)
575
- this.iModel.elements.deleteElement(toolId);
576
- }
577
- return resultProps;
600
+ const props = { id, op: OperationType.SewSheets, params };
601
+ return this.doElementGeometryOperation(props, opts, undefined === opts.insertProps ? params.tools : undefined);
578
602
  }
579
603
  async thickenSheets(id, params, opts) {
580
604
  const props = { id, op: OperationType.ThickenSheets, params };
581
605
  return this.doElementGeometryOperation(props, opts);
582
606
  }
607
+ async cutSolid(id, params, opts) {
608
+ const props = { id, op: OperationType.Cut, params };
609
+ return this.doElementGeometryOperation(props, opts, !params.keepProfile ? params.profile : undefined);
610
+ }
611
+ async embossBody(id, params, opts) {
612
+ const props = { id, op: OperationType.Emboss, params };
613
+ return this.doElementGeometryOperation(props, opts, !params.keepProfile ? params.profile : undefined);
614
+ }
615
+ async imprintBody(id, params, opts) {
616
+ const props = { id, op: OperationType.Imprint, params };
617
+ return this.doElementGeometryOperation(props, opts, !params.keepProfile && "string" === typeof (params.imprint) ? params.imprint : undefined);
618
+ }
619
+ async sweepAlongPath(id, params, opts) {
620
+ const props = { id, op: OperationType.SweepPath, params };
621
+ return this.doElementGeometryOperation(props, opts, !params.keepPath ? params.path : undefined);
622
+ }
623
+ async loftProfiles(id, params, opts) {
624
+ const toolIds = (opts.writeChanges && (!params.keepTools || !params.keepGuides)) ? new Set() : undefined;
625
+ if (undefined !== toolIds) {
626
+ if (!params.keepTools) {
627
+ for (const toolId of core_bentley_1.Id64.iterable(params.tools))
628
+ toolIds.add(toolId);
629
+ }
630
+ if (undefined !== params.guides && !params.keepGuides) {
631
+ for (const guideId of core_bentley_1.Id64.iterable(params.guides))
632
+ toolIds.add(guideId);
633
+ }
634
+ }
635
+ const props = { id, op: OperationType.Loft, params };
636
+ return this.doElementGeometryOperation(props, opts, toolIds);
637
+ }
583
638
  async offsetFaces(id, params, opts) {
584
639
  const props = { id, op: OperationType.OffsetFaces, params };
585
640
  return this.doElementGeometryOperation(props, opts);
@@ -1 +1 @@
1
- {"version":3,"file":"EditBuiltInCommand.js","sourceRoot":"","sources":["../../src/EditBuiltInCommand.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { BentleyStatus, CompressedId64Set, DbResult, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Matrix3d, Matrix3dProps, Point3d, PointString3d, Range3d, Range3dProps, Transform, TransformProps, XYZProps, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\r\nimport { BRepEntity, ColorDefProps, DynamicGraphicsRequest3dProps, EcefLocation, EcefLocationProps, ElementGeometry, ElementGeometryDataEntry, ElementGeometryFunction, ElementGeometryInfo, ElementGeometryRequest, ElementGeometryUpdate, FilePropertyProps, GeometricElementProps, GeometryPartProps, GeometryStreamBuilder, IModelError, Placement3dProps } from \"@itwin/core-common\";\r\nimport { BasicManipulationCommandIpc, BlendEdgesProps, BooleanOperationProps, BRepEntityType, ChamferEdgesProps, ConnectedSubEntityProps, DeleteSubEntityProps, EdgeParameterRangeProps, editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, EvaluatedEdgeProps, EvaluatedFaceProps, EvaluatedVertexProps, FaceParameterRangeProps, FlatBufferGeometricElementData, FlatBufferGeometryFilter, FlatBufferGeometryPartData, HollowFacesProps, LocateSubEntityProps, OffsetEdgesProps, OffsetFacesProps, PointInsideResultProps, SewSheetProps, SolidModelingCommandIpc, SpinFacesProps, SubEntityAppearanceProps, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType, SweepFacesProps, ThickenSheetProps, TransformSubEntityProps } from \"@itwin/editor-common\";\r\nimport { EditCommand } from \"./EditCommand\";\r\n\r\n/** @alpha */\r\nexport class BasicManipulationCommand extends EditCommand implements BasicManipulationCommandIpc {\r\n public static override commandId = editorBuiltInCmdIds.cmdBasicManipulation;\r\n\r\n public constructor(iModel: IModelDb, protected _str: string) { super(iModel); }\r\n\r\n public async deleteElements(ids: CompressedId64Set): Promise<IModelStatus> {\r\n for (const id of CompressedId64Set.iterable(ids))\r\n this.iModel.elements.deleteElement(id);\r\n\r\n return IModelStatus.Success;\r\n }\r\n\r\n public async transformPlacement(ids: CompressedId64Set, transProps: TransformProps): Promise<IModelStatus> {\r\n const transform = Transform.fromJSON(transProps);\r\n\r\n for (const id of CompressedId64Set.iterable(ids)) {\r\n const element = this.iModel.elements.getElement<GeometricElement>(id);\r\n\r\n if (!element.placement.isValid)\r\n continue; // Ignore assembly parents w/o geometry, etc...\r\n\r\n element.placement.multiplyTransform(transform);\r\n this.iModel.elements.updateElement(element);\r\n }\r\n\r\n return IModelStatus.Success;\r\n }\r\n\r\n public async rotatePlacement(ids: CompressedId64Set, matrixProps: Matrix3dProps, aboutCenter: boolean): Promise<IModelStatus> {\r\n const matrix = Matrix3d.fromJSON(matrixProps);\r\n\r\n for (const id of CompressedId64Set.iterable(ids)) {\r\n const element = this.iModel.elements.getElement<GeometricElement>(id);\r\n\r\n if (!element.placement.isValid)\r\n continue; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const fixedPoint = aboutCenter ? element.placement.calculateRange().center : Point3d.createFrom(element.placement.origin);\r\n const transform = Transform.createFixedPointAndMatrix(fixedPoint, matrix);\r\n\r\n element.placement.multiplyTransform(transform);\r\n this.iModel.elements.updateElement(element);\r\n }\r\n\r\n return IModelStatus.Success;\r\n }\r\n\r\n public async insertGeometricElement(props: GeometricElementProps, data?: FlatBufferGeometricElementData): Promise<Id64String> {\r\n const newElem = this.iModel.elements.createElement(props);\r\n const newId = this.iModel.elements.insertElement(newElem);\r\n if (undefined === data)\r\n return newId;\r\n\r\n const updateProps: ElementGeometryUpdate = {\r\n elementId: newId,\r\n entryArray: data.entryArray,\r\n isWorld: data.isWorld,\r\n viewIndependent: data.viewIndependent,\r\n };\r\n\r\n const status = this.iModel.elementGeometryUpdate(updateProps);\r\n if (DbResult.BE_SQLITE_OK !== status) {\r\n this.iModel.elements.deleteElement(newId); // clean up element...\r\n throw new IModelError(status, \"Error updating element geometry\");\r\n }\r\n\r\n return newId;\r\n }\r\n\r\n public async insertGeometryPart(props: GeometryPartProps, data?: FlatBufferGeometryPartData): Promise<Id64String> {\r\n if (undefined === props.geom && undefined !== data) {\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(PointString3d.create(Point3d.createZero()));\r\n props.geom = builder.geometryStream; // can't insert a DgnGeometryPart without geometry...\r\n }\r\n\r\n const newElem = this.iModel.elements.createElement(props);\r\n const newId = this.iModel.elements.insertElement(newElem);\r\n if (undefined === data)\r\n return newId;\r\n\r\n const updateProps: ElementGeometryUpdate = {\r\n elementId: newId,\r\n entryArray: data.entryArray,\r\n is2dPart: data.is2dPart,\r\n };\r\n\r\n const status = this.iModel.elementGeometryUpdate(updateProps);\r\n if (DbResult.BE_SQLITE_OK !== status) {\r\n this.iModel.elements.deleteElement(newId); // clean up element...\r\n throw new IModelError(status, \"Error updating part geometry\");\r\n }\r\n\r\n return newId;\r\n }\r\n\r\n public async updateGeometricElement(propsOrId: GeometricElementProps | Id64String, data?: FlatBufferGeometricElementData): Promise<void> {\r\n let props: GeometricElementProps;\r\n if (typeof propsOrId === \"string\") {\r\n if (undefined === data)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Flatbuffer data required for update by id\");\r\n props = this.iModel.elements.getElement<GeometricElement>(propsOrId);\r\n } else {\r\n props = propsOrId;\r\n }\r\n\r\n if (undefined === props.id)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Element id required for update\");\r\n\r\n this.iModel.elements.updateElement(props);\r\n if (undefined === data)\r\n return;\r\n\r\n const updateProps: ElementGeometryUpdate = {\r\n elementId: props.id,\r\n entryArray: data.entryArray,\r\n isWorld: data.isWorld,\r\n viewIndependent: data.viewIndependent,\r\n };\r\n\r\n const status = this.iModel.elementGeometryUpdate(updateProps);\r\n if (DbResult.BE_SQLITE_OK !== status) {\r\n throw new IModelError(status, \"Error updating element geometry\");\r\n }\r\n }\r\n\r\n public async requestElementGeometry(elementId: Id64String, filter?: FlatBufferGeometryFilter): Promise<ElementGeometryInfo | undefined> {\r\n let accepted: ElementGeometryInfo | undefined;\r\n\r\n const onGeometry: ElementGeometryFunction = (info: ElementGeometryInfo): void => {\r\n accepted = info;\r\n\r\n if (undefined !== filter) {\r\n let numDisplayable = 0;\r\n\r\n for (const entry of info.entryArray) {\r\n if (!ElementGeometry.isDisplayableEntry(entry))\r\n continue;\r\n\r\n numDisplayable++;\r\n if (filter.maxDisplayable && numDisplayable > filter.maxDisplayable) {\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (filter.reject && filter.reject.some((opcode) => entry.opcode === opcode)) {\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (filter.accept && !filter.accept.some((opcode) => entry.opcode === opcode)) {\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (undefined === filter.geometry)\r\n continue;\r\n\r\n let entityType;\r\n if (filter.geometry.curves && !(filter.geometry.surfaces || filter.geometry.solids))\r\n entityType = ElementGeometry.isCurve(entry) ? BRepEntity.Type.Wire : undefined; // skip surface/solid opcodes...\r\n else\r\n entityType = ElementGeometry.getBRepEntityType(entry);\r\n\r\n switch (entityType) {\r\n case BRepEntity.Type.Wire:\r\n if (!filter.geometry.curves)\r\n accepted = undefined;\r\n break;\r\n case BRepEntity.Type.Sheet:\r\n if (!filter.geometry.surfaces)\r\n accepted = undefined;\r\n break;\r\n case BRepEntity.Type.Solid:\r\n if (!filter.geometry.solids)\r\n accepted = undefined;\r\n break;\r\n default:\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (undefined === accepted)\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const requestProps: ElementGeometryRequest = {\r\n onGeometry,\r\n elementId,\r\n };\r\n\r\n if (DbResult.BE_SQLITE_OK !== this.iModel.elementGeometryRequest(requestProps))\r\n return undefined;\r\n\r\n return accepted;\r\n }\r\n\r\n public async updateProjectExtents(extents: Range3dProps): Promise<void> {\r\n const newExtents = new Range3d();\r\n newExtents.setFromJSON(extents);\r\n\r\n if (newExtents.isNull)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Invalid project extents\");\r\n\r\n this.iModel.updateProjectExtents(newExtents);\r\n\r\n // Set source from calculated to user so connectors preserve the change.\r\n const unitsProps: FilePropertyProps = { name: \"Units\", namespace: \"dgn_Db\" };\r\n const unitsStr = this.iModel.queryFilePropertyString(unitsProps);\r\n\r\n if (undefined !== unitsStr) {\r\n const unitsVal = JSON.parse(unitsStr);\r\n const calculated = 1;\r\n\r\n if (calculated !== unitsVal.extentsSource) {\r\n unitsVal.extentsSource = calculated;\r\n this.iModel.saveFileProperty(unitsProps, JSON.stringify(unitsVal));\r\n }\r\n }\r\n }\r\n\r\n public async updateEcefLocation(ecefLocation: EcefLocationProps): Promise<void> {\r\n // Clear GCS that caller already determined was invalid...\r\n this.iModel.deleteFileProperty({ name: \"DgnGCS\", namespace: \"dgn_Db\" });\r\n\r\n const newEcefLocation = new EcefLocation(ecefLocation);\r\n this.iModel.updateEcefLocation(newEcefLocation);\r\n }\r\n}\r\n\r\ninterface ElementGeometryCacheRequestProps {\r\n id?: Id64String;\r\n}\r\n\r\ninterface ElementGeometryCacheResponseProps {\r\n status: BentleyStatus;\r\n numGeom?: number;\r\n numPart?: number;\r\n numSolid?: number;\r\n numSurface?: number;\r\n numCurve?: number;\r\n numOther?: number;\r\n}\r\n\r\ninterface SubEntityGeometryResponseProps {\r\n /** The face, edge, or vertex geometry */\r\n geometry: ElementGeometryDataEntry;\r\n /** The face or edge range box for the sub-entity geometry stored as 6 values for low/high */\r\n range?: Float64Array;\r\n /** Category id for geometry. */\r\n category?: Id64String;\r\n /** SubCategory id for geometry. */\r\n subCategory?: Id64String;\r\n /** Material id for geometry. */\r\n material?: Id64String;\r\n /** color of geometry. */\r\n color?: ColorDefProps;\r\n /** transparency of geometry. */\r\n transparency?: number;\r\n /** weight of geometry. */\r\n weight?: number;\r\n}\r\n\r\ntype GeometrySummaryFunction = (info: BRepEntityType[]) => void;\r\ntype SubEntityGeometryFunction = (info: SubEntityGeometryResponseProps) => void;\r\ntype SubEntityParameterRangeFunction = (info: FaceParameterRangeProps | EdgeParameterRangeProps) => void;\r\ntype SubEntityEvaluateFunction = (info: EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps) => void;\r\ntype SubEntityArrayFunction = (info: SubEntityProps[]) => void;\r\ntype SubEntityLocationArrayFunction = (info: SubEntityLocationProps[]) => void;\r\ntype SubEntityLocationFunction = (info: SubEntityLocationProps) => void;\r\ntype PointInsideFunction = (info: PointInsideResultProps[]) => void;\r\ntype YesNoFunction = (info: boolean) => void;\r\n\r\ninterface GeometrySummaryRequestProps {\r\n /** Callback for result */\r\n onResult: GeometrySummaryFunction;\r\n}\r\n\r\ninterface SubEntityGeometryRequestProps {\r\n /** Sub-entity to return geometry for */\r\n subEntity: SubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityGeometryFunction;\r\n}\r\n\r\ninterface SubEntityParameterRangeRequestProps {\r\n /** Sub-entity to query */\r\n subEntity: SubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityParameterRangeFunction;\r\n}\r\n\r\ninterface SubEntityEvaluateRequestProps {\r\n /** Sub-entity to query */\r\n subEntity: SubEntityProps;\r\n /** Face or edge u parameter to evaluate */\r\n uParam?: number;\r\n /** Face v parameter to evaluate */\r\n vParam?: number;\r\n /** Callback for result */\r\n onResult: SubEntityEvaluateFunction;\r\n}\r\n\r\nenum QuerySubEntity {\r\n /** Return whether the supplied face has a planar surface */\r\n PlanarFace = 0,\r\n /** Return whether the angle between the normals of the supplied edge's faces never exceeds the internal smooth angle tolerance along the length of the edge */\r\n SmoothEdge = 1,\r\n /** Return whether the supplied sub-entity is a laminar edge of a sheet body, i.e. boundary of a single face */\r\n LaminarEdge = 2,\r\n /** Return whether the supplied sub-entity is a linear edge */\r\n LinearEdge = 3,\r\n /** Return whether the angle between the normals of the supplied vertices's edges never exceeds the internal smooth angle tolerance along the length of the edge */\r\n SmoothVertex = 4,\r\n}\r\n\r\ninterface QuerySubEntityRequestProps {\r\n /** Sub-entity to test */\r\n subEntity: SubEntityProps;\r\n /** What to check */\r\n query: QuerySubEntity;\r\n /** Callback for result */\r\n onResult: YesNoFunction;\r\n}\r\n\r\nenum QueryBody {\r\n /** Return whether the geometric primitive index is a disjoint body */\r\n DisjointBody = 0,\r\n /** Return whether the geometric primitive index is a sheet body with a single planar face */\r\n SingleFacePlanarSheet = 1,\r\n /** Return whether the geometric primitive index is a sheet or solid entity that has all planar faces */\r\n OnlyPlanarFaces = 2,\r\n /** Return whether the geometric primitive index is a body with any edge that is non-linear or any face that is non-planar */\r\n CurvedFaceOrEdge = 3,\r\n}\r\n\r\ninterface QueryBodyRequestProps {\r\n /** Geometric primitive index to test */\r\n index: number;\r\n /** What to check */\r\n query: QueryBody;\r\n /** Callback for result */\r\n onResult: YesNoFunction;\r\n}\r\n\r\ninterface BodySubEntitiesRequestProps {\r\n /** What type of sub-entities to return, ex. faces of edge. */\r\n type: SubEntityType;\r\n /** Option to return only first sub-entity of each body instead of all sub-entities. */\r\n firstOnly?: true;\r\n /** Callback for result */\r\n onResult: SubEntityArrayFunction;\r\n}\r\n\r\ninterface ConnectedSubEntityRequestProps {\r\n /** Sub-entity to return connected sub-entities for */\r\n subEntity: SubEntityProps;\r\n /** What type of connected sub-entities to return, ex. faces of edge. */\r\n type: SubEntityType;\r\n /** Options for returning connected edges and adjacent faces. */\r\n options?: ConnectedSubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityArrayFunction;\r\n}\r\n\r\ninterface LocateSubEntityRequestProps {\r\n /** Space point for boresite origin */\r\n point: XYZProps;\r\n /** Vector for bosite direction */\r\n direction: XYZProps;\r\n /** The maximum number of faces, edges, and vertices to return */\r\n options: LocateSubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationArrayFunction;\r\n}\r\n\r\ninterface LocateFaceRequestProps {\r\n /** The face to return the ray intersection for */\r\n subEntity: SubEntityProps;\r\n /** Space point for boresite origin */\r\n point: XYZProps;\r\n /** Vector for bosite direction */\r\n direction: XYZProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationArrayFunction;\r\n}\r\n\r\ninterface ClosestSubEntityRequestProps {\r\n /** Space point */\r\n point: XYZProps;\r\n /** Optional direction for choosing face from edge or vertex hit... */\r\n direction?: XYZProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationFunction;\r\n}\r\n\r\ninterface ClosestPointRequestProps {\r\n /** Space point */\r\n point: XYZProps;\r\n /** The face or edge sub-entity to return closest point for */\r\n subEntity: SubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationFunction;\r\n}\r\n\r\ninterface PointInsideRequestProps {\r\n /** Space point */\r\n point: XYZProps;\r\n /** Callback for result */\r\n onResult: PointInsideFunction;\r\n}\r\n\r\nenum OperationType {\r\n GeometrySummary = 0,\r\n SubEntityGeometry = 1,\r\n SubEntityParameterRange = 2,\r\n SubEntityEvaluate = 3,\r\n SubEntityQuery = 4,\r\n BodyQuery = 5,\r\n BodySubEntities = 6,\r\n ConnectedSubEntity = 7,\r\n LocateSubEntity = 8,\r\n LocateFace = 9,\r\n ClosestSubEntity = 10,\r\n ClosestFace = 11,\r\n ClosestPoint = 12,\r\n PointInside = 13,\r\n BooleanOp = 14,\r\n SewSheets = 15,\r\n ThickenSheets = 16,\r\n OffsetFaces = 17,\r\n OffsetEdges = 18,\r\n HollowFaces = 19,\r\n SweepFaces = 20,\r\n SpinFaces = 21,\r\n DeleteSubEntity = 22,\r\n TransformSubEntity = 23,\r\n Blend = 24,\r\n Chamfer = 25,\r\n Cut = 26, // TODO\r\n Emboss = 27, // TODO\r\n Imprint = 28, // TODO\r\n SweepBody = 29, // TODO\r\n SpinBody = 30, // TODO\r\n SweepPath = 31, // TODO\r\n Loft = 32, // TODO\r\n}\r\n\r\ninterface ElementGeometryCacheOperationRequestProps {\r\n /** Target element id, tool element ids can be supplied by parameters... */\r\n id: Id64String;\r\n /** Requested operation */\r\n op: OperationType;\r\n /** Parameters for operation */\r\n params?: GeometrySummaryRequestProps | SubEntityGeometryRequestProps | SubEntityParameterRangeRequestProps | SubEntityEvaluateRequestProps | QuerySubEntityRequestProps | QueryBodyRequestProps | BodySubEntitiesRequestProps | ConnectedSubEntityRequestProps | LocateSubEntityRequestProps | LocateFaceRequestProps | ClosestSubEntityRequestProps | ClosestPointRequestProps | PointInsideRequestProps| BooleanOperationProps | SewSheetProps | ThickenSheetProps | OffsetFacesProps | OffsetEdgesProps | HollowFacesProps | SweepFacesProps | SpinFacesProps | DeleteSubEntityProps | TransformSubEntityProps | BlendEdgesProps | ChamferEdgesProps;\r\n /** Callback for result when element's geometry stream is requested in flatbuffer or graphic formats */\r\n onGeometry?: ElementGeometryFunction;\r\n}\r\n\r\n/** @alpha */\r\nexport class SolidModelingCommand extends BasicManipulationCommand implements SolidModelingCommandIpc {\r\n public static override commandId = editorBuiltInCmdIds.cmdSolidModeling;\r\n\r\n private async updateElementGeometryCache(props: ElementGeometryCacheRequestProps): Promise<ElementGeometryCacheResponseProps> {\r\n return this.iModel.nativeDb.updateElementGeometryCache(props);\r\n }\r\n\r\n public async createElementGeometryCache(id: Id64String, filter?: ElementGeometryCacheFilter): Promise<boolean> {\r\n const result = await this.updateElementGeometryCache({ id });\r\n if (BentleyStatus.SUCCESS !== result.status)\r\n return false;\r\n\r\n if (undefined === filter)\r\n return true;\r\n\r\n if (filter.minGeom && (undefined === result.numGeom || filter.minGeom > result.numGeom))\r\n return false;\r\n\r\n if (filter.maxGeom && (undefined === result.numGeom || filter.maxGeom < result.numGeom))\r\n return false;\r\n\r\n if (!filter.parts && (result.numPart ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.curves && (result.numCurve ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.surfaces && (result.numSurface ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.solids && (result.numSolid ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.other && (result.numOther ?? 0 > 0))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public async clearElementGeometryCache(): Promise<void> {\r\n await this.updateElementGeometryCache({});\r\n }\r\n\r\n public async summarizeElementGeometryCache(id: Id64String): Promise<BRepEntityType[] | undefined> {\r\n let accepted: BRepEntityType[] | undefined;\r\n const onResult: GeometrySummaryFunction = (info: BRepEntityType[]): void => {\r\n accepted = info;\r\n };\r\n const params: GeometrySummaryRequestProps = { onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.GeometrySummary, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n private requestSubEntityGeometry(id: Id64String, subEntity: SubEntityProps): SubEntityGeometryResponseProps | undefined {\r\n let accepted: SubEntityGeometryResponseProps | undefined;\r\n const onResult: SubEntityGeometryFunction = (info: SubEntityGeometryResponseProps): void => {\r\n accepted = info;\r\n };\r\n const params: SubEntityGeometryRequestProps = { subEntity, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityGeometry, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getSubEntityGeometry(id: Id64String, subEntity: SubEntityProps, opts: Omit<ElementGeometryResultOptions, \"writeChanges\" | \"insertProps\">): Promise<SubEntityGeometryProps | undefined> {\r\n const geometryProps = this.requestSubEntityGeometry(id, subEntity);\r\n if (undefined === geometryProps?.geometry || undefined === geometryProps?.category)\r\n return undefined;\r\n\r\n const resultProps: SubEntityGeometryProps = {};\r\n\r\n if (opts.wantGeometry)\r\n resultProps.geometry = geometryProps.geometry;\r\n\r\n if (opts.wantRange)\r\n resultProps.range = (geometryProps?.range ? ElementGeometry.toElementAlignedBox3d(geometryProps?.range) : undefined);\r\n\r\n if (opts.wantAppearance) {\r\n const appearance: SubEntityAppearanceProps = { category: geometryProps.category };\r\n\r\n appearance.subCategory = geometryProps.subCategory;\r\n appearance.material = geometryProps.material;\r\n appearance.color = geometryProps.color;\r\n appearance.transparency = geometryProps.transparency;\r\n appearance.weight = geometryProps.weight;\r\n\r\n resultProps.appearance = appearance;\r\n }\r\n\r\n if (!opts.wantGraphic)\r\n return resultProps;\r\n\r\n const requestId = opts.requestId ? opts.requestId : `SubEntity:${id}-${subEntity.id}`;\r\n const toleranceLog10 = (opts.chordTolerance ? Math.floor(Math.log10(opts.chordTolerance)) : -2);\r\n\r\n const requestProps: DynamicGraphicsRequest3dProps = {\r\n id: requestId,\r\n modelId: this.iModel.iModelId,\r\n toleranceLog10,\r\n type: \"3d\",\r\n placement: { origin: Point3d.createZero(), angles: YawPitchRollAngles.createDegrees(0, 0, 0) },\r\n categoryId: geometryProps.category,\r\n geometry: { format: \"flatbuffer\", data: [geometryProps.geometry] },\r\n };\r\n\r\n resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);\r\n\r\n return resultProps;\r\n }\r\n\r\n public async getSubEntityParameterRange(id: Id64String, subEntity: SubEntityProps): Promise<FaceParameterRangeProps | EdgeParameterRangeProps | undefined> {\r\n let accepted: FaceParameterRangeProps | EdgeParameterRangeProps | undefined;\r\n const onResult: SubEntityParameterRangeFunction = (info: FaceParameterRangeProps | EdgeParameterRangeProps): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: SubEntityParameterRangeRequestProps = { subEntity, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityParameterRange, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async evaluateSubEntity(id: Id64String, subEntity: SubEntityProps, uParam?: number, vParam?: number): Promise<EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps | undefined> {\r\n let accepted: EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps | undefined;\r\n const onResult: SubEntityEvaluateFunction = (info: EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: SubEntityEvaluateRequestProps = { subEntity, uParam, vParam, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityEvaluate, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n private async subEntityQuery(id: Id64String, subEntity: SubEntityProps, query: QuerySubEntity): Promise<boolean> {\r\n let accepted = false;\r\n const onResult: YesNoFunction = (info: boolean): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: QuerySubEntityRequestProps = { subEntity, query, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityQuery, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async isPlanarFace(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.PlanarFace);\r\n }\r\n\r\n public async isSmoothEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.SmoothEdge);\r\n }\r\n\r\n public async isLaminarEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.LaminarEdge);\r\n }\r\n\r\n public async isLinearEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.LinearEdge);\r\n }\r\n\r\n public async isSmoothVertex(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.SmoothVertex);\r\n }\r\n\r\n private async bodyQuery(id: Id64String, index: number, query: QueryBody): Promise<boolean> {\r\n let accepted = false;\r\n const onResult: YesNoFunction = (info: boolean): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: QueryBodyRequestProps = { index, query, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.BodyQuery, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async isDisjointBody(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.DisjointBody);\r\n }\r\n\r\n public async isSingleFacePlanarSheet(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.SingleFacePlanarSheet);\r\n }\r\n\r\n public async hasOnlyPlanarFaces(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.OnlyPlanarFaces);\r\n }\r\n\r\n public async hasCurvedFaceOrEdge(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.CurvedFaceOrEdge);\r\n }\r\n\r\n public async getBodySubEntities(id: Id64String, type: SubEntityType, firstOnly?: true): Promise<SubEntityProps[] | undefined> {\r\n let accepted: SubEntityProps[] | undefined;\r\n const onResult: SubEntityArrayFunction = (info: SubEntityProps[]): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: BodySubEntitiesRequestProps = { type, firstOnly, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.BodySubEntities, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getConnectedSubEntities(id: Id64String, subEntity: SubEntityProps, type: SubEntityType, options?: ConnectedSubEntityProps): Promise<SubEntityProps[] | undefined> {\r\n let accepted: SubEntityProps[] | undefined;\r\n const onResult: SubEntityArrayFunction = (info: SubEntityProps[]): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: ConnectedSubEntityRequestProps = { subEntity, type, options, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ConnectedSubEntity, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async locateSubEntities(id: Id64String, point: XYZProps, direction: XYZProps, options: LocateSubEntityProps): Promise<SubEntityLocationProps[] | undefined> {\r\n let accepted: SubEntityLocationProps[] | undefined;\r\n const onResult: SubEntityLocationArrayFunction = (info: SubEntityLocationProps[]): void => {\r\n accepted = info;\r\n };\r\n const params: LocateSubEntityRequestProps = { point, direction, options, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.LocateSubEntity, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async locateFace(id: Id64String, subEntity: SubEntityProps, point: XYZProps, direction: XYZProps): Promise<SubEntityLocationProps[] | undefined> {\r\n let accepted: SubEntityLocationProps[] | undefined;\r\n const onResult: SubEntityLocationArrayFunction = (info: SubEntityLocationProps[]): void => {\r\n accepted = info;\r\n };\r\n const params: LocateFaceRequestProps = { subEntity, point, direction, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.LocateFace, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getClosestSubEntity(id: Id64String, point: XYZProps): Promise<SubEntityLocationProps | undefined> {\r\n let accepted: SubEntityLocationProps | undefined;\r\n const onResult: SubEntityLocationFunction = (info: SubEntityLocationProps): void => {\r\n accepted = info;\r\n };\r\n const params: ClosestSubEntityRequestProps = { point, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ClosestSubEntity, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getClosestFace(id: Id64String, point: XYZProps, direction?: XYZProps): Promise<SubEntityLocationProps | undefined> {\r\n let accepted: SubEntityLocationProps | undefined;\r\n const onResult: SubEntityLocationFunction = (info: SubEntityLocationProps): void => {\r\n accepted = info;\r\n };\r\n const params: ClosestSubEntityRequestProps = { point, direction, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ClosestFace, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getClosestPoint(id: Id64String, subEntity: SubEntityProps, point: XYZProps): Promise<SubEntityLocationProps | undefined> {\r\n let accepted: SubEntityLocationProps | undefined;\r\n const onResult: SubEntityLocationFunction = (info: SubEntityLocationProps): void => {\r\n accepted = info;\r\n };\r\n const params: ClosestPointRequestProps = { subEntity, point, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ClosestPoint, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async isPointInside(id: Id64String, point: XYZProps): Promise<PointInsideResultProps[] | undefined> {\r\n let accepted: PointInsideResultProps[] | undefined;\r\n const onResult: PointInsideFunction = (info: PointInsideResultProps[]): void => {\r\n accepted = info;\r\n };\r\n const params: PointInsideRequestProps = { point, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.PointInside, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n private async getElementGeometryResults(id: Id64String, info: ElementGeometryInfo, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n if (0 === info.entryArray.length || undefined === info.categoryId || undefined === info.bbox)\r\n return undefined;\r\n\r\n const resultProps: ElementGeometryResultProps = {};\r\n\r\n if (opts.wantGeometry)\r\n resultProps.geometry = info;\r\n\r\n if (opts.wantRange)\r\n resultProps.range = ElementGeometry.toElementAlignedBox3d(info.bbox);\r\n\r\n if (opts.wantAppearance)\r\n resultProps.categoryId = info.categoryId;\r\n\r\n if (!(opts.wantGraphic || opts.writeChanges))\r\n return resultProps;\r\n\r\n let placement: Placement3dProps;\r\n const sourceToWorld = (undefined === info?.sourceToWorld ? undefined : ElementGeometry.toTransform(info.sourceToWorld));\r\n if (undefined === sourceToWorld) {\r\n placement = { origin: Point3d.createZero(), angles: YawPitchRollAngles.createDegrees(0, 0, 0) };\r\n } else {\r\n const origin = sourceToWorld.getOrigin();\r\n const angles = new YawPitchRollAngles();\r\n YawPitchRollAngles.createFromMatrix3d(sourceToWorld.matrix, angles);\r\n placement = { origin, angles };\r\n }\r\n\r\n if (opts.writeChanges) {\r\n if (opts.insertProps) {\r\n opts.insertProps.placement = placement; // entryArray is local to this placement...\r\n delete opts.insertProps.geom; // Ignore geometry if present...\r\n resultProps.elementId = await this.insertGeometricElement(opts.insertProps, { entryArray: info.entryArray });\r\n } else {\r\n const updateProps = this.iModel.elements.getElementProps<GeometricElementProps>({ id });\r\n updateProps.category = info.categoryId; // allow category change...\r\n updateProps.placement = placement; // entryArray is local to this placement...\r\n await this.updateGeometricElement(updateProps, { entryArray: info.entryArray });\r\n resultProps.elementId = id;\r\n }\r\n }\r\n\r\n if (!opts.wantGraphic)\r\n return resultProps;\r\n\r\n const requestId = opts.requestId ? opts.requestId : `EGCacheOp:${id}`;\r\n const toleranceLog10 = (opts.chordTolerance ? Math.floor(Math.log10(opts.chordTolerance)) : -2);\r\n\r\n const requestProps: DynamicGraphicsRequest3dProps = {\r\n id: requestId,\r\n modelId: this.iModel.iModelId,\r\n toleranceLog10,\r\n type: \"3d\",\r\n placement,\r\n categoryId: info.categoryId,\r\n geometry: { format: \"flatbuffer\", data: info.entryArray },\r\n };\r\n\r\n resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);\r\n\r\n return resultProps;\r\n }\r\n\r\n private async doElementGeometryOperation(props: ElementGeometryCacheOperationRequestProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n let accepted: ElementGeometryInfo | undefined;\r\n const onGeometry: ElementGeometryFunction = (info: ElementGeometryInfo): void => {\r\n accepted = info;\r\n };\r\n\r\n props.onGeometry = onGeometry;\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n\r\n if (undefined === accepted)\r\n return undefined;\r\n\r\n return this.getElementGeometryResults(props.id, accepted, opts);\r\n }\r\n\r\n public async booleanOperation(id: Id64String, params: BooleanOperationProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.BooleanOp, params };\r\n const resultProps = await this.doElementGeometryOperation(props, opts);\r\n\r\n // target insert = keep tools, target update = delete tools...\r\n if (undefined !== resultProps && opts.writeChanges && undefined === opts.insertProps) {\r\n for (const toolId of params.tools)\r\n this.iModel.elements.deleteElement(toolId);\r\n }\r\n\r\n return resultProps;\r\n }\r\n\r\n public async sewSheets(id: Id64String, params: SewSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SewSheets, params };\r\n const resultProps = await this.doElementGeometryOperation(props, opts);\r\n\r\n // target insert = keep tools, target update = delete tools...\r\n if (undefined !== resultProps && opts.writeChanges && undefined === opts.insertProps) {\r\n for (const toolId of params.tools)\r\n this.iModel.elements.deleteElement(toolId);\r\n }\r\n\r\n return resultProps;\r\n }\r\n\r\n public async thickenSheets(id: Id64String, params: ThickenSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ThickenSheets, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async offsetFaces(id: Id64String, params: OffsetFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.OffsetFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async offsetEdges(id: Id64String, params: OffsetEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.OffsetEdges, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async hollowFaces(id: Id64String, params: HollowFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.HollowFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async sweepFaces(id: Id64String, params: SweepFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SweepFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async spinFaces(id: Id64String, params: SpinFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SpinFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async deleteSubEntities(id: Id64String, params: DeleteSubEntityProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.DeleteSubEntity, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async transformSubEntities(id: Id64String, params: TransformSubEntityProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.TransformSubEntity, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async blendEdges(id: Id64String, params: BlendEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Blend, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async chamferEdges(id: Id64String, params: ChamferEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Chamfer, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"EditBuiltInCommand.js","sourceRoot":"","sources":["../../src/EditBuiltInCommand.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { BentleyStatus, CompressedId64Set, DbResult, Id64, Id64Arg, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Matrix3d, Matrix3dProps, Point3d, PointString3d, Range3d, Range3dProps, Transform, TransformProps, XYZProps, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\r\nimport { BRepEntity, ColorDefProps, DynamicGraphicsRequest3dProps, EcefLocation, EcefLocationProps, ElementGeometry, ElementGeometryDataEntry, ElementGeometryFunction, ElementGeometryInfo, ElementGeometryRequest, ElementGeometryUpdate, FilePropertyProps, GeometricElementProps, GeometryPartProps, GeometryStreamBuilder, IModelError, Placement3dProps } from \"@itwin/core-common\";\r\nimport { BasicManipulationCommandIpc, BlendEdgesProps, BooleanOperationProps, BRepEntityType, ChamferEdgesProps, ConnectedSubEntityProps, CutProps, DeleteSubEntityProps, EdgeParameterRangeProps, editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, EmbossProps, EvaluatedEdgeProps, EvaluatedFaceProps, EvaluatedVertexProps, FaceParameterRangeProps, FlatBufferGeometricElementData, FlatBufferGeometryFilter, FlatBufferGeometryPartData, HollowFacesProps, ImprintProps, LocateSubEntityProps, LoftProps, OffsetEdgesProps, OffsetFacesProps, PointInsideResultProps, SewSheetProps, SolidModelingCommandIpc, SpinFacesProps, SubEntityAppearanceProps, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps, SubEntityType, SweepFacesProps, SweepPathProps, ThickenSheetProps, TransformSubEntityProps } from \"@itwin/editor-common\";\r\nimport { EditCommand } from \"./EditCommand\";\r\n\r\n/** @alpha */\r\nexport class BasicManipulationCommand extends EditCommand implements BasicManipulationCommandIpc {\r\n public static override commandId = editorBuiltInCmdIds.cmdBasicManipulation;\r\n\r\n public constructor(iModel: IModelDb, protected _str: string) { super(iModel); }\r\n\r\n public async deleteElements(ids: CompressedId64Set): Promise<IModelStatus> {\r\n const idSet = CompressedId64Set.decompressSet(ids);\r\n await this.iModel.locks.acquireLocks({ exclusive: idSet });\r\n\r\n for (const id of idSet)\r\n this.iModel.elements.deleteElement(id);\r\n\r\n return IModelStatus.Success;\r\n }\r\n\r\n public async transformPlacement(ids: CompressedId64Set, transProps: TransformProps): Promise<IModelStatus> {\r\n const idSet = CompressedId64Set.decompressSet(ids);\r\n await this.iModel.locks.acquireLocks({ exclusive: idSet });\r\n\r\n const transform = Transform.fromJSON(transProps);\r\n\r\n for (const id of idSet) {\r\n const element = this.iModel.elements.getElement<GeometricElement>(id);\r\n\r\n if (!element.placement.isValid)\r\n continue; // Ignore assembly parents w/o geometry, etc...\r\n\r\n element.placement.multiplyTransform(transform);\r\n this.iModel.elements.updateElement(element.toJSON());\r\n }\r\n\r\n return IModelStatus.Success;\r\n }\r\n\r\n public async rotatePlacement(ids: CompressedId64Set, matrixProps: Matrix3dProps, aboutCenter: boolean): Promise<IModelStatus> {\r\n const idSet = CompressedId64Set.decompressSet(ids);\r\n await this.iModel.locks.acquireLocks({ exclusive: idSet });\r\n\r\n const matrix = Matrix3d.fromJSON(matrixProps);\r\n\r\n for (const id of idSet) {\r\n const element = this.iModel.elements.getElement<GeometricElement>(id);\r\n\r\n if (!element.placement.isValid)\r\n continue; // Ignore assembly parents w/o geometry, etc...\r\n\r\n const fixedPoint = aboutCenter ? element.placement.calculateRange().center : Point3d.createFrom(element.placement.origin);\r\n const transform = Transform.createFixedPointAndMatrix(fixedPoint, matrix);\r\n\r\n element.placement.multiplyTransform(transform);\r\n this.iModel.elements.updateElement(element.toJSON());\r\n }\r\n\r\n return IModelStatus.Success;\r\n }\r\n\r\n public async insertGeometricElement(props: GeometricElementProps, data?: FlatBufferGeometricElementData): Promise<Id64String> {\r\n await this.iModel.locks.acquireLocks({ shared: props.model });\r\n\r\n const newElem = this.iModel.elements.createElement(props);\r\n const newId = newElem.insert();\r\n if (undefined === data)\r\n return newId;\r\n\r\n const updateProps: ElementGeometryUpdate = {\r\n elementId: newId,\r\n entryArray: data.entryArray,\r\n isWorld: data.isWorld,\r\n viewIndependent: data.viewIndependent,\r\n };\r\n\r\n const status = this.iModel.elementGeometryUpdate(updateProps);\r\n if (DbResult.BE_SQLITE_OK !== status) {\r\n this.iModel.elements.deleteElement(newId); // clean up element...\r\n throw new IModelError(status, \"Error updating element geometry\");\r\n }\r\n\r\n return newId;\r\n }\r\n\r\n public async insertGeometryPart(props: GeometryPartProps, data?: FlatBufferGeometryPartData): Promise<Id64String> {\r\n await this.iModel.locks.acquireLocks({ shared: props.model });\r\n\r\n if (undefined === props.geom && undefined !== data) {\r\n const builder = new GeometryStreamBuilder();\r\n builder.appendGeometry(PointString3d.create(Point3d.createZero()));\r\n props.geom = builder.geometryStream; // can't insert a DgnGeometryPart without geometry...\r\n }\r\n\r\n const newElem = this.iModel.elements.createElement(props);\r\n const newId = newElem.insert();\r\n if (undefined === data)\r\n return newId;\r\n\r\n const updateProps: ElementGeometryUpdate = {\r\n elementId: newId,\r\n entryArray: data.entryArray,\r\n is2dPart: data.is2dPart,\r\n };\r\n\r\n const status = this.iModel.elementGeometryUpdate(updateProps);\r\n if (DbResult.BE_SQLITE_OK !== status) {\r\n this.iModel.elements.deleteElement(newId); // clean up element...\r\n throw new IModelError(status, \"Error updating part geometry\");\r\n }\r\n\r\n return newId;\r\n }\r\n\r\n public async updateGeometricElement(propsOrId: GeometricElementProps | Id64String, data?: FlatBufferGeometricElementData): Promise<void> {\r\n let props: GeometricElementProps;\r\n if (typeof propsOrId === \"string\") {\r\n if (undefined === data)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Flatbuffer data required for update by id\");\r\n props = this.iModel.elements.getElementProps<GeometricElementProps>(propsOrId);\r\n } else {\r\n props = propsOrId;\r\n }\r\n\r\n if (undefined === props.id)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Element id required for update\");\r\n\r\n await this.iModel.locks.acquireLocks({ exclusive: props.id });\r\n\r\n this.iModel.elements.updateElement(props);\r\n if (undefined === data)\r\n return;\r\n\r\n const updateProps: ElementGeometryUpdate = {\r\n elementId: props.id,\r\n entryArray: data.entryArray,\r\n isWorld: data.isWorld,\r\n viewIndependent: data.viewIndependent,\r\n };\r\n\r\n const status = this.iModel.elementGeometryUpdate(updateProps);\r\n if (DbResult.BE_SQLITE_OK !== status) {\r\n throw new IModelError(status, \"Error updating element geometry\");\r\n }\r\n }\r\n\r\n public async requestElementGeometry(elementId: Id64String, filter?: FlatBufferGeometryFilter): Promise<ElementGeometryInfo | undefined> {\r\n let accepted: ElementGeometryInfo | undefined;\r\n\r\n const onGeometry: ElementGeometryFunction = (info: ElementGeometryInfo): void => {\r\n accepted = info;\r\n\r\n if (undefined !== filter) {\r\n let numDisplayable = 0;\r\n\r\n for (const entry of info.entryArray) {\r\n if (!ElementGeometry.isDisplayableEntry(entry))\r\n continue;\r\n\r\n numDisplayable++;\r\n if (filter.maxDisplayable && numDisplayable > filter.maxDisplayable) {\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (filter.reject && filter.reject.some((opcode) => entry.opcode === opcode)) {\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (filter.accept && !filter.accept.some((opcode) => entry.opcode === opcode)) {\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (undefined === filter.geometry)\r\n continue;\r\n\r\n let entityType;\r\n if (filter.geometry.curves && !(filter.geometry.surfaces || filter.geometry.solids))\r\n entityType = ElementGeometry.isCurve(entry) ? BRepEntity.Type.Wire : undefined; // skip surface/solid opcodes...\r\n else\r\n entityType = ElementGeometry.getBRepEntityType(entry);\r\n\r\n switch (entityType) {\r\n case BRepEntity.Type.Wire:\r\n if (!filter.geometry.curves)\r\n accepted = undefined;\r\n break;\r\n case BRepEntity.Type.Sheet:\r\n if (!filter.geometry.surfaces)\r\n accepted = undefined;\r\n break;\r\n case BRepEntity.Type.Solid:\r\n if (!filter.geometry.solids)\r\n accepted = undefined;\r\n break;\r\n default:\r\n accepted = undefined;\r\n break;\r\n }\r\n\r\n if (undefined === accepted)\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const requestProps: ElementGeometryRequest = {\r\n onGeometry,\r\n elementId,\r\n };\r\n\r\n if (DbResult.BE_SQLITE_OK !== this.iModel.elementGeometryRequest(requestProps))\r\n return undefined;\r\n\r\n return accepted;\r\n }\r\n\r\n public async updateProjectExtents(extents: Range3dProps): Promise<void> {\r\n const newExtents = new Range3d();\r\n newExtents.setFromJSON(extents);\r\n\r\n if (newExtents.isNull)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Invalid project extents\");\r\n\r\n await this.iModel.acquireSchemaLock();\r\n\r\n this.iModel.updateProjectExtents(newExtents);\r\n\r\n // Set source from calculated to user so connectors preserve the change.\r\n const unitsProps: FilePropertyProps = { name: \"Units\", namespace: \"dgn_Db\" };\r\n const unitsStr = this.iModel.queryFilePropertyString(unitsProps);\r\n\r\n if (undefined !== unitsStr) {\r\n const unitsVal = JSON.parse(unitsStr);\r\n const calculated = 1;\r\n\r\n if (calculated !== unitsVal.extentsSource) {\r\n unitsVal.extentsSource = calculated;\r\n this.iModel.saveFileProperty(unitsProps, JSON.stringify(unitsVal));\r\n }\r\n }\r\n }\r\n\r\n public async updateEcefLocation(ecefLocation: EcefLocationProps): Promise<void> {\r\n await this.iModel.acquireSchemaLock();\r\n\r\n // Clear GCS that caller already determined was invalid...\r\n this.iModel.deleteFileProperty({ name: \"DgnGCS\", namespace: \"dgn_Db\" });\r\n\r\n const newEcefLocation = new EcefLocation(ecefLocation);\r\n this.iModel.updateEcefLocation(newEcefLocation);\r\n }\r\n}\r\n\r\ninterface ElementGeometryCacheRequestProps {\r\n id?: Id64String;\r\n}\r\n\r\ninterface ElementGeometryCacheResponseProps {\r\n status: BentleyStatus;\r\n numGeom?: number;\r\n numPart?: number;\r\n numSolid?: number;\r\n numSurface?: number;\r\n numCurve?: number;\r\n numOther?: number;\r\n}\r\n\r\ninterface SubEntityGeometryResponseProps {\r\n /** The face, edge, or vertex geometry */\r\n geometry: ElementGeometryDataEntry;\r\n /** The face or edge range box for the sub-entity geometry stored as 6 values for low/high */\r\n range?: Float64Array;\r\n /** Category id for geometry. */\r\n category?: Id64String;\r\n /** SubCategory id for geometry. */\r\n subCategory?: Id64String;\r\n /** Material id for geometry. */\r\n material?: Id64String;\r\n /** color of geometry. */\r\n color?: ColorDefProps;\r\n /** transparency of geometry. */\r\n transparency?: number;\r\n /** weight of geometry. */\r\n weight?: number;\r\n}\r\n\r\ntype GeometrySummaryFunction = (info: BRepEntityType[]) => void;\r\ntype SubEntityGeometryFunction = (info: SubEntityGeometryResponseProps) => void;\r\ntype SubEntityParameterRangeFunction = (info: FaceParameterRangeProps | EdgeParameterRangeProps) => void;\r\ntype SubEntityEvaluateFunction = (info: EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps) => void;\r\ntype SubEntityArrayFunction = (info: SubEntityProps[]) => void;\r\ntype SubEntityLocationArrayFunction = (info: SubEntityLocationProps[]) => void;\r\ntype SubEntityLocationFunction = (info: SubEntityLocationProps) => void;\r\ntype PointInsideFunction = (info: PointInsideResultProps[]) => void;\r\ntype YesNoFunction = (info: boolean) => void;\r\n\r\ninterface GeometrySummaryRequestProps {\r\n /** Callback for result */\r\n onResult: GeometrySummaryFunction;\r\n}\r\n\r\ninterface SubEntityGeometryRequestProps {\r\n /** Sub-entity to return geometry for */\r\n subEntity: SubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityGeometryFunction;\r\n}\r\n\r\ninterface SubEntityParameterRangeRequestProps {\r\n /** Sub-entity to query */\r\n subEntity: SubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityParameterRangeFunction;\r\n}\r\n\r\ninterface SubEntityEvaluateRequestProps {\r\n /** Sub-entity to query */\r\n subEntity: SubEntityProps;\r\n /** Face or edge u parameter to evaluate */\r\n uParam?: number;\r\n /** Face v parameter to evaluate */\r\n vParam?: number;\r\n /** Callback for result */\r\n onResult: SubEntityEvaluateFunction;\r\n}\r\n\r\nenum QuerySubEntity {\r\n /** Return whether the supplied face has a planar surface */\r\n PlanarFace = 0,\r\n /** Return whether the angle between the normals of the supplied edge's faces never exceeds the internal smooth angle tolerance along the length of the edge */\r\n SmoothEdge = 1,\r\n /** Return whether the supplied sub-entity is a laminar edge of a sheet body, i.e. boundary of a single face */\r\n LaminarEdge = 2,\r\n /** Return whether the supplied sub-entity is a linear edge */\r\n LinearEdge = 3,\r\n /** Return whether the angle between the normals of the supplied vertices's edges never exceeds the internal smooth angle tolerance along the length of the edge */\r\n SmoothVertex = 4,\r\n /** Return whether the supplied sub-entity is a redundant edge (containing faces share surface) */\r\n RedundantEdge = 5,\r\n}\r\n\r\ninterface QuerySubEntityRequestProps {\r\n /** Sub-entity to test */\r\n subEntity: SubEntityProps;\r\n /** What to check */\r\n query: QuerySubEntity;\r\n /** Callback for result */\r\n onResult: YesNoFunction;\r\n}\r\n\r\nenum QueryBody {\r\n /** Return whether the geometric primitive index is a disjoint body */\r\n DisjointBody = 0,\r\n /** Return whether the geometric primitive index is a sheet body with a single planar face */\r\n SingleFacePlanarSheet = 1,\r\n /** Return whether the geometric primitive index is a sheet or solid entity that has all planar faces */\r\n OnlyPlanarFaces = 2,\r\n /** Return whether the geometric primitive index is a body with any edge that is non-linear or any face that is non-planar */\r\n CurvedFaceOrEdge = 3,\r\n /** Return whether the geometric primitive index is a planar sheet or wire body */\r\n PlanarBody = 4,\r\n}\r\n\r\ninterface QueryBodyRequestProps {\r\n /** Geometric primitive index to test */\r\n index: number;\r\n /** What to check */\r\n query: QueryBody;\r\n /** Callback for result */\r\n onResult: YesNoFunction;\r\n}\r\n\r\ninterface BodySubEntitiesRequestProps {\r\n /** What type of sub-entities to return, ex. faces of edge. */\r\n type: SubEntityType;\r\n /** Option to return only first sub-entity of each body instead of all sub-entities. */\r\n firstOnly?: true;\r\n /** Callback for result */\r\n onResult: SubEntityArrayFunction;\r\n}\r\n\r\ninterface ConnectedSubEntityRequestProps {\r\n /** Sub-entity to return connected sub-entities for */\r\n subEntity: SubEntityProps;\r\n /** What type of connected sub-entities to return, ex. faces of edge. */\r\n type: SubEntityType;\r\n /** Options for returning connected edges and adjacent faces. */\r\n options?: ConnectedSubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityArrayFunction;\r\n}\r\n\r\ninterface LocateSubEntityRequestProps {\r\n /** Space point for boresite origin */\r\n point: XYZProps;\r\n /** Vector for bosite direction */\r\n direction: XYZProps;\r\n /** The maximum number of faces, edges, and vertices to return */\r\n options: LocateSubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationArrayFunction;\r\n}\r\n\r\ninterface LocateFaceRequestProps {\r\n /** The face to return the ray intersection for */\r\n subEntity: SubEntityProps;\r\n /** Space point for boresite origin */\r\n point: XYZProps;\r\n /** Vector for bosite direction */\r\n direction: XYZProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationArrayFunction;\r\n}\r\n\r\ninterface ClosestSubEntityRequestProps {\r\n /** Space point */\r\n point: XYZProps;\r\n /** Optional direction for choosing face from edge or vertex hit... */\r\n direction?: XYZProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationFunction;\r\n}\r\n\r\ninterface ClosestPointRequestProps {\r\n /** Space point */\r\n point: XYZProps;\r\n /** The face or edge sub-entity to return closest point for */\r\n subEntity: SubEntityProps;\r\n /** Callback for result */\r\n onResult: SubEntityLocationFunction;\r\n}\r\n\r\ninterface PointInsideRequestProps {\r\n /** Space point */\r\n point: XYZProps;\r\n /** Callback for result */\r\n onResult: PointInsideFunction;\r\n}\r\n\r\nenum OperationType {\r\n GeometrySummary = 0,\r\n SubEntityGeometry = 1,\r\n SubEntityParameterRange = 2,\r\n SubEntityEvaluate = 3,\r\n SubEntityQuery = 4,\r\n BodyQuery = 5,\r\n BodySubEntities = 6,\r\n ConnectedSubEntity = 7,\r\n LocateSubEntity = 8,\r\n LocateFace = 9,\r\n ClosestSubEntity = 10,\r\n ClosestFace = 11,\r\n ClosestPoint = 12,\r\n PointInside = 13,\r\n BooleanOp = 14,\r\n SewSheets = 15,\r\n ThickenSheets = 16,\r\n OffsetFaces = 17,\r\n OffsetEdges = 18,\r\n HollowFaces = 19,\r\n SweepFaces = 20,\r\n SpinFaces = 21,\r\n DeleteSubEntity = 22,\r\n TransformSubEntity = 23,\r\n Blend = 24,\r\n Chamfer = 25,\r\n Cut = 26,\r\n Emboss = 27,\r\n Imprint = 28,\r\n SweepPath = 29,\r\n Loft = 30,\r\n}\r\n\r\ninterface ElementGeometryCacheOperationRequestProps {\r\n /** Target element id, tool element ids can be supplied by parameters... */\r\n id: Id64String;\r\n /** Requested operation */\r\n op: OperationType;\r\n /** Parameters for operation */\r\n params?: GeometrySummaryRequestProps | SubEntityGeometryRequestProps | SubEntityParameterRangeRequestProps | SubEntityEvaluateRequestProps | QuerySubEntityRequestProps | QueryBodyRequestProps | BodySubEntitiesRequestProps | ConnectedSubEntityRequestProps | LocateSubEntityRequestProps | LocateFaceRequestProps | ClosestSubEntityRequestProps | ClosestPointRequestProps | PointInsideRequestProps| BooleanOperationProps | SewSheetProps | ThickenSheetProps | CutProps | EmbossProps | ImprintProps | SweepPathProps | LoftProps | OffsetFacesProps | OffsetEdgesProps | HollowFacesProps | SweepFacesProps | SpinFacesProps | DeleteSubEntityProps | TransformSubEntityProps | BlendEdgesProps | ChamferEdgesProps;\r\n /** Callback for result when element's geometry stream is requested in flatbuffer or graphic formats */\r\n onGeometry?: ElementGeometryFunction;\r\n}\r\n\r\n/** @alpha */\r\nexport class SolidModelingCommand extends BasicManipulationCommand implements SolidModelingCommandIpc {\r\n public static override commandId = editorBuiltInCmdIds.cmdSolidModeling;\r\n\r\n private async updateElementGeometryCache(props: ElementGeometryCacheRequestProps): Promise<ElementGeometryCacheResponseProps> {\r\n return this.iModel.nativeDb.updateElementGeometryCache(props);\r\n }\r\n\r\n public async createElementGeometryCache(id: Id64String, filter?: ElementGeometryCacheFilter): Promise<boolean> {\r\n const result = await this.updateElementGeometryCache({ id });\r\n if (BentleyStatus.SUCCESS !== result.status)\r\n return false;\r\n\r\n if (undefined === filter)\r\n return true;\r\n\r\n if (filter.minGeom && (undefined === result.numGeom || filter.minGeom > result.numGeom))\r\n return false;\r\n\r\n if (filter.maxGeom && (undefined === result.numGeom || filter.maxGeom < result.numGeom))\r\n return false;\r\n\r\n if (!filter.parts && (result.numPart ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.curves && (result.numCurve ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.surfaces && (result.numSurface ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.solids && (result.numSolid ?? 0 > 0))\r\n return false;\r\n\r\n if (!filter.other && (result.numOther ?? 0 > 0))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public async clearElementGeometryCache(): Promise<void> {\r\n await this.updateElementGeometryCache({});\r\n }\r\n\r\n public async summarizeElementGeometryCache(id: Id64String): Promise<BRepEntityType[] | undefined> {\r\n let accepted: BRepEntityType[] | undefined;\r\n const onResult: GeometrySummaryFunction = (info: BRepEntityType[]): void => {\r\n accepted = info;\r\n };\r\n const params: GeometrySummaryRequestProps = { onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.GeometrySummary, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n private requestSubEntityGeometry(id: Id64String, subEntity: SubEntityProps): SubEntityGeometryResponseProps | undefined {\r\n let accepted: SubEntityGeometryResponseProps | undefined;\r\n const onResult: SubEntityGeometryFunction = (info: SubEntityGeometryResponseProps): void => {\r\n accepted = info;\r\n };\r\n const params: SubEntityGeometryRequestProps = { subEntity, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityGeometry, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getSubEntityGeometry(id: Id64String, subEntity: SubEntityProps, opts: Omit<ElementGeometryResultOptions, \"writeChanges\" | \"insertProps\">): Promise<SubEntityGeometryProps | undefined> {\r\n const geometryProps = this.requestSubEntityGeometry(id, subEntity);\r\n if (undefined === geometryProps?.geometry || undefined === geometryProps?.category)\r\n return undefined;\r\n\r\n const resultProps: SubEntityGeometryProps = {};\r\n\r\n if (opts.wantGeometry)\r\n resultProps.geometry = geometryProps.geometry;\r\n\r\n if (opts.wantRange)\r\n resultProps.range = (geometryProps?.range ? ElementGeometry.toElementAlignedBox3d(geometryProps?.range) : undefined);\r\n\r\n if (opts.wantAppearance) {\r\n const appearance: SubEntityAppearanceProps = { category: geometryProps.category };\r\n\r\n appearance.subCategory = geometryProps.subCategory;\r\n appearance.material = geometryProps.material;\r\n appearance.color = geometryProps.color;\r\n appearance.transparency = geometryProps.transparency;\r\n appearance.weight = geometryProps.weight;\r\n\r\n resultProps.appearance = appearance;\r\n }\r\n\r\n if (!opts.wantGraphic)\r\n return resultProps;\r\n\r\n const requestId = opts.requestId ? opts.requestId : `SubEntity:${id}-${subEntity.id}`;\r\n const toleranceLog10 = (opts.chordTolerance ? Math.floor(Math.log10(opts.chordTolerance)) : -2);\r\n\r\n const requestProps: DynamicGraphicsRequest3dProps = {\r\n id: requestId,\r\n modelId: this.iModel.iModelId,\r\n toleranceLog10,\r\n type: \"3d\",\r\n placement: { origin: Point3d.createZero(), angles: YawPitchRollAngles.createDegrees(0, 0, 0) },\r\n categoryId: geometryProps.category,\r\n elementId: id,\r\n geometry: { format: \"flatbuffer\", data: [geometryProps.geometry] },\r\n };\r\n\r\n resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);\r\n\r\n return resultProps;\r\n }\r\n\r\n public async getSubEntityParameterRange(id: Id64String, subEntity: SubEntityProps): Promise<FaceParameterRangeProps | EdgeParameterRangeProps | undefined> {\r\n let accepted: FaceParameterRangeProps | EdgeParameterRangeProps | undefined;\r\n const onResult: SubEntityParameterRangeFunction = (info: FaceParameterRangeProps | EdgeParameterRangeProps): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: SubEntityParameterRangeRequestProps = { subEntity, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityParameterRange, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async evaluateSubEntity(id: Id64String, subEntity: SubEntityProps, uParam?: number, vParam?: number): Promise<EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps | undefined> {\r\n let accepted: EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps | undefined;\r\n const onResult: SubEntityEvaluateFunction = (info: EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: SubEntityEvaluateRequestProps = { subEntity, uParam, vParam, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityEvaluate, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n private async subEntityQuery(id: Id64String, subEntity: SubEntityProps, query: QuerySubEntity): Promise<boolean> {\r\n let accepted = false;\r\n const onResult: YesNoFunction = (info: boolean): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: QuerySubEntityRequestProps = { subEntity, query, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SubEntityQuery, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async isPlanarFace(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.PlanarFace);\r\n }\r\n\r\n public async isSmoothEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.SmoothEdge);\r\n }\r\n\r\n public async isLaminarEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.LaminarEdge);\r\n }\r\n\r\n public async isLinearEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.LinearEdge);\r\n }\r\n\r\n public async isRedundantEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.RedundantEdge);\r\n }\r\n\r\n public async isSmoothVertex(id: Id64String, subEntity: SubEntityProps): Promise<boolean> {\r\n return this.subEntityQuery(id, subEntity, QuerySubEntity.SmoothVertex);\r\n }\r\n\r\n private async bodyQuery(id: Id64String, index: number, query: QueryBody): Promise<boolean> {\r\n let accepted = false;\r\n const onResult: YesNoFunction = (info: boolean): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: QueryBodyRequestProps = { index, query, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.BodyQuery, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async isDisjointBody(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.DisjointBody);\r\n }\r\n\r\n public async isPlanarBody(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.PlanarBody);\r\n }\r\n\r\n public async isSingleFacePlanarSheet(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.SingleFacePlanarSheet);\r\n }\r\n\r\n public async hasOnlyPlanarFaces(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.OnlyPlanarFaces);\r\n }\r\n\r\n public async hasCurvedFaceOrEdge(id: Id64String, index: number): Promise<boolean> {\r\n return this.bodyQuery(id, index, QueryBody.CurvedFaceOrEdge);\r\n }\r\n\r\n public async getBodySubEntities(id: Id64String, type: SubEntityType, firstOnly?: true): Promise<SubEntityProps[] | undefined> {\r\n let accepted: SubEntityProps[] | undefined;\r\n const onResult: SubEntityArrayFunction = (info: SubEntityProps[]): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: BodySubEntitiesRequestProps = { type, firstOnly, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.BodySubEntities, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getConnectedSubEntities(id: Id64String, subEntity: SubEntityProps, type: SubEntityType, options?: ConnectedSubEntityProps): Promise<SubEntityProps[] | undefined> {\r\n let accepted: SubEntityProps[] | undefined;\r\n const onResult: SubEntityArrayFunction = (info: SubEntityProps[]): void => {\r\n accepted = info;\r\n };\r\n\r\n const params: ConnectedSubEntityRequestProps = { subEntity, type, options, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ConnectedSubEntity, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async locateSubEntities(id: Id64String, point: XYZProps, direction: XYZProps, options: LocateSubEntityProps): Promise<SubEntityLocationProps[] | undefined> {\r\n let accepted: SubEntityLocationProps[] | undefined;\r\n const onResult: SubEntityLocationArrayFunction = (info: SubEntityLocationProps[]): void => {\r\n accepted = info;\r\n };\r\n const params: LocateSubEntityRequestProps = { point, direction, options, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.LocateSubEntity, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async locateFace(id: Id64String, subEntity: SubEntityProps, point: XYZProps, direction: XYZProps): Promise<SubEntityLocationProps[] | undefined> {\r\n let accepted: SubEntityLocationProps[] | undefined;\r\n const onResult: SubEntityLocationArrayFunction = (info: SubEntityLocationProps[]): void => {\r\n accepted = info;\r\n };\r\n const params: LocateFaceRequestProps = { subEntity, point, direction, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.LocateFace, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getClosestSubEntity(id: Id64String, point: XYZProps): Promise<SubEntityLocationProps | undefined> {\r\n let accepted: SubEntityLocationProps | undefined;\r\n const onResult: SubEntityLocationFunction = (info: SubEntityLocationProps): void => {\r\n accepted = info;\r\n };\r\n const params: ClosestSubEntityRequestProps = { point, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ClosestSubEntity, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getClosestFace(id: Id64String, point: XYZProps, direction?: XYZProps): Promise<SubEntityLocationProps | undefined> {\r\n let accepted: SubEntityLocationProps | undefined;\r\n const onResult: SubEntityLocationFunction = (info: SubEntityLocationProps): void => {\r\n accepted = info;\r\n };\r\n const params: ClosestSubEntityRequestProps = { point, direction, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ClosestFace, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async getClosestPoint(id: Id64String, subEntity: SubEntityProps, point: XYZProps): Promise<SubEntityLocationProps | undefined> {\r\n let accepted: SubEntityLocationProps | undefined;\r\n const onResult: SubEntityLocationFunction = (info: SubEntityLocationProps): void => {\r\n accepted = info;\r\n };\r\n const params: ClosestPointRequestProps = { subEntity, point, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ClosestPoint, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n public async isPointInside(id: Id64String, point: XYZProps): Promise<PointInsideResultProps[] | undefined> {\r\n let accepted: PointInsideResultProps[] | undefined;\r\n const onResult: PointInsideFunction = (info: PointInsideResultProps[]): void => {\r\n accepted = info;\r\n };\r\n const params: PointInsideRequestProps = { point, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.PointInside, params };\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n return accepted;\r\n }\r\n\r\n private async getElementGeometryResults(id: Id64String, info: ElementGeometryInfo, opts: ElementGeometryResultOptions, tools?: Id64Arg): Promise<ElementGeometryResultProps | undefined> {\r\n if (0 === info.entryArray.length || undefined === info.categoryId || undefined === info.bbox)\r\n return undefined;\r\n\r\n const resultProps: ElementGeometryResultProps = {};\r\n\r\n if (opts.wantGeometry)\r\n resultProps.geometry = info;\r\n\r\n if (opts.wantRange)\r\n resultProps.range = ElementGeometry.toElementAlignedBox3d(info.bbox);\r\n\r\n if (opts.wantAppearance)\r\n resultProps.categoryId = info.categoryId;\r\n\r\n if (!(opts.wantGraphic || opts.writeChanges))\r\n return resultProps;\r\n\r\n let placement: Placement3dProps;\r\n const sourceToWorld = (undefined === info?.sourceToWorld ? undefined : ElementGeometry.toTransform(info.sourceToWorld));\r\n if (undefined === sourceToWorld) {\r\n placement = { origin: Point3d.createZero(), angles: YawPitchRollAngles.createDegrees(0, 0, 0) };\r\n } else {\r\n const origin = sourceToWorld.getOrigin();\r\n const angles = new YawPitchRollAngles();\r\n YawPitchRollAngles.createFromMatrix3d(sourceToWorld.matrix, angles);\r\n placement = { origin, angles };\r\n }\r\n\r\n if (opts.writeChanges) {\r\n if (undefined !== tools) {\r\n if (opts.insertProps) {\r\n // NOTE: Insert model may be different than tool model(s), can't rely on getting shared lock from them...\r\n await this.iModel.locks.acquireLocks({ shared: opts.insertProps.model, exclusive: tools });\r\n } else {\r\n await this.iModel.locks.acquireLocks({ exclusive: [id, ...tools] });\r\n }\r\n }\r\n\r\n if (opts.insertProps) {\r\n opts.insertProps.placement = placement; // entryArray is local to this placement...\r\n delete opts.insertProps.geom; // Ignore geometry if present...\r\n resultProps.elementId = await this.insertGeometricElement(opts.insertProps, { entryArray: info.entryArray });\r\n } else {\r\n const updateProps = this.iModel.elements.getElementProps<GeometricElementProps>({ id });\r\n updateProps.category = info.categoryId; // allow category change...\r\n updateProps.placement = placement; // entryArray is local to this placement...\r\n await this.updateGeometricElement(updateProps, { entryArray: info.entryArray });\r\n resultProps.elementId = id;\r\n }\r\n\r\n if (undefined !== tools) {\r\n for (const toolId of Id64.iterable(tools))\r\n this.iModel.elements.deleteElement(toolId);\r\n }\r\n }\r\n\r\n if (!opts.wantGraphic)\r\n return resultProps;\r\n\r\n const requestId = opts.requestId ? opts.requestId : `EGCacheOp:${id}`;\r\n const toleranceLog10 = (opts.chordTolerance ? Math.floor(Math.log10(opts.chordTolerance)) : -2);\r\n\r\n const requestProps: DynamicGraphicsRequest3dProps = {\r\n id: requestId,\r\n modelId: this.iModel.iModelId,\r\n toleranceLog10,\r\n type: \"3d\",\r\n placement,\r\n categoryId: info.categoryId,\r\n elementId: id,\r\n geometry: { format: \"flatbuffer\", data: info.entryArray },\r\n };\r\n\r\n resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);\r\n\r\n return resultProps;\r\n }\r\n\r\n private async doElementGeometryOperation(props: ElementGeometryCacheOperationRequestProps, opts: ElementGeometryResultOptions, tools?: Id64Arg): Promise<ElementGeometryResultProps | undefined> {\r\n let accepted: ElementGeometryInfo | undefined;\r\n const onGeometry: ElementGeometryFunction = (info: ElementGeometryInfo): void => {\r\n accepted = info;\r\n };\r\n\r\n props.onGeometry = onGeometry;\r\n this.iModel.nativeDb.elementGeometryCacheOperation(props);\r\n\r\n if (undefined === accepted)\r\n return undefined;\r\n\r\n return this.getElementGeometryResults(props.id, accepted, opts, tools);\r\n }\r\n\r\n public async booleanOperation(id: Id64String, params: BooleanOperationProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n // target insert = keep tools, target update = delete tools...\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.BooleanOp, params };\r\n return this.doElementGeometryOperation(props, opts, undefined === opts.insertProps ? params.tools : undefined);\r\n }\r\n\r\n public async sewSheets(id: Id64String, params: SewSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n // target insert = keep tools, target update = delete tools...\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SewSheets, params };\r\n return this.doElementGeometryOperation(props, opts, undefined === opts.insertProps ? params.tools : undefined);\r\n }\r\n\r\n public async thickenSheets(id: Id64String, params: ThickenSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.ThickenSheets, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async cutSolid(id: Id64String, params: CutProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Cut, params };\r\n return this.doElementGeometryOperation(props, opts, !params.keepProfile ? params.profile : undefined);\r\n }\r\n\r\n public async embossBody(id: Id64String, params: EmbossProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Emboss, params };\r\n return this.doElementGeometryOperation(props, opts, !params.keepProfile ? params.profile : undefined);\r\n }\r\n\r\n public async imprintBody(id: Id64String, params: ImprintProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Imprint, params };\r\n return this.doElementGeometryOperation(props, opts, !params.keepProfile && \"string\" === typeof(params.imprint) ? params.imprint : undefined);\r\n }\r\n\r\n public async sweepAlongPath(id: Id64String, params: SweepPathProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SweepPath, params };\r\n return this.doElementGeometryOperation(props, opts, !params.keepPath ? params.path : undefined);\r\n }\r\n\r\n public async loftProfiles(id: Id64String, params: LoftProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const toolIds = (opts.writeChanges && (!params.keepTools || !params.keepGuides)) ? new Set<Id64String>() : undefined;\r\n\r\n if (undefined !== toolIds) {\r\n if (!params.keepTools) {\r\n for (const toolId of Id64.iterable(params.tools))\r\n toolIds.add(toolId);\r\n }\r\n\r\n if (undefined !== params.guides && !params.keepGuides) {\r\n for (const guideId of Id64.iterable(params.guides))\r\n toolIds.add(guideId);\r\n }\r\n }\r\n\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Loft, params };\r\n return this.doElementGeometryOperation(props, opts, toolIds);\r\n }\r\n\r\n public async offsetFaces(id: Id64String, params: OffsetFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.OffsetFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async offsetEdges(id: Id64String, params: OffsetEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.OffsetEdges, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async hollowFaces(id: Id64String, params: HollowFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.HollowFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async sweepFaces(id: Id64String, params: SweepFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SweepFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async spinFaces(id: Id64String, params: SpinFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.SpinFaces, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async deleteSubEntities(id: Id64String, params: DeleteSubEntityProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.DeleteSubEntity, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async transformSubEntities(id: Id64String, params: TransformSubEntityProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.TransformSubEntity, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async blendEdges(id: Id64String, params: BlendEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Blend, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n\r\n public async chamferEdges(id: Id64String, params: ChamferEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n const props: ElementGeometryCacheOperationRequestProps = { id, op: OperationType.Chamfer, params };\r\n return this.doElementGeometryOperation(props, opts);\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@itwin/editor-backend",
3
- "version": "3.0.0-extension.1",
4
- "description": "iModel.js editor backend",
3
+ "version": "3.0.0",
4
+ "description": "iTwin.js editor backend",
5
5
  "main": "lib/cjs/editor-backend.js",
6
6
  "typings": "lib/cjs/editor-backend",
7
7
  "license": "MIT",
@@ -24,42 +24,28 @@
24
24
  "url": "http://www.bentley.com"
25
25
  },
26
26
  "peerDependencies": {
27
- "@itwin/core-bentley": "^3.0.0-extension.1",
28
- "@itwin/core-geometry": "^3.0.0-extension.1",
29
- "@itwin/core-backend": "^3.0.0-extension.1",
30
- "@itwin/core-common": "^3.0.0-extension.1"
27
+ "@itwin/core-backend": "^3.0.0",
28
+ "@itwin/core-bentley": "^3.0.0",
29
+ "@itwin/core-common": "^3.0.0",
30
+ "@itwin/core-geometry": "^3.0.0"
31
31
  },
32
32
  "//devDependencies": [
33
33
  "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install",
34
34
  "NOTE: All tools used by scripts in this package must be listed as devDependencies"
35
35
  ],
36
36
  "devDependencies": {
37
- "@itwin/core-bentley": "3.0.0-extension.1",
38
- "@itwin/build-tools": "3.0.0-extension.1",
39
- "@itwin/eslint-plugin": "3.0.0-extension.1",
40
- "@itwin/core-geometry": "3.0.0-extension.1",
41
- "@itwin/core-backend": "3.0.0-extension.1",
42
- "@itwin/core-common": "3.0.0-extension.1",
43
- "@types/chai": "^4.1.4",
44
- "@types/chai-as-promised": "^7",
45
- "@types/deep-assign": "^0.1.0",
46
- "@types/mocha": "^8.2.2",
47
- "@types/node": "14.14.31",
48
- "@types/semver": "^5.5.0",
49
- "chai": "^4.1.2",
50
- "chai-as-promised": "^7",
51
- "cpx": "^1.5.0",
52
- "electron": "^14.0.0",
37
+ "@itwin/build-tools": "3.0.0",
38
+ "@itwin/core-backend": "3.0.0",
39
+ "@itwin/core-bentley": "3.0.0",
40
+ "@itwin/core-common": "3.0.0",
41
+ "@itwin/core-geometry": "3.0.0",
42
+ "@itwin/eslint-plugin": "3.0.0",
53
43
  "eslint": "^7.11.0",
54
- "mocha": "^8.3.2",
55
44
  "rimraf": "^3.0.2",
56
- "sinon": "^9.0.2",
57
- "source-map-loader": "^1.0.0",
58
- "source-map-support": "^0.5.6",
59
45
  "typescript": "~4.4.0"
60
46
  },
61
47
  "dependencies": {
62
- "@itwin/editor-common": "3.0.0-extension.1"
48
+ "@itwin/editor-common": "3.0.0"
63
49
  },
64
50
  "eslintConfig": {
65
51
  "plugins": [
@@ -77,5 +63,6 @@
77
63
  "lint": "eslint -f visualstudio --max-warnings 0 ./src/**/*.ts 1>&2",
78
64
  "test": "",
79
65
  "cover": ""
80
- }
66
+ },
67
+ "readme": "# @itwin/editor-backend\r\n\r\nCopyright © Bentley Systems, Incorporated. All rights reserved. See LICENSE.md for license terms and full copyright notice.\r\n\r\n## Description\r\n\r\nThe __@itwin/editor-backend__ package contains backend classes for editing iModels.\r\n\r\n## Documentation\r\n\r\nSee the [iTwin.js](https://www.itwinjs.org) documentation for more information.\r\n"
81
68
  }