@itwin/editor-backend 3.0.0-dev.80 → 3.0.0-dev.81
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, OffsetFacesProps, SolidModelingCommandIpc, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps } from "@itwin/editor-common";
|
|
8
|
+
import { BasicManipulationCommandIpc, ElementGeometryCacheFilter, ElementGeometryResultOptions, ElementGeometryResultProps, FlatBufferGeometricElementData, FlatBufferGeometryFilter, FlatBufferGeometryPartData, LocateSubEntityProps, OffsetFacesProps, SolidModelingCommandIpc, SubEntityGeometryProps, SubEntityLocationProps, SubEntityProps } from "@itwin/editor-common";
|
|
9
9
|
import { EditCommand } from "./EditCommand";
|
|
10
10
|
/** @alpha */
|
|
11
11
|
export declare class BasicManipulationCommand extends EditCommand implements BasicManipulationCommandIpc {
|
|
@@ -30,6 +30,7 @@ export declare class SolidModelingCommand extends BasicManipulationCommand imple
|
|
|
30
30
|
clearElementGeometryCache(): Promise<void>;
|
|
31
31
|
private requestSubEntityGeometry;
|
|
32
32
|
getSubEntityGeometry(id: Id64String, subEntity: SubEntityProps, opts: Omit<ElementGeometryResultOptions, "writeChanges" | "insertProps">): Promise<SubEntityGeometryProps | undefined>;
|
|
33
|
+
locateSubEntities(id: Id64String, point: XYZProps, direction: XYZProps, options: LocateSubEntityProps): Promise<SubEntityLocationProps[] | undefined>;
|
|
33
34
|
getClosestFace(id: Id64String, point: XYZProps, direction?: XYZProps): Promise<SubEntityLocationProps | undefined>;
|
|
34
35
|
private getElementGeometryResults;
|
|
35
36
|
offsetFaces(id: Id64String, params: OffsetFacesProps, opts: ElementGeometryResultOptions): Promise<ElementGeometryResultProps | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditBuiltInCommand.d.ts","sourceRoot":"","sources":["../../src/EditBuiltInCommand.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAiB,iBAAiB,EAAY,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3G,OAAO,EACK,aAAa,EAAmC,YAAY,EAAa,cAAc,EAAE,QAAQ,EAC5G,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAoB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACmE,iBAAiB,EAChE,mBAAmB,EAAoE,qBAAqB,EACrI,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,2BAA2B,EAAuB,0BAA0B,EAAE,4BAA4B,EAAE,0BAA0B,EACtI,8BAA8B,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"EditBuiltInCommand.d.ts","sourceRoot":"","sources":["../../src/EditBuiltInCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -275,6 +275,16 @@ class SolidModelingCommand extends BasicManipulationCommand {
|
|
|
275
275
|
resultProps.graphic = await this.iModel.generateElementGraphics(requestProps);
|
|
276
276
|
return resultProps;
|
|
277
277
|
}
|
|
278
|
+
async locateSubEntities(id, point, direction, options) {
|
|
279
|
+
let accepted;
|
|
280
|
+
const onResult = (info) => {
|
|
281
|
+
accepted = info;
|
|
282
|
+
};
|
|
283
|
+
const opProps = { point, direction, options, onResult };
|
|
284
|
+
const props = { id, onLocateSubEntity: opProps };
|
|
285
|
+
this.iModel.nativeDb.elementGeometryCacheOperation(props);
|
|
286
|
+
return accepted;
|
|
287
|
+
}
|
|
278
288
|
async getClosestFace(id, point, direction) {
|
|
279
289
|
let accepted;
|
|
280
290
|
const onResult = (info) => {
|
|
@@ -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, 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\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 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 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 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 {\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/editor-backend",
|
|
3
|
-
"version": "3.0.0-dev.
|
|
3
|
+
"version": "3.0.0-dev.81",
|
|
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.
|
|
28
|
-
"@itwin/core-geometry": "^3.0.0-dev.
|
|
29
|
-
"@itwin/core-backend": "^3.0.0-dev.
|
|
30
|
-
"@itwin/core-common": "^3.0.0-dev.
|
|
27
|
+
"@itwin/core-bentley": "^3.0.0-dev.81",
|
|
28
|
+
"@itwin/core-geometry": "^3.0.0-dev.81",
|
|
29
|
+
"@itwin/core-backend": "^3.0.0-dev.81",
|
|
30
|
+
"@itwin/core-common": "^3.0.0-dev.81"
|
|
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.
|
|
38
|
-
"@itwin/build-tools": "3.0.0-dev.
|
|
39
|
-
"@itwin/eslint-plugin": "3.0.0-dev.
|
|
40
|
-
"@itwin/core-geometry": "3.0.0-dev.
|
|
41
|
-
"@itwin/core-backend": "3.0.0-dev.
|
|
42
|
-
"@itwin/core-common": "3.0.0-dev.
|
|
37
|
+
"@itwin/core-bentley": "3.0.0-dev.81",
|
|
38
|
+
"@itwin/build-tools": "3.0.0-dev.81",
|
|
39
|
+
"@itwin/eslint-plugin": "3.0.0-dev.81",
|
|
40
|
+
"@itwin/core-geometry": "3.0.0-dev.81",
|
|
41
|
+
"@itwin/core-backend": "3.0.0-dev.81",
|
|
42
|
+
"@itwin/core-common": "3.0.0-dev.81",
|
|
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.
|
|
62
|
+
"@itwin/editor-common": "3.0.0-dev.81"
|
|
63
63
|
},
|
|
64
64
|
"eslintConfig": {
|
|
65
65
|
"plugins": [
|