@itwin/editor-backend 3.0.0-dev.96 → 3.0.0-dev.97

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.
@@ -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, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, FlatBufferGeometricElementData, FlatBufferGeometryFilter, FlatBufferGeometryPartData, LocateSubEntityProps, OffsetFacesProps, SolidModelingCommandIpc, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps } from "@itwin/editor-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";
9
9
  import { EditCommand } from "./EditCommand";
10
10
  /** @alpha */
11
11
  export declare class BasicManipulationCommand extends EditCommand implements BasicManipulationCommandIpc {
@@ -28,11 +28,43 @@ export declare class SolidModelingCommand extends BasicManipulationCommand imple
28
28
  private updateElementGeometryCache;
29
29
  createElementGeometryCache(id: Id64String, filter?: ElementGeometryCacheFilter): Promise<boolean>;
30
30
  clearElementGeometryCache(): Promise<void>;
31
+ summarizeElementGeometryCache(id: Id64String): Promise<BRepEntityType[] | undefined>;
31
32
  private requestSubEntityGeometry;
32
33
  getSubEntityGeometry(id: Id64String, subEntity: SubEntityProps, opts: Omit<ElementGeometryResultOptions, "writeChanges" | "insertProps">): Promise<SubEntityGeometryProps | undefined>;
34
+ getSubEntityParameterRange(id: Id64String, subEntity: SubEntityProps): Promise<FaceParameterRangeProps | EdgeParameterRangeProps | undefined>;
35
+ evaluateSubEntity(id: Id64String, subEntity: SubEntityProps, uParam?: number, vParam?: number): Promise<EvaluatedFaceProps | EvaluatedEdgeProps | EvaluatedVertexProps | undefined>;
36
+ private subEntityQuery;
37
+ isPlanarFace(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
38
+ isSmoothEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
39
+ isLaminarEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
40
+ isLinearEdge(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
41
+ isSmoothVertex(id: Id64String, subEntity: SubEntityProps): Promise<boolean>;
42
+ private bodyQuery;
43
+ isDisjointBody(id: Id64String, index: number): Promise<boolean>;
44
+ isSingleFacePlanarSheet(id: Id64String, index: number): Promise<boolean>;
45
+ hasOnlyPlanarFaces(id: Id64String, index: number): Promise<boolean>;
46
+ hasCurvedFaceOrEdge(id: Id64String, index: number): Promise<boolean>;
47
+ getBodySubEntities(id: Id64String, type: SubEntityType, firstOnly?: true): Promise<SubEntityProps[] | undefined>;
48
+ getConnectedSubEntities(id: Id64String, subEntity: SubEntityProps, type: SubEntityType, options?: ConnectedSubEntityProps): Promise<SubEntityProps[] | undefined>;
33
49
  locateSubEntities(id: Id64String, point: XYZProps, direction: XYZProps, options: LocateSubEntityProps): Promise<SubEntityLocationProps[] | undefined>;
50
+ locateFace(id: Id64String, subEntity: SubEntityProps, point: XYZProps, direction: XYZProps): Promise<SubEntityLocationProps[] | undefined>;
51
+ getClosestSubEntity(id: Id64String, point: XYZProps): Promise<SubEntityLocationProps | undefined>;
34
52
  getClosestFace(id: Id64String, point: XYZProps, direction?: XYZProps): Promise<SubEntityLocationProps | undefined>;
53
+ getClosestPoint(id: Id64String, subEntity: SubEntityProps, point: XYZProps): Promise<SubEntityLocationProps | undefined>;
54
+ isPointInside(id: Id64String, point: XYZProps): Promise<PointInsideResultProps[] | undefined>;
35
55
  private getElementGeometryResults;
56
+ private doElementGeometryOperation;
57
+ booleanOperation(id: Id64String, params: BooleanOperationProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
58
+ sewSheets(id: Id64String, params: SewSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
59
+ thickenSheets(id: Id64String, params: ThickenSheetProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
36
60
  offsetFaces(id: Id64String, params: OffsetFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
61
+ offsetEdges(id: Id64String, params: OffsetEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
62
+ hollowFaces(id: Id64String, params: HollowFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
63
+ sweepFaces(id: Id64String, params: SweepFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
64
+ spinFaces(id: Id64String, params: SpinFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
65
+ deleteSubEntities(id: Id64String, params: DeleteSubEntityProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
66
+ transformSubEntities(id: Id64String, params: TransformSubEntityProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
67
+ blendEdges(id: Id64String, params: BlendEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
68
+ chamferEdges(id: Id64String, params: ChamferEdgesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
37
69
  }
38
70
  //# sourceMappingURL=EditBuiltInCommand.d.ts.map
@@ -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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"}
@@ -200,6 +200,66 @@ class BasicManipulationCommand extends EditCommand_1.EditCommand {
200
200
  }
201
201
  exports.BasicManipulationCommand = BasicManipulationCommand;
202
202
  BasicManipulationCommand.commandId = editor_common_1.editorBuiltInCmdIds.cmdBasicManipulation;
203
+ var QuerySubEntity;
204
+ (function (QuerySubEntity) {
205
+ /** Return whether the supplied face has a planar surface */
206
+ QuerySubEntity[QuerySubEntity["PlanarFace"] = 0] = "PlanarFace";
207
+ /** 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 */
208
+ QuerySubEntity[QuerySubEntity["SmoothEdge"] = 1] = "SmoothEdge";
209
+ /** Return whether the supplied sub-entity is a laminar edge of a sheet body, i.e. boundary of a single face */
210
+ QuerySubEntity[QuerySubEntity["LaminarEdge"] = 2] = "LaminarEdge";
211
+ /** Return whether the supplied sub-entity is a linear edge */
212
+ QuerySubEntity[QuerySubEntity["LinearEdge"] = 3] = "LinearEdge";
213
+ /** 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
+ QuerySubEntity[QuerySubEntity["SmoothVertex"] = 4] = "SmoothVertex";
215
+ })(QuerySubEntity || (QuerySubEntity = {}));
216
+ var QueryBody;
217
+ (function (QueryBody) {
218
+ /** Return whether the geometric primitive index is a disjoint body */
219
+ QueryBody[QueryBody["DisjointBody"] = 0] = "DisjointBody";
220
+ /** Return whether the geometric primitive index is a sheet body with a single planar face */
221
+ QueryBody[QueryBody["SingleFacePlanarSheet"] = 1] = "SingleFacePlanarSheet";
222
+ /** Return whether the geometric primitive index is a sheet or solid entity that has all planar faces */
223
+ QueryBody[QueryBody["OnlyPlanarFaces"] = 2] = "OnlyPlanarFaces";
224
+ /** Return whether the geometric primitive index is a body with any edge that is non-linear or any face that is non-planar */
225
+ QueryBody[QueryBody["CurvedFaceOrEdge"] = 3] = "CurvedFaceOrEdge";
226
+ })(QueryBody || (QueryBody = {}));
227
+ var OperationType;
228
+ (function (OperationType) {
229
+ OperationType[OperationType["GeometrySummary"] = 0] = "GeometrySummary";
230
+ OperationType[OperationType["SubEntityGeometry"] = 1] = "SubEntityGeometry";
231
+ OperationType[OperationType["SubEntityParameterRange"] = 2] = "SubEntityParameterRange";
232
+ OperationType[OperationType["SubEntityEvaluate"] = 3] = "SubEntityEvaluate";
233
+ OperationType[OperationType["SubEntityQuery"] = 4] = "SubEntityQuery";
234
+ OperationType[OperationType["BodyQuery"] = 5] = "BodyQuery";
235
+ OperationType[OperationType["BodySubEntities"] = 6] = "BodySubEntities";
236
+ OperationType[OperationType["ConnectedSubEntity"] = 7] = "ConnectedSubEntity";
237
+ OperationType[OperationType["LocateSubEntity"] = 8] = "LocateSubEntity";
238
+ OperationType[OperationType["LocateFace"] = 9] = "LocateFace";
239
+ OperationType[OperationType["ClosestSubEntity"] = 10] = "ClosestSubEntity";
240
+ OperationType[OperationType["ClosestFace"] = 11] = "ClosestFace";
241
+ OperationType[OperationType["ClosestPoint"] = 12] = "ClosestPoint";
242
+ OperationType[OperationType["PointInside"] = 13] = "PointInside";
243
+ OperationType[OperationType["BooleanOp"] = 14] = "BooleanOp";
244
+ OperationType[OperationType["SewSheets"] = 15] = "SewSheets";
245
+ OperationType[OperationType["ThickenSheets"] = 16] = "ThickenSheets";
246
+ OperationType[OperationType["OffsetFaces"] = 17] = "OffsetFaces";
247
+ OperationType[OperationType["OffsetEdges"] = 18] = "OffsetEdges";
248
+ OperationType[OperationType["HollowFaces"] = 19] = "HollowFaces";
249
+ OperationType[OperationType["SweepFaces"] = 20] = "SweepFaces";
250
+ OperationType[OperationType["SpinFaces"] = 21] = "SpinFaces";
251
+ OperationType[OperationType["DeleteSubEntity"] = 22] = "DeleteSubEntity";
252
+ OperationType[OperationType["TransformSubEntity"] = 23] = "TransformSubEntity";
253
+ OperationType[OperationType["Blend"] = 24] = "Blend";
254
+ OperationType[OperationType["Chamfer"] = 25] = "Chamfer";
255
+ OperationType[OperationType["Cut"] = 26] = "Cut";
256
+ OperationType[OperationType["Emboss"] = 27] = "Emboss";
257
+ 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";
262
+ })(OperationType || (OperationType = {}));
203
263
  /** @alpha */
204
264
  class SolidModelingCommand extends BasicManipulationCommand {
205
265
  async updateElementGeometryCache(props) {
@@ -231,13 +291,23 @@ class SolidModelingCommand extends BasicManipulationCommand {
231
291
  async clearElementGeometryCache() {
232
292
  await this.updateElementGeometryCache({});
233
293
  }
294
+ async summarizeElementGeometryCache(id) {
295
+ let accepted;
296
+ const onResult = (info) => {
297
+ accepted = info;
298
+ };
299
+ const params = { onResult };
300
+ const props = { id, op: OperationType.GeometrySummary, params };
301
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
302
+ return accepted;
303
+ }
234
304
  requestSubEntityGeometry(id, subEntity) {
235
305
  let accepted;
236
306
  const onResult = (info) => {
237
307
  accepted = info;
238
308
  };
239
- const opProps = { subEntity, onResult };
240
- const props = { id, onSubEntityGeometry: opProps };
309
+ const params = { subEntity, onResult };
310
+ const props = { id, op: OperationType.SubEntityGeometry, params };
241
311
  this.iModel.nativeDb.elementGeometryCacheOperation(props);
242
312
  return accepted;
243
313
  }
@@ -275,13 +345,120 @@ class SolidModelingCommand extends BasicManipulationCommand {
275
345
  resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);
276
346
  return resultProps;
277
347
  }
348
+ async getSubEntityParameterRange(id, subEntity) {
349
+ let accepted;
350
+ const onResult = (info) => {
351
+ accepted = info;
352
+ };
353
+ const params = { subEntity, onResult };
354
+ const props = { id, op: OperationType.SubEntityParameterRange, params };
355
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
356
+ return accepted;
357
+ }
358
+ async evaluateSubEntity(id, subEntity, uParam, vParam) {
359
+ let accepted;
360
+ const onResult = (info) => {
361
+ accepted = info;
362
+ };
363
+ const params = { subEntity, uParam, vParam, onResult };
364
+ const props = { id, op: OperationType.SubEntityEvaluate, params };
365
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
366
+ return accepted;
367
+ }
368
+ async subEntityQuery(id, subEntity, query) {
369
+ let accepted = false;
370
+ const onResult = (info) => {
371
+ accepted = info;
372
+ };
373
+ const params = { subEntity, query, onResult };
374
+ const props = { id, op: OperationType.SubEntityQuery, params };
375
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
376
+ return accepted;
377
+ }
378
+ async isPlanarFace(id, subEntity) {
379
+ return this.subEntityQuery(id, subEntity, QuerySubEntity.PlanarFace);
380
+ }
381
+ async isSmoothEdge(id, subEntity) {
382
+ return this.subEntityQuery(id, subEntity, QuerySubEntity.SmoothEdge);
383
+ }
384
+ async isLaminarEdge(id, subEntity) {
385
+ return this.subEntityQuery(id, subEntity, QuerySubEntity.LaminarEdge);
386
+ }
387
+ async isLinearEdge(id, subEntity) {
388
+ return this.subEntityQuery(id, subEntity, QuerySubEntity.LinearEdge);
389
+ }
390
+ async isSmoothVertex(id, subEntity) {
391
+ return this.subEntityQuery(id, subEntity, QuerySubEntity.SmoothVertex);
392
+ }
393
+ async bodyQuery(id, index, query) {
394
+ let accepted = false;
395
+ const onResult = (info) => {
396
+ accepted = info;
397
+ };
398
+ const params = { index, query, onResult };
399
+ const props = { id, op: OperationType.BodyQuery, params };
400
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
401
+ return accepted;
402
+ }
403
+ async isDisjointBody(id, index) {
404
+ return this.bodyQuery(id, index, QueryBody.DisjointBody);
405
+ }
406
+ async isSingleFacePlanarSheet(id, index) {
407
+ return this.bodyQuery(id, index, QueryBody.SingleFacePlanarSheet);
408
+ }
409
+ async hasOnlyPlanarFaces(id, index) {
410
+ return this.bodyQuery(id, index, QueryBody.OnlyPlanarFaces);
411
+ }
412
+ async hasCurvedFaceOrEdge(id, index) {
413
+ return this.bodyQuery(id, index, QueryBody.CurvedFaceOrEdge);
414
+ }
415
+ async getBodySubEntities(id, type, firstOnly) {
416
+ let accepted;
417
+ const onResult = (info) => {
418
+ accepted = info;
419
+ };
420
+ const params = { type, firstOnly, onResult };
421
+ const props = { id, op: OperationType.BodySubEntities, params };
422
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
423
+ return accepted;
424
+ }
425
+ async getConnectedSubEntities(id, subEntity, type, options) {
426
+ let accepted;
427
+ const onResult = (info) => {
428
+ accepted = info;
429
+ };
430
+ const params = { subEntity, type, options, onResult };
431
+ const props = { id, op: OperationType.ConnectedSubEntity, params };
432
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
433
+ return accepted;
434
+ }
278
435
  async locateSubEntities(id, point, direction, options) {
279
436
  let accepted;
280
437
  const onResult = (info) => {
281
438
  accepted = info;
282
439
  };
283
- const opProps = { point, direction, options, onResult };
284
- const props = { id, onLocateSubEntity: opProps };
440
+ const params = { point, direction, options, onResult };
441
+ const props = { id, op: OperationType.LocateSubEntity, params };
442
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
443
+ return accepted;
444
+ }
445
+ async locateFace(id, subEntity, point, direction) {
446
+ let accepted;
447
+ const onResult = (info) => {
448
+ accepted = info;
449
+ };
450
+ const params = { subEntity, point, direction, onResult };
451
+ const props = { id, op: OperationType.LocateFace, params };
452
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
453
+ return accepted;
454
+ }
455
+ async getClosestSubEntity(id, point) {
456
+ let accepted;
457
+ const onResult = (info) => {
458
+ accepted = info;
459
+ };
460
+ const params = { point, onResult };
461
+ const props = { id, op: OperationType.ClosestSubEntity, params };
285
462
  this.iModel.nativeDb.elementGeometryCacheOperation(props);
286
463
  return accepted;
287
464
  }
@@ -290,8 +467,28 @@ class SolidModelingCommand extends BasicManipulationCommand {
290
467
  const onResult = (info) => {
291
468
  accepted = info;
292
469
  };
293
- const opProps = { point, direction, onResult };
294
- const props = { id, onClosestFace: opProps };
470
+ const params = { point, direction, onResult };
471
+ const props = { id, op: OperationType.ClosestFace, params };
472
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
473
+ return accepted;
474
+ }
475
+ async getClosestPoint(id, subEntity, point) {
476
+ let accepted;
477
+ const onResult = (info) => {
478
+ accepted = info;
479
+ };
480
+ const params = { subEntity, point, onResult };
481
+ const props = { id, op: OperationType.ClosestPoint, params };
482
+ this.iModel.nativeDb.elementGeometryCacheOperation(props);
483
+ return accepted;
484
+ }
485
+ async isPointInside(id, point) {
486
+ let accepted;
487
+ const onResult = (info) => {
488
+ accepted = info;
489
+ };
490
+ const params = { point, onResult };
491
+ const props = { id, op: OperationType.PointInside, params };
295
492
  this.iModel.nativeDb.elementGeometryCacheOperation(props);
296
493
  return accepted;
297
494
  }
@@ -325,7 +522,10 @@ class SolidModelingCommand extends BasicManipulationCommand {
325
522
  resultProps.elementId = await this.insertGeometricElement(opts.insertProps, { entryArray: info.entryArray });
326
523
  }
327
524
  else {
328
- await this.updateGeometricElement(id, { entryArray: info.entryArray });
525
+ const updateProps = this.iModel.elements.getElementProps({ id });
526
+ updateProps.category = info.categoryId; // allow category change...
527
+ updateProps.placement = placement; // entryArray is local to this placement...
528
+ await this.updateGeometricElement(updateProps, { entryArray: info.entryArray });
329
529
  resultProps.elementId = id;
330
530
  }
331
531
  }
@@ -345,16 +545,76 @@ class SolidModelingCommand extends BasicManipulationCommand {
345
545
  resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);
346
546
  return resultProps;
347
547
  }
348
- async offsetFaces(id, params, opts) {
548
+ async doElementGeometryOperation(props, opts) {
349
549
  let accepted;
350
- const onResult = (info) => {
550
+ const onGeometry = (info) => {
351
551
  accepted = info;
352
552
  };
353
- const props = { id, onOffsetFaces: params, onGeometry: onResult };
553
+ props.onGeometry = onGeometry;
354
554
  this.iModel.nativeDb.elementGeometryCacheOperation(props);
355
555
  if (undefined === accepted)
356
556
  return undefined;
357
- return this.getElementGeometryResults(id, accepted, opts);
557
+ return this.getElementGeometryResults(props.id, accepted, opts);
558
+ }
559
+ async booleanOperation(id, params, opts) {
560
+ const props = { id, op: OperationType.BooleanOp, params };
561
+ const resultProps = await this.doElementGeometryOperation(props, opts);
562
+ // 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;
568
+ }
569
+ async sewSheets(id, params, opts) {
570
+ const props = { id, op: OperationType.SewSheets, params };
571
+ const resultProps = await this.doElementGeometryOperation(props, opts);
572
+ // 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;
578
+ }
579
+ async thickenSheets(id, params, opts) {
580
+ const props = { id, op: OperationType.ThickenSheets, params };
581
+ return this.doElementGeometryOperation(props, opts);
582
+ }
583
+ async offsetFaces(id, params, opts) {
584
+ const props = { id, op: OperationType.OffsetFaces, params };
585
+ return this.doElementGeometryOperation(props, opts);
586
+ }
587
+ async offsetEdges(id, params, opts) {
588
+ const props = { id, op: OperationType.OffsetEdges, params };
589
+ return this.doElementGeometryOperation(props, opts);
590
+ }
591
+ async hollowFaces(id, params, opts) {
592
+ const props = { id, op: OperationType.HollowFaces, params };
593
+ return this.doElementGeometryOperation(props, opts);
594
+ }
595
+ async sweepFaces(id, params, opts) {
596
+ const props = { id, op: OperationType.SweepFaces, params };
597
+ return this.doElementGeometryOperation(props, opts);
598
+ }
599
+ async spinFaces(id, params, opts) {
600
+ const props = { id, op: OperationType.SpinFaces, params };
601
+ return this.doElementGeometryOperation(props, opts);
602
+ }
603
+ async deleteSubEntities(id, params, opts) {
604
+ const props = { id, op: OperationType.DeleteSubEntity, params };
605
+ return this.doElementGeometryOperation(props, opts);
606
+ }
607
+ async transformSubEntities(id, params, opts) {
608
+ const props = { id, op: OperationType.TransformSubEntity, params };
609
+ return this.doElementGeometryOperation(props, opts);
610
+ }
611
+ async blendEdges(id, params, opts) {
612
+ const props = { id, op: OperationType.Blend, params };
613
+ return this.doElementGeometryOperation(props, opts);
614
+ }
615
+ async chamferEdges(id, params, opts) {
616
+ const props = { id, op: OperationType.Chamfer, params };
617
+ return this.doElementGeometryOperation(props, opts);
358
618
  }
359
619
  }
360
620
  exports.SolidModelingCommand = SolidModelingCommand;
@@ -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 {\r\n Matrix3d, Matrix3dProps, Point3d, PointString3d, Range3d, Range3dProps, Transform, TransformProps, XYZProps, YawPitchRollAngles,\r\n} from \"@itwin/core-geometry\";\r\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\r\nimport {\r\n BRepEntity, ColorDefProps, DynamicGraphicsRequest3dProps, EcefLocation, EcefLocationProps, ElementGeometry, ElementGeometryDataEntry,\r\n ElementGeometryFunction, ElementGeometryInfo, ElementGeometryRequest, ElementGeometryUpdate, FilePropertyProps, GeometricElementProps,\r\n GeometryPartProps, GeometryStreamBuilder, IModelError, Placement3dProps,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n BasicManipulationCommandIpc, editorBuiltInCmdIds, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps,\r\n FlatBufferGeometricElementData, FlatBufferGeometryFilter, FlatBufferGeometryPartData, LocateSubEntityProps, OffsetFacesProps, SolidModelingCommandIpc,\r\n SubEntityAppearanceProps, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps,\r\n} 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 SubEntityGeometryFunction = (info: SubEntityGeometryResponseProps) => void;\r\ntype ClosestFaceFunction = (info: SubEntityLocationProps) => void;\r\ntype LocateSubEntityFunction = (info: SubEntityLocationProps[]) => void;\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 ClosestFaceRequestProps {\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: ClosestFaceFunction;\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: LocateSubEntityFunction;\r\n}\r\n\r\ninterface ElementGeometryCacheOperationRequestProps {\r\n /** Target element id, tool element ids supplied by operations between elements... */\r\n id: Id64String;\r\n /** Callback for result when element's geometry stream is requested in flatbuffer or graphic formats */\r\n onGeometry?: ElementGeometryFunction;\r\n onSubEntityGeometry?: SubEntityGeometryRequestProps;\r\n onLocateSubEntity?: LocateSubEntityRequestProps;\r\n onClosestFace?: ClosestFaceRequestProps;\r\n onOffsetFaces?: OffsetFacesProps;\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 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 opProps: SubEntityGeometryRequestProps = { subEntity, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, onSubEntityGeometry: opProps };\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 locateSubEntities(id: Id64String, point: XYZProps, direction: XYZProps, options: LocateSubEntityProps): Promise<SubEntityLocationProps[] | undefined> {\r\n let accepted: SubEntityLocationProps[] | undefined;\r\n const onResult: LocateSubEntityFunction = (info: SubEntityLocationProps[]): void => {\r\n accepted = info;\r\n };\r\n const opProps: LocateSubEntityRequestProps = { point, direction, options, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, onLocateSubEntity: opProps };\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: ClosestFaceFunction = (info: SubEntityLocationProps): void => {\r\n accepted = info;\r\n };\r\n const opProps: ClosestFaceRequestProps = { point, direction, onResult };\r\n const props: ElementGeometryCacheOperationRequestProps = { id, onClosestFace: opProps };\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 await this.updateGeometricElement(id, { 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 public async offsetFaces(id: Id64String, params: OffsetFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined> {\r\n let accepted: ElementGeometryInfo | undefined;\r\n const onResult: ElementGeometryFunction = (info: ElementGeometryInfo): void => {\r\n accepted = info;\r\n };\r\n\r\n const props: ElementGeometryCacheOperationRequestProps = { id, onOffsetFaces: params, onGeometry: onResult };\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(id, accepted, 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, 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/editor-backend",
3
- "version": "3.0.0-dev.96",
3
+ "version": "3.0.0-dev.97",
4
4
  "description": "iModel.js editor backend",
5
5
  "main": "lib/cjs/editor-backend.js",
6
6
  "typings": "lib/cjs/editor-backend",
@@ -24,22 +24,22 @@
24
24
  "url": "http://www.bentley.com"
25
25
  },
26
26
  "peerDependencies": {
27
- "@itwin/core-bentley": "^3.0.0-dev.96",
28
- "@itwin/core-geometry": "^3.0.0-dev.96",
29
- "@itwin/core-backend": "^3.0.0-dev.96",
30
- "@itwin/core-common": "^3.0.0-dev.96"
27
+ "@itwin/core-bentley": "^3.0.0-dev.97",
28
+ "@itwin/core-geometry": "^3.0.0-dev.97",
29
+ "@itwin/core-backend": "^3.0.0-dev.97",
30
+ "@itwin/core-common": "^3.0.0-dev.97"
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-dev.96",
38
- "@itwin/build-tools": "3.0.0-dev.96",
39
- "@itwin/eslint-plugin": "3.0.0-dev.96",
40
- "@itwin/core-geometry": "3.0.0-dev.96",
41
- "@itwin/core-backend": "3.0.0-dev.96",
42
- "@itwin/core-common": "3.0.0-dev.96",
37
+ "@itwin/core-bentley": "3.0.0-dev.97",
38
+ "@itwin/build-tools": "3.0.0-dev.97",
39
+ "@itwin/eslint-plugin": "3.0.0-dev.97",
40
+ "@itwin/core-geometry": "3.0.0-dev.97",
41
+ "@itwin/core-backend": "3.0.0-dev.97",
42
+ "@itwin/core-common": "3.0.0-dev.97",
43
43
  "@types/chai": "^4.1.4",
44
44
  "@types/chai-as-promised": "^7",
45
45
  "@types/deep-assign": "^0.1.0",
@@ -59,7 +59,7 @@
59
59
  "typescript": "~4.4.0"
60
60
  },
61
61
  "dependencies": {
62
- "@itwin/editor-common": "3.0.0-dev.96"
62
+ "@itwin/editor-common": "3.0.0-dev.97"
63
63
  },
64
64
  "eslintConfig": {
65
65
  "plugins": [