@itwin/linear-referencing-backend 5.3.2 → 5.4.0-dev.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Change Log - @itwin/linear-referencing-backend
2
2
 
3
- This log was last generated on Thu, 13 Nov 2025 23:23:23 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 13 Nov 2025 23:24:40 GMT and should not be manually modified.
4
4
 
5
5
  ## 5.3.2
6
6
  Thu, 13 Nov 2025 23:23:23 GMT
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingElementAspects.js","sourceRoot":"","sources":["../../src/LinearReferencingElementAspects.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport { Id64String, JsonUtils } from \"@itwin/core-bentley\";\nimport { ElementMultiAspect, IModelDb } from \"@itwin/core-backend\";\nimport { RelatedElement } from \"@itwin/core-common\";\nimport {\n DistanceExpressionProps, LinearlyReferencedAtLocationAspectProps, LinearlyReferencedFromToLocationAspectProps,\n} from \"@itwin/linear-referencing-common\";\nimport {\n LinearlyReferencedAtPositionRefersToReferent, LinearlyReferencedFromPositionRefersToReferent, LinearlyReferencedToPositionRefersToReferent,\n} from \"./LinearReferencingRelationships\";\n\n/** Core structure carrying linearly-referenced information.\n * @beta\n */\nexport class DistanceExpression implements DistanceExpressionProps {\n public distanceAlongFromStart: number;\n public lateralOffsetFromILinearElement?: number;\n public verticalOffsetFromILinearElement?: number;\n public distanceAlongFromReferent?: number;\n\n constructor(props: DistanceExpressionProps) {\n this.distanceAlongFromStart = JsonUtils.asDouble(props.distanceAlongFromStart);\n this.lateralOffsetFromILinearElement = JsonUtils.asDouble(props.lateralOffsetFromILinearElement);\n this.verticalOffsetFromILinearElement = JsonUtils.asDouble(props.verticalOffsetFromILinearElement);\n this.distanceAlongFromReferent = JsonUtils.asDouble(props.distanceAlongFromReferent);\n }\n\n public static fromJSON(json: DistanceExpressionProps): DistanceExpression { return new DistanceExpression(json); }\n}\n\n/** Base class for multi-aspects carrying linearly-referenced locations.\n * @beta\n */\nexport class LinearlyReferencedLocation extends ElementMultiAspect {\n /** @internal */\n public static override get className(): string { return \"LinearlyReferencedLocation\"; }\n}\n\n/** Concrete multi-aspect class carrying 'at' linearly-referenced positions along a Linear-Element.\n * @beta\n */\nexport class LinearlyReferencedAtLocation extends LinearlyReferencedLocation {\n /** @internal */\n public static override get className(): string { return \"LinearlyReferencedAtLocation\"; }\n\n public atPosition: DistanceExpression;\n public fromReferent?: LinearlyReferencedAtPositionRefersToReferent;\n\n constructor(props: LinearlyReferencedAtLocationAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.atPosition = DistanceExpression.fromJSON(props.atPosition);\n this.fromReferent = RelatedElement.fromJSON(props.fromReferent);\n }\n\n private static toProps(locatedElementId: Id64String, at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocationAspectProps {\n const props: LinearlyReferencedAtLocationAspectProps = {\n classFullName: LinearlyReferencedAtLocation.classFullName,\n element: { id: locatedElementId },\n atPosition: at,\n fromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedAtPositionRefersToReferent(fromReferentId),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, locatedElementId: Id64String,\n at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocation {\n return new LinearlyReferencedAtLocation(this.toProps(locatedElementId, at, fromReferentId), iModel);\n }\n\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\n at: DistanceExpression, fromReferentId?: Id64String): void {\n iModel.elements.insertAspect(this.toProps(locatedElementId, at, fromReferentId));\n }\n}\n\n/** Concrete multi-aspect class carrying 'from-to' linearly-referenced positions along a Linear-Element.\n * @beta\n */\nexport class LinearlyReferencedFromToLocation extends LinearlyReferencedLocation {\n /** @internal */\n public static override get className(): string { return \"LinearlyReferencedFromToLocation\"; }\n\n public fromPosition: DistanceExpression;\n public fromPositionFromReferent?: LinearlyReferencedFromPositionRefersToReferent;\n public toPosition: DistanceExpression;\n public toPositionFromReferent?: LinearlyReferencedToPositionRefersToReferent;\n\n constructor(props: LinearlyReferencedFromToLocationAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.fromPosition = DistanceExpression.fromJSON(props.fromPosition);\n this.toPosition = DistanceExpression.fromJSON(props.toPosition);\n this.fromPositionFromReferent = RelatedElement.fromJSON(props.fromPositionFromReferent);\n this.toPositionFromReferent = RelatedElement.fromJSON(props.toPositionFromReferent);\n }\n\n private static toProps(locatedElementId: Id64String,\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocationAspectProps {\n const props: LinearlyReferencedFromToLocationAspectProps = {\n classFullName: LinearlyReferencedFromToLocation.classFullName,\n element: { id: locatedElementId },\n fromPosition: from,\n fromPositionFromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedFromPositionRefersToReferent(fromReferentId),\n toPosition: to,\n toPositionFromReferent: (toReferentId === undefined) ? undefined : new LinearlyReferencedToPositionRefersToReferent(toReferentId),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, locatedElementId: Id64String,\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocation {\n return new LinearlyReferencedFromToLocation(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId), iModel);\n }\n\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): void {\n iModel.elements.insertAspect(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId));\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingElementAspects.js","sourceRoot":"","sources":["../../src/LinearReferencingElementAspects.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 LinearReferencing\r\n */\r\n\r\nimport { Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { ElementMultiAspect, IModelDb } from \"@itwin/core-backend\";\r\nimport { RelatedElement } from \"@itwin/core-common\";\r\nimport {\r\n DistanceExpressionProps, LinearlyReferencedAtLocationAspectProps, LinearlyReferencedFromToLocationAspectProps,\r\n} from \"@itwin/linear-referencing-common\";\r\nimport {\r\n LinearlyReferencedAtPositionRefersToReferent, LinearlyReferencedFromPositionRefersToReferent, LinearlyReferencedToPositionRefersToReferent,\r\n} from \"./LinearReferencingRelationships\";\r\n\r\n/** Core structure carrying linearly-referenced information.\r\n * @beta\r\n */\r\nexport class DistanceExpression implements DistanceExpressionProps {\r\n public distanceAlongFromStart: number;\r\n public lateralOffsetFromILinearElement?: number;\r\n public verticalOffsetFromILinearElement?: number;\r\n public distanceAlongFromReferent?: number;\r\n\r\n constructor(props: DistanceExpressionProps) {\r\n this.distanceAlongFromStart = JsonUtils.asDouble(props.distanceAlongFromStart);\r\n this.lateralOffsetFromILinearElement = JsonUtils.asDouble(props.lateralOffsetFromILinearElement);\r\n this.verticalOffsetFromILinearElement = JsonUtils.asDouble(props.verticalOffsetFromILinearElement);\r\n this.distanceAlongFromReferent = JsonUtils.asDouble(props.distanceAlongFromReferent);\r\n }\r\n\r\n public static fromJSON(json: DistanceExpressionProps): DistanceExpression { return new DistanceExpression(json); }\r\n}\r\n\r\n/** Base class for multi-aspects carrying linearly-referenced locations.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedLocation extends ElementMultiAspect {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyReferencedLocation\"; }\r\n}\r\n\r\n/** Concrete multi-aspect class carrying 'at' linearly-referenced positions along a Linear-Element.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedAtLocation extends LinearlyReferencedLocation {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyReferencedAtLocation\"; }\r\n\r\n public atPosition: DistanceExpression;\r\n public fromReferent?: LinearlyReferencedAtPositionRefersToReferent;\r\n\r\n constructor(props: LinearlyReferencedAtLocationAspectProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.atPosition = DistanceExpression.fromJSON(props.atPosition);\r\n this.fromReferent = RelatedElement.fromJSON(props.fromReferent);\r\n }\r\n\r\n private static toProps(locatedElementId: Id64String, at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocationAspectProps {\r\n const props: LinearlyReferencedAtLocationAspectProps = {\r\n classFullName: LinearlyReferencedAtLocation.classFullName,\r\n element: { id: locatedElementId },\r\n atPosition: at,\r\n fromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedAtPositionRefersToReferent(fromReferentId),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, locatedElementId: Id64String,\r\n at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocation {\r\n return new LinearlyReferencedAtLocation(this.toProps(locatedElementId, at, fromReferentId), iModel);\r\n }\r\n\r\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\r\n at: DistanceExpression, fromReferentId?: Id64String): void {\r\n iModel.elements.insertAspect(this.toProps(locatedElementId, at, fromReferentId));\r\n }\r\n}\r\n\r\n/** Concrete multi-aspect class carrying 'from-to' linearly-referenced positions along a Linear-Element.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedFromToLocation extends LinearlyReferencedLocation {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyReferencedFromToLocation\"; }\r\n\r\n public fromPosition: DistanceExpression;\r\n public fromPositionFromReferent?: LinearlyReferencedFromPositionRefersToReferent;\r\n public toPosition: DistanceExpression;\r\n public toPositionFromReferent?: LinearlyReferencedToPositionRefersToReferent;\r\n\r\n constructor(props: LinearlyReferencedFromToLocationAspectProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.fromPosition = DistanceExpression.fromJSON(props.fromPosition);\r\n this.toPosition = DistanceExpression.fromJSON(props.toPosition);\r\n this.fromPositionFromReferent = RelatedElement.fromJSON(props.fromPositionFromReferent);\r\n this.toPositionFromReferent = RelatedElement.fromJSON(props.toPositionFromReferent);\r\n }\r\n\r\n private static toProps(locatedElementId: Id64String,\r\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocationAspectProps {\r\n const props: LinearlyReferencedFromToLocationAspectProps = {\r\n classFullName: LinearlyReferencedFromToLocation.classFullName,\r\n element: { id: locatedElementId },\r\n fromPosition: from,\r\n fromPositionFromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedFromPositionRefersToReferent(fromReferentId),\r\n toPosition: to,\r\n toPositionFromReferent: (toReferentId === undefined) ? undefined : new LinearlyReferencedToPositionRefersToReferent(toReferentId),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, locatedElementId: Id64String,\r\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocation {\r\n return new LinearlyReferencedFromToLocation(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId), iModel);\r\n }\r\n\r\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\r\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): void {\r\n iModel.elements.insertAspect(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId));\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingElements.js","sourceRoot":"","sources":["../../src/LinearReferencingElements.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\nimport { ECSqlStatement, ElementAspect, IModelDb, PhysicalElement, SpatialLocationElement } from \"@itwin/core-backend\";\nimport { Code, ElementProps, GeometricElement3dProps, IModelError, PhysicalElementProps, RelatedElement } from \"@itwin/core-common\";\nimport {\n ComparisonOption, LinearLocationReference, LinearlyLocatedAttributionProps, LinearlyReferencedAtLocationAspectProps,\n LinearlyReferencedAtLocationProps, LinearlyReferencedFromToLocationAspectProps, LinearlyReferencedFromToLocationProps,\n LinearlyReferencedLocationType, QueryParams, ReferentElementProps,\n} from \"@itwin/linear-referencing-common\";\nimport { LinearlyReferencedAtLocation, LinearlyReferencedFromToLocation } from \"./LinearReferencingElementAspects\";\nimport {\n ILinearLocationLocatesElement, ILinearlyLocatedAlongILinearElement, ILinearlyLocatedAttributesElement, IReferentReferencesElement,\n} from \"./LinearReferencingRelationships\";\n\n/** Base class for Spatial Location Element subclasses representing properties whose value is located along a Linear-Element and only applies to a portion of an Element.\n * @beta\n */\nexport abstract class LinearlyLocatedAttribution extends SpatialLocationElement {\n /** @internal */\n public static override get className(): string { return \"LinearlyLocatedAttribution\"; }\n\n public attributedElement?: ILinearlyLocatedAttributesElement;\n\n public constructor(props: LinearlyLocatedAttributionProps, iModel: IModelDb) {\n super(props, iModel);\n this.attributedElement = RelatedElement.fromJSON(props.attributedElement);\n }\n\n public getLinearElementId(): Id64String | undefined {\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\n }\n}\n\n/** Base class for Spatial Location Element implementations that are linearly located along a Linear-Element.\n * @beta\n */\nexport abstract class LinearLocationElement extends SpatialLocationElement implements LinearlyLocatedBase {\n /** @internal */\n public static override get className(): string { return \"LinearLocationElement\"; }\n\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n public getLinearElementId(): Id64String | undefined {\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\n }\n}\n\n/** Linear Referencing Location attached to an Element not inherently Linearly Referenced.\n * @beta\n */\nexport class LinearLocation extends LinearLocationElement implements LinearlyLocatedBase {\n /** @internal */\n public static override get className(): string { return \"LinearLocation\"; }\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n private static toProps(modelId: Id64String, categoryId: Id64String): GeometricElement3dProps {\n const props: GeometricElement3dProps = {\n classFullName: LinearLocation.classFullName,\n category: categoryId,\n model: modelId,\n code: Code.createEmpty(),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String): LinearLocation {\n return new LinearLocation(this.toProps(modelId, categoryId), iModel);\n }\n\n public static insertFromTo(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\n fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertFromTo(iModel, this.toProps(modelId, categoryId), linearElementId, fromToPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n\n public insertFromTo(iModel: IModelDb, linearElementId: Id64String, fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertFromTo(iModel, this.toJSON(), linearElementId, fromToPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\n atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId), linearElementId, atPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n}\n\n/** Base class for Physical Elements that are inherently linearly located along a Linear-Element.\n * @beta\n */\nexport abstract class LinearPhysicalElement extends PhysicalElement {\n /** @internal */\n public static override get className(): string { return \"LinearPhysicalElement\"; }\n\n public constructor(props: PhysicalElementProps, iModel: IModelDb) {\n super(props, iModel);\n }\n}\n\n/** Spatial Location Element that can play the role of a Referent (known location along a Linear-Element).\n * @beta\n */\nexport abstract class ReferentElement extends SpatialLocationElement implements LinearlyLocatedBase {\n /** @internal */\n public static override get className(): string { return \"ReferentElement\"; }\n\n public referencedElement?: IReferentReferencesElement;\n\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\n super(props, iModel);\n this.referencedElement = RelatedElement.fromJSON(props.referencedElement);\n }\n\n public getLinearElementId(): Id64String | undefined {\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\n }\n}\n\n/** Referent-implementation turning any bis:SpatialElement not inherently Linearly-Referenced into a Referent for Linear-Referencing purposes.\n * @beta\n */\nexport class Referent extends ReferentElement {\n /** @internal */\n public static override get className(): string { return \"Referent\"; }\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n private static toProps(modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): ReferentElementProps {\n const props: ReferentElementProps = {\n classFullName: LinearLocation.classFullName,\n category: categoryId,\n model: modelId,\n code: Code.createEmpty(),\n referencedElement: new IReferentReferencesElement(referencedElementId),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): Referent {\n return new Referent(this.toProps(modelId, categoryId, referencedElementId), iModel);\n }\n\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\n atPosition: LinearlyReferencedAtLocationProps, referencedElementId: Id64String): Id64String {\n return LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId, referencedElementId), linearElementId, atPosition);\n }\n\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps): Id64String {\n return LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\n }\n}\n\nabstract class ECSQLGenImpl {\n public abstract genSelect(): string;\n public selectDistinct(): boolean {\n return false;\n }\n public abstract genFromJoin(): string;\n public abstract genWhere(bindVals?: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string;\n public abstract genOrderBy(): string;\n}\n\nclass AtAndFromToECSQLGenImpl extends ECSQLGenImpl {\n public genSelect(): string {\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart) StartDistanceAlong, \" +\n \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.ToPosition.DistanceAlongFromStart) StopDistanceAlong, \" +\n \"coalesce(AtLocation.ECInstanceId, FromToLocation.ECInstanceId) LocationAspectId \";\n }\n public override selectDistinct(): boolean {\n return true;\n }\n public genFromJoin(): string {\n return \"LEFT JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \" +\n \"LEFT JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\n }\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\n\n let ecSql = \"\";\n if (from !== undefined && to !== undefined) {\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) \" + \"OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?) \";\n\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n } else if (from !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? \";\n\n bindVals.push(from);\n bindVals.push(from);\n bindVals.push(from);\n } else if (to !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? \";\n\n bindVals.push(to);\n bindVals.push(to);\n bindVals.push(to);\n } else {\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL) OR \";\n ecSql += \"(FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL) \";\n }\n\n return ecSql;\n }\n public genOrderBy(): string {\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart)\";\n }\n}\n\nclass FromToECSQLGenImpl extends ECSQLGenImpl {\n public genSelect(): string {\n return \"FromToLocation.FromPosition.DistanceAlongFromStart StartDistanceAlong, FromToLocation.ToPosition.DistanceAlongFromStart StopDistanceAlong, FromToLocation.ECInstanceId LocationAspectId \";\n }\n public genFromJoin(): string {\n return \"INNER JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\n }\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\n\n let ecSql = \"\";\n if (from !== undefined && to !== undefined) {\n ecSql += \"AND ((FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?)) \";\n\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n } else if (from !== undefined) {\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ?)\";\n\n bindVals.push(from);\n bindVals.push(from);\n } else if (to !== undefined) {\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) \";\n\n bindVals.push(to);\n bindVals.push(to);\n } else {\n ecSql += \"FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL \";\n }\n\n return ecSql;\n }\n public genOrderBy(): string {\n return \"FromToLocation.FromPosition.DistanceAlongFromStart\";\n }\n}\n\nclass AtECSQLGenImpl extends ECSQLGenImpl {\n public genSelect(): string {\n return \"AtLocation.AtPosition.DistanceAlongFromStart StartDistanceAlong, AtLocation.AtPosition.DistanceAlongFromStart StopDistanceAlong, AtLocation.ECInstanceId LocationAspectId \";\n }\n public genFromJoin(): string {\n return \"INNER JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \";\n }\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\n\n let ecSql = \"\";\n if (from !== undefined && to !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? \";\n\n bindVals.push(from);\n bindVals.push(to);\n } else if (from !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? \";\n\n bindVals.push(from);\n } else if (to !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? \";\n\n bindVals.push(to);\n } else\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL \";\n\n return ecSql;\n }\n public genOrderBy(): string {\n return \"AtLocation.AtPosition.DistanceAlongFromStart\";\n }\n}\n\nclass QueryLinearLocationsECSQLGen {\n private readonly _params: QueryParams;\n private _ecSql: string;\n\n private _addSelectClause(impl: ECSQLGenImpl): void {\n let select = \"SELECT \";\n\n if (impl.selectDistinct())\n select += \"DISTINCT \";\n\n select += \"LinearlyLocated.InstanceId LinearlyLocatedId, printf('%s:%s', meta.ECSchemaDef.Name, meta.ECClassDef.Name) LinearlyLocatedClassFullName, \";\n select += impl.genSelect();\n\n this._ecSql += select;\n }\n\n private _parseClassFullName(classFullName: string): [string, string] | undefined {\n const parts = classFullName.split(\":\");\n if (parts.length !== 2)\n return undefined;\n\n return [parts[0], parts[1]];\n }\n\n private _genLinearlyLocated(): string {\n return \"meta.ECSchemaDef JOIN meta.ECClassDef USING meta.SchemaOwnsClasses JOIN \" +\n \"(SELECT coalesce(Located.TargetECInstanceId, Along.SourceECInstanceId) InstanceId, \" +\n \"coalesce(Located.TargetECClassId, Along.SourceECClassId) ClassId \" +\n \"FROM LinearReferencing.ILinearlyLocatedAlongILinearElement Along LEFT JOIN \" +\n \"LinearReferencing.ILinearLocationLocatesElement Located ON Along.SourceECInstanceId = Located.SourceECInstanceId \" +\n \"WHERE Along.TargetECInstanceId = ?) LinearlyLocated ON meta.ECClassDef.ECInstanceId = LinearlyLocated.ClassId \";\n }\n\n private _addFromClause(impl: ECSQLGenImpl/* bvector<double>& bindVals */): void {\n let from = \"FROM \";\n from += this._genLinearlyLocated();\n from += impl.genFromJoin();\n\n this._ecSql += from;\n }\n\n private _addWhereClause(impl: ECSQLGenImpl, bindVals: any[]) {\n let where = \"WHERE \";\n\n where += impl.genWhere(\n bindVals,\n this._params.fromDistanceAlong,\n (this._params.fromComparisonOption === undefined ||\n this._params.fromComparisonOption === ComparisonOption.Inclusive),\n this._params.toDistanceAlong,\n (this._params.toComparisonOption === undefined ||\n this._params.toComparisonOption === ComparisonOption.Inclusive));\n\n if (this._params.linearlyLocatedClassFullNames !== undefined) {\n if (where.length > 6)\n where += \"AND \";\n\n if (1 === this._params.linearlyLocatedClassFullNames.length) {\n const classFullName = this._params.linearlyLocatedClassFullNames[0];\n const schemaNameClassName = this._parseClassFullName(classFullName);\n if (schemaNameClassName === undefined)\n throw new IModelError(0, \"Invalid full class name\");\n\n where += `meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}' `;\n } else if (1 < this._params.linearlyLocatedClassFullNames.length) {\n where += \"(\";\n for (const classFullName of this._params.linearlyLocatedClassFullNames) {\n if (classFullName === undefined)\n continue;\n\n const schemaNameClassName = this._parseClassFullName(classFullName);\n if (schemaNameClassName === undefined)\n continue;\n\n where += `(meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}') OR `;\n }\n\n where = where.substring(0, where.length - 4); // Removing last OR\n where += \") \";\n }\n }\n\n this._ecSql += where;\n }\n\n private _addOrderByClause(impl: ECSQLGenImpl): void {\n let orderBy = \"ORDER BY \";\n orderBy += impl.genOrderBy();\n\n this._ecSql += orderBy;\n }\n\n private _createImpl(): ECSQLGenImpl {\n if (this._params.linearlyReferencedLocationTypeFilter === undefined ||\n this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.Any) {\n return new AtAndFromToECSQLGenImpl();\n } else if (this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.FromTo) {\n return new FromToECSQLGenImpl();\n } else {\n return new AtECSQLGenImpl();\n }\n }\n\n public constructor(params: QueryParams) {\n this._params = params;\n this._ecSql = \"\";\n }\n\n public generate(linearElementId: Id64String): [string, any[]] {\n this._ecSql = \"\";\n const impl = this._createImpl();\n\n const bindVals: any[] = [linearElementId];\n this._addSelectClause(impl);\n this._addFromClause(impl);\n this._addWhereClause(impl, bindVals);\n this._addOrderByClause(impl);\n\n return [this._ecSql, bindVals];\n }\n}\n\n/** A class offering services for LinearlyLocated elements.\n * @beta\n */\nexport class LinearlyLocated {\n private static insertBasic(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String): Id64String {\n const newId = iModel.elements.insertElement(elProps);\n\n const linearlyLocatedAlongLinearElement =\n ILinearlyLocatedAlongILinearElement.create(iModel, newId, linearElementId);\n linearlyLocatedAlongLinearElement.insert();\n\n return newId;\n }\n\n /** Insert a new LinearlyLocated element into an iModel at a specific location along an existing Linear-Element.\n * @param iModel The iModel to insert the new element into.\n * @param elProps The properties of the new element.\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\n * @param atPosition Linear position.\n * @returns The newly inserted element's Id.\n * @throws [[IModelError]] if unable to insert the element.\n */\n public static insertAt(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\n atPosition: LinearlyReferencedAtLocationProps): Id64String {\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\n\n LinearlyReferencedAtLocation.insert(iModel, newId, atPosition.atPosition,\n (atPosition.fromReferent === undefined) ? undefined : atPosition.fromReferent.id);\n\n return newId;\n }\n\n /** Insert a new LinearlyLocated element into an iModel at a specific from-to location along an existing Linear-Element.\n * @param iModel The iModel to insert the new element into.\n * @param elProps The properties of the new element.\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\n * @param fromToPosition Linear position.\n * @returns The newly inserted element's Id.\n * @throws [[IModelError]] if unable to insert the element.\n */\n public static insertFromTo(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\n fromToPosition: LinearlyReferencedFromToLocationProps): Id64String {\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\n\n LinearlyReferencedFromToLocation.insert(iModel, newId,\n fromToPosition.fromPosition, fromToPosition.toPosition,\n (fromToPosition.fromPositionFromReferent === undefined) ? undefined : fromToPosition.fromPositionFromReferent.id,\n (fromToPosition.toPositionFromReferent === undefined) ? undefined : fromToPosition.toPositionFromReferent.id);\n\n return newId;\n }\n\n private static getLinearLocations<T>(iModel: IModelDb, linearlyLocatedElementId: Id64String, fullClassName: string): T[] {\n const aspects: ElementAspect[] =\n iModel.elements.getAspects(linearlyLocatedElementId, fullClassName);\n\n if (aspects.length === 0)\n return [];\n\n const retVal: T[] = [];\n for (const aspect of aspects) {\n const linearAspect = (aspect as unknown) as T;\n retVal.push(linearAspect);\n }\n\n return retVal;\n }\n\n private static queryFirstLinearLocationAspectId(iModel: IModelDb, linearlyLocatedElementId: Id64String, className: string): Id64String | undefined {\n let aspectId: Id64String | undefined;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(`SELECT ECInstanceId FROM LinearReferencing.${className} WHERE Element.Id=? LIMIT 1`, (stmt: ECSqlStatement) => {\n stmt.bindId(1, linearlyLocatedElementId);\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\n aspectId = stmt.getValue(0).getId();\n });\n\n return aspectId;\n }\n\n /** Query for LinearlyReferenced AtLocation aspects owned by the specified LinearlyLocated Element.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\n * @returns Returns an array of LinearlyReferencedAtLocation.\n * @throws [[IModelError]]\n */\n public static getAtLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation[] {\n return this.getLinearLocations<LinearlyReferencedAtLocation>(\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedAtLocation\");\n }\n\n /** Query for the single LinearlyReferenced AtLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getAtLocations]] instead.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\n * @returns Returns an LinearlyReferencedAtLocation or undefined is none is found.\n * @throws [[IModelError]]\n */\n public static getAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation | undefined {\n const linearLocations = this.getAtLocations(iModel, linearlyLocatedElementId);\n if (linearLocations.length === 0)\n return undefined;\n else {\n assert(linearLocations.length === 1);\n return linearLocations[0];\n }\n }\n\n /** Update an existing LinearlyReferencedAtLocation aspect within the iModel.\n * @param iModel The iModel to update.\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\n * @param linearLocationProps The properties to use to update the LinearlyReferencedAtLocation aspect.\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\n * @throws [[IModelError]]\n */\n public static updateAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedAtLocationProps,\n aspectId?: Id64String): void {\n let linearLocAspectId: Id64String;\n if (aspectId !== undefined)\n linearLocAspectId = aspectId;\n else {\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedAtLocation\")!;\n }\n\n const linearLocationAspectProps: LinearlyReferencedAtLocationAspectProps = {\n id: linearLocAspectId,\n element: { id: linearlyLocatedElementId },\n classFullName: \"LinearReferencing:LinearlyReferencedAtLocation\",\n atPosition: linearLocationProps.atPosition,\n fromReferent: linearLocationProps.fromReferent,\n };\n\n iModel.elements.updateAspect(linearLocationAspectProps);\n }\n\n /** Update an existing LinearlyReferencedFromToLocation aspect within the iModel.\n * @param iModel The iModel to update.\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\n * @param linearLocationProps The properties to use to update the LinearlyReferencedFromToLocation aspect.\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\n * @throws [[IModelError]]\n */\n public static updateFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedFromToLocationProps,\n aspectId?: Id64String): void {\n let linearLocAspectId: Id64String;\n if (aspectId !== undefined)\n linearLocAspectId = aspectId;\n else {\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedFromToLocation\")!;\n }\n\n const linearLocationAspectProps: LinearlyReferencedFromToLocationAspectProps = {\n id: linearLocAspectId,\n element: { id: linearlyLocatedElementId, relClassName: \"LinearReferencing:ILinearlyLocatedOwnsFromToLocations\" },\n classFullName: \"LinearReferencing:LinearlyReferencedFromToLocation\",\n fromPosition: linearLocationProps.fromPosition,\n fromPositionFromReferent: linearLocationProps.fromPositionFromReferent,\n toPosition: linearLocationProps.toPosition,\n toPositionFromReferent: linearLocationProps.toPositionFromReferent,\n };\n\n iModel.elements.updateAspect(linearLocationAspectProps);\n }\n\n /** Query for the Id of the Linear-Element along which the specified LinearlyLocated Element is located.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query a Linear-Element for.\n * @returns Returns the Id of the Linear-Element or undefined is none is assigned.\n */\n public static getLinearElementId(iModel: IModelDb, linearlyLocatedElementId: Id64String): Id64String | undefined {\n let linearElementId: Id64String | undefined;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(\"SELECT TargetECInstanceId FROM LinearReferencing.ILinearlyLocatedAlongILinearElement WHERE SourceECInstanceId = ?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, linearlyLocatedElementId);\n\n if (DbResult.BE_SQLITE_ROW === stmt.step())\n linearElementId = stmt.getValue(0).getId();\n else\n linearElementId = undefined;\n });\n\n return linearElementId;\n }\n\n /** Query for LinearlyReferenced FromToLocation aspects owned by the specified LinearlyLocated Element.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\n * @returns Returns an array of LinearlyReferencedFromToLocation.\n * @throws [[IModelError]]\n */\n public static getFromToLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation[] {\n return this.getLinearLocations<LinearlyReferencedFromToLocation>(\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedFromToLocation\");\n }\n\n /** Query for the single LinearlyReferenced FromToLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getFromToLocations]] instead.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\n * @returns Returns an LinearlyReferencedFromToLocation or undefined is none is found.\n * @throws [[IModelError]]\n */\n public static getFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation | undefined {\n const linearLocations = this.getFromToLocations(iModel, linearlyLocatedElementId);\n if (linearLocations.length === 0)\n return undefined;\n else {\n assert(linearLocations.length === 1);\n return linearLocations[0];\n }\n }\n}\n\n/** Base interface to optionally be implemented by Elements inherently Linearly-Located. Implementors should choose the\n * appropriate sub-interface rather than implementing LinearlyLocatedBase directly.\n * @beta\n */\nexport interface LinearlyLocatedBase {\n getLinearElementId(): Id64String | undefined;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single at-position.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedSingleAt extends LinearlyLocatedBase {\n getAtLocation(): LinearlyReferencedAtLocation | undefined;\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId?: Id64String): void;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always at-positions.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedMultipleAt extends LinearlyLocatedBase {\n getAtLocations(): LinearlyReferencedAtLocation[];\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId: Id64String): void;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single from-to-position.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedSingleFromTo extends LinearlyLocatedBase {\n getFromToLocation(): LinearlyReferencedFromToLocation | undefined;\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId?: Id64String): void;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always from-to-positions.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedMultipleFromTo extends LinearlyLocatedBase {\n getFromToLocations(): LinearlyReferencedFromToLocation[];\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId: Id64String): void;\n}\n\n/** A class offering services for linearly-located data along a Linear-Element.\n * @beta\n */\nexport class LinearElement {\n /** Query for LinearLocationReferences based on specified query parameters.\n * @returns Returns an array of LinearLocationReferences.\n * @throws [[IModelError]]\n */\n public static queryLinearLocations(iModel: IModelDb, linearElementId: Id64String, queryParams: QueryParams): LinearLocationReference[] {\n const ecSqlGen = new QueryLinearLocationsECSQLGen(queryParams);\n const ecsqlAndBindVals = ecSqlGen.generate(linearElementId);\n\n const linearLocationRefs: LinearLocationReference[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(ecsqlAndBindVals[0], (stmt: ECSqlStatement) => {\n stmt.bindValues(ecsqlAndBindVals[1]);\n\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const linearLocationRef: LinearLocationReference = {\n linearlyLocatedId: stmt.getValue(0).getId(),\n linearlyLocatedClassFullName: stmt.getValue(1).getString(),\n startDistanceAlong: stmt.getValue(2).getDouble(),\n stopDistanceAlong: stmt.getValue(3).getDouble(),\n locationAspectId: stmt.getValue(4).getId(),\n };\n\n linearLocationRefs.push(linearLocationRef);\n }\n });\n\n return linearLocationRefs;\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingElements.js","sourceRoot":"","sources":["../../src/LinearReferencingElements.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 LinearReferencing\r\n */\r\n\r\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\r\nimport { ECSqlStatement, ElementAspect, IModelDb, PhysicalElement, SpatialLocationElement } from \"@itwin/core-backend\";\r\nimport { Code, ElementProps, GeometricElement3dProps, IModelError, PhysicalElementProps, RelatedElement } from \"@itwin/core-common\";\r\nimport {\r\n ComparisonOption, LinearLocationReference, LinearlyLocatedAttributionProps, LinearlyReferencedAtLocationAspectProps,\r\n LinearlyReferencedAtLocationProps, LinearlyReferencedFromToLocationAspectProps, LinearlyReferencedFromToLocationProps,\r\n LinearlyReferencedLocationType, QueryParams, ReferentElementProps,\r\n} from \"@itwin/linear-referencing-common\";\r\nimport { LinearlyReferencedAtLocation, LinearlyReferencedFromToLocation } from \"./LinearReferencingElementAspects\";\r\nimport {\r\n ILinearLocationLocatesElement, ILinearlyLocatedAlongILinearElement, ILinearlyLocatedAttributesElement, IReferentReferencesElement,\r\n} from \"./LinearReferencingRelationships\";\r\n\r\n/** Base class for Spatial Location Element subclasses representing properties whose value is located along a Linear-Element and only applies to a portion of an Element.\r\n * @beta\r\n */\r\nexport abstract class LinearlyLocatedAttribution extends SpatialLocationElement {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyLocatedAttribution\"; }\r\n\r\n public attributedElement?: ILinearlyLocatedAttributesElement;\r\n\r\n public constructor(props: LinearlyLocatedAttributionProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.attributedElement = RelatedElement.fromJSON(props.attributedElement);\r\n }\r\n\r\n public getLinearElementId(): Id64String | undefined {\r\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\r\n }\r\n}\r\n\r\n/** Base class for Spatial Location Element implementations that are linearly located along a Linear-Element.\r\n * @beta\r\n */\r\nexport abstract class LinearLocationElement extends SpatialLocationElement implements LinearlyLocatedBase {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearLocationElement\"; }\r\n\r\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n\r\n public getLinearElementId(): Id64String | undefined {\r\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\r\n }\r\n}\r\n\r\n/** Linear Referencing Location attached to an Element not inherently Linearly Referenced.\r\n * @beta\r\n */\r\nexport class LinearLocation extends LinearLocationElement implements LinearlyLocatedBase {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearLocation\"; }\r\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n\r\n private static toProps(modelId: Id64String, categoryId: Id64String): GeometricElement3dProps {\r\n const props: GeometricElement3dProps = {\r\n classFullName: LinearLocation.classFullName,\r\n category: categoryId,\r\n model: modelId,\r\n code: Code.createEmpty(),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String): LinearLocation {\r\n return new LinearLocation(this.toProps(modelId, categoryId), iModel);\r\n }\r\n\r\n public static insertFromTo(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\r\n fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertFromTo(iModel, this.toProps(modelId, categoryId), linearElementId, fromToPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n\r\n public insertFromTo(iModel: IModelDb, linearElementId: Id64String, fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertFromTo(iModel, this.toJSON(), linearElementId, fromToPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n\r\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\r\n atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId), linearElementId, atPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n\r\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n}\r\n\r\n/** Base class for Physical Elements that are inherently linearly located along a Linear-Element.\r\n * @beta\r\n */\r\nexport abstract class LinearPhysicalElement extends PhysicalElement {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearPhysicalElement\"; }\r\n\r\n public constructor(props: PhysicalElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n}\r\n\r\n/** Spatial Location Element that can play the role of a Referent (known location along a Linear-Element).\r\n * @beta\r\n */\r\nexport abstract class ReferentElement extends SpatialLocationElement implements LinearlyLocatedBase {\r\n /** @internal */\r\n public static override get className(): string { return \"ReferentElement\"; }\r\n\r\n public referencedElement?: IReferentReferencesElement;\r\n\r\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.referencedElement = RelatedElement.fromJSON(props.referencedElement);\r\n }\r\n\r\n public getLinearElementId(): Id64String | undefined {\r\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\r\n }\r\n}\r\n\r\n/** Referent-implementation turning any bis:SpatialElement not inherently Linearly-Referenced into a Referent for Linear-Referencing purposes.\r\n * @beta\r\n */\r\nexport class Referent extends ReferentElement {\r\n /** @internal */\r\n public static override get className(): string { return \"Referent\"; }\r\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n\r\n private static toProps(modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): ReferentElementProps {\r\n const props: ReferentElementProps = {\r\n classFullName: LinearLocation.classFullName,\r\n category: categoryId,\r\n model: modelId,\r\n code: Code.createEmpty(),\r\n referencedElement: new IReferentReferencesElement(referencedElementId),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): Referent {\r\n return new Referent(this.toProps(modelId, categoryId, referencedElementId), iModel);\r\n }\r\n\r\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\r\n atPosition: LinearlyReferencedAtLocationProps, referencedElementId: Id64String): Id64String {\r\n return LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId, referencedElementId), linearElementId, atPosition);\r\n }\r\n\r\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps): Id64String {\r\n return LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\r\n }\r\n}\r\n\r\nabstract class ECSQLGenImpl {\r\n public abstract genSelect(): string;\r\n public selectDistinct(): boolean {\r\n return false;\r\n }\r\n public abstract genFromJoin(): string;\r\n public abstract genWhere(bindVals?: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string;\r\n public abstract genOrderBy(): string;\r\n}\r\n\r\nclass AtAndFromToECSQLGenImpl extends ECSQLGenImpl {\r\n public genSelect(): string {\r\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart) StartDistanceAlong, \" +\r\n \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.ToPosition.DistanceAlongFromStart) StopDistanceAlong, \" +\r\n \"coalesce(AtLocation.ECInstanceId, FromToLocation.ECInstanceId) LocationAspectId \";\r\n }\r\n public override selectDistinct(): boolean {\r\n return true;\r\n }\r\n public genFromJoin(): string {\r\n return \"LEFT JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \" +\r\n \"LEFT JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\r\n }\r\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\r\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\r\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\r\n\r\n let ecSql = \"\";\r\n if (from !== undefined && to !== undefined) {\r\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) \" + \"OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?) \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n } else if (from !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(from);\r\n bindVals.push(from);\r\n } else if (to !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(to);\r\n bindVals.push(to);\r\n bindVals.push(to);\r\n } else {\r\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL) OR \";\r\n ecSql += \"(FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL) \";\r\n }\r\n\r\n return ecSql;\r\n }\r\n public genOrderBy(): string {\r\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart)\";\r\n }\r\n}\r\n\r\nclass FromToECSQLGenImpl extends ECSQLGenImpl {\r\n public genSelect(): string {\r\n return \"FromToLocation.FromPosition.DistanceAlongFromStart StartDistanceAlong, FromToLocation.ToPosition.DistanceAlongFromStart StopDistanceAlong, FromToLocation.ECInstanceId LocationAspectId \";\r\n }\r\n public genFromJoin(): string {\r\n return \"INNER JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\r\n }\r\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\r\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\r\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\r\n\r\n let ecSql = \"\";\r\n if (from !== undefined && to !== undefined) {\r\n ecSql += \"AND ((FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?)) \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n } else if (from !== undefined) {\r\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ?)\";\r\n\r\n bindVals.push(from);\r\n bindVals.push(from);\r\n } else if (to !== undefined) {\r\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) \";\r\n\r\n bindVals.push(to);\r\n bindVals.push(to);\r\n } else {\r\n ecSql += \"FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL \";\r\n }\r\n\r\n return ecSql;\r\n }\r\n public genOrderBy(): string {\r\n return \"FromToLocation.FromPosition.DistanceAlongFromStart\";\r\n }\r\n}\r\n\r\nclass AtECSQLGenImpl extends ECSQLGenImpl {\r\n public genSelect(): string {\r\n return \"AtLocation.AtPosition.DistanceAlongFromStart StartDistanceAlong, AtLocation.AtPosition.DistanceAlongFromStart StopDistanceAlong, AtLocation.ECInstanceId LocationAspectId \";\r\n }\r\n public genFromJoin(): string {\r\n return \"INNER JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \";\r\n }\r\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\r\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\r\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\r\n\r\n let ecSql = \"\";\r\n if (from !== undefined && to !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n } else if (from !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(from);\r\n } else if (to !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(to);\r\n } else\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL \";\r\n\r\n return ecSql;\r\n }\r\n public genOrderBy(): string {\r\n return \"AtLocation.AtPosition.DistanceAlongFromStart\";\r\n }\r\n}\r\n\r\nclass QueryLinearLocationsECSQLGen {\r\n private readonly _params: QueryParams;\r\n private _ecSql: string;\r\n\r\n private _addSelectClause(impl: ECSQLGenImpl): void {\r\n let select = \"SELECT \";\r\n\r\n if (impl.selectDistinct())\r\n select += \"DISTINCT \";\r\n\r\n select += \"LinearlyLocated.InstanceId LinearlyLocatedId, printf('%s:%s', meta.ECSchemaDef.Name, meta.ECClassDef.Name) LinearlyLocatedClassFullName, \";\r\n select += impl.genSelect();\r\n\r\n this._ecSql += select;\r\n }\r\n\r\n private _parseClassFullName(classFullName: string): [string, string] | undefined {\r\n const parts = classFullName.split(\":\");\r\n if (parts.length !== 2)\r\n return undefined;\r\n\r\n return [parts[0], parts[1]];\r\n }\r\n\r\n private _genLinearlyLocated(): string {\r\n return \"meta.ECSchemaDef JOIN meta.ECClassDef USING meta.SchemaOwnsClasses JOIN \" +\r\n \"(SELECT coalesce(Located.TargetECInstanceId, Along.SourceECInstanceId) InstanceId, \" +\r\n \"coalesce(Located.TargetECClassId, Along.SourceECClassId) ClassId \" +\r\n \"FROM LinearReferencing.ILinearlyLocatedAlongILinearElement Along LEFT JOIN \" +\r\n \"LinearReferencing.ILinearLocationLocatesElement Located ON Along.SourceECInstanceId = Located.SourceECInstanceId \" +\r\n \"WHERE Along.TargetECInstanceId = ?) LinearlyLocated ON meta.ECClassDef.ECInstanceId = LinearlyLocated.ClassId \";\r\n }\r\n\r\n private _addFromClause(impl: ECSQLGenImpl/* bvector<double>& bindVals */): void {\r\n let from = \"FROM \";\r\n from += this._genLinearlyLocated();\r\n from += impl.genFromJoin();\r\n\r\n this._ecSql += from;\r\n }\r\n\r\n private _addWhereClause(impl: ECSQLGenImpl, bindVals: any[]) {\r\n let where = \"WHERE \";\r\n\r\n where += impl.genWhere(\r\n bindVals,\r\n this._params.fromDistanceAlong,\r\n (this._params.fromComparisonOption === undefined ||\r\n this._params.fromComparisonOption === ComparisonOption.Inclusive),\r\n this._params.toDistanceAlong,\r\n (this._params.toComparisonOption === undefined ||\r\n this._params.toComparisonOption === ComparisonOption.Inclusive));\r\n\r\n if (this._params.linearlyLocatedClassFullNames !== undefined) {\r\n if (where.length > 6)\r\n where += \"AND \";\r\n\r\n if (1 === this._params.linearlyLocatedClassFullNames.length) {\r\n const classFullName = this._params.linearlyLocatedClassFullNames[0];\r\n const schemaNameClassName = this._parseClassFullName(classFullName);\r\n if (schemaNameClassName === undefined)\r\n throw new IModelError(0, \"Invalid full class name\");\r\n\r\n where += `meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}' `;\r\n } else if (1 < this._params.linearlyLocatedClassFullNames.length) {\r\n where += \"(\";\r\n for (const classFullName of this._params.linearlyLocatedClassFullNames) {\r\n if (classFullName === undefined)\r\n continue;\r\n\r\n const schemaNameClassName = this._parseClassFullName(classFullName);\r\n if (schemaNameClassName === undefined)\r\n continue;\r\n\r\n where += `(meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}') OR `;\r\n }\r\n\r\n where = where.substring(0, where.length - 4); // Removing last OR\r\n where += \") \";\r\n }\r\n }\r\n\r\n this._ecSql += where;\r\n }\r\n\r\n private _addOrderByClause(impl: ECSQLGenImpl): void {\r\n let orderBy = \"ORDER BY \";\r\n orderBy += impl.genOrderBy();\r\n\r\n this._ecSql += orderBy;\r\n }\r\n\r\n private _createImpl(): ECSQLGenImpl {\r\n if (this._params.linearlyReferencedLocationTypeFilter === undefined ||\r\n this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.Any) {\r\n return new AtAndFromToECSQLGenImpl();\r\n } else if (this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.FromTo) {\r\n return new FromToECSQLGenImpl();\r\n } else {\r\n return new AtECSQLGenImpl();\r\n }\r\n }\r\n\r\n public constructor(params: QueryParams) {\r\n this._params = params;\r\n this._ecSql = \"\";\r\n }\r\n\r\n public generate(linearElementId: Id64String): [string, any[]] {\r\n this._ecSql = \"\";\r\n const impl = this._createImpl();\r\n\r\n const bindVals: any[] = [linearElementId];\r\n this._addSelectClause(impl);\r\n this._addFromClause(impl);\r\n this._addWhereClause(impl, bindVals);\r\n this._addOrderByClause(impl);\r\n\r\n return [this._ecSql, bindVals];\r\n }\r\n}\r\n\r\n/** A class offering services for LinearlyLocated elements.\r\n * @beta\r\n */\r\nexport class LinearlyLocated {\r\n private static insertBasic(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String): Id64String {\r\n const newId = iModel.elements.insertElement(elProps);\r\n\r\n const linearlyLocatedAlongLinearElement =\r\n ILinearlyLocatedAlongILinearElement.create(iModel, newId, linearElementId);\r\n linearlyLocatedAlongLinearElement.insert();\r\n\r\n return newId;\r\n }\r\n\r\n /** Insert a new LinearlyLocated element into an iModel at a specific location along an existing Linear-Element.\r\n * @param iModel The iModel to insert the new element into.\r\n * @param elProps The properties of the new element.\r\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\r\n * @param atPosition Linear position.\r\n * @returns The newly inserted element's Id.\r\n * @throws [[IModelError]] if unable to insert the element.\r\n */\r\n public static insertAt(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\r\n atPosition: LinearlyReferencedAtLocationProps): Id64String {\r\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\r\n\r\n LinearlyReferencedAtLocation.insert(iModel, newId, atPosition.atPosition,\r\n (atPosition.fromReferent === undefined) ? undefined : atPosition.fromReferent.id);\r\n\r\n return newId;\r\n }\r\n\r\n /** Insert a new LinearlyLocated element into an iModel at a specific from-to location along an existing Linear-Element.\r\n * @param iModel The iModel to insert the new element into.\r\n * @param elProps The properties of the new element.\r\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\r\n * @param fromToPosition Linear position.\r\n * @returns The newly inserted element's Id.\r\n * @throws [[IModelError]] if unable to insert the element.\r\n */\r\n public static insertFromTo(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\r\n fromToPosition: LinearlyReferencedFromToLocationProps): Id64String {\r\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\r\n\r\n LinearlyReferencedFromToLocation.insert(iModel, newId,\r\n fromToPosition.fromPosition, fromToPosition.toPosition,\r\n (fromToPosition.fromPositionFromReferent === undefined) ? undefined : fromToPosition.fromPositionFromReferent.id,\r\n (fromToPosition.toPositionFromReferent === undefined) ? undefined : fromToPosition.toPositionFromReferent.id);\r\n\r\n return newId;\r\n }\r\n\r\n private static getLinearLocations<T>(iModel: IModelDb, linearlyLocatedElementId: Id64String, fullClassName: string): T[] {\r\n const aspects: ElementAspect[] =\r\n iModel.elements.getAspects(linearlyLocatedElementId, fullClassName);\r\n\r\n if (aspects.length === 0)\r\n return [];\r\n\r\n const retVal: T[] = [];\r\n for (const aspect of aspects) {\r\n const linearAspect = (aspect as unknown) as T;\r\n retVal.push(linearAspect);\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n private static queryFirstLinearLocationAspectId(iModel: IModelDb, linearlyLocatedElementId: Id64String, className: string): Id64String | undefined {\r\n let aspectId: Id64String | undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.withPreparedStatement(`SELECT ECInstanceId FROM LinearReferencing.${className} WHERE Element.Id=? LIMIT 1`, (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, linearlyLocatedElementId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n aspectId = stmt.getValue(0).getId();\r\n });\r\n\r\n return aspectId;\r\n }\r\n\r\n /** Query for LinearlyReferenced AtLocation aspects owned by the specified LinearlyLocated Element.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\r\n * @returns Returns an array of LinearlyReferencedAtLocation.\r\n * @throws [[IModelError]]\r\n */\r\n public static getAtLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation[] {\r\n return this.getLinearLocations<LinearlyReferencedAtLocation>(\r\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedAtLocation\");\r\n }\r\n\r\n /** Query for the single LinearlyReferenced AtLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getAtLocations]] instead.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\r\n * @returns Returns an LinearlyReferencedAtLocation or undefined is none is found.\r\n * @throws [[IModelError]]\r\n */\r\n public static getAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation | undefined {\r\n const linearLocations = this.getAtLocations(iModel, linearlyLocatedElementId);\r\n if (linearLocations.length === 0)\r\n return undefined;\r\n else {\r\n assert(linearLocations.length === 1);\r\n return linearLocations[0];\r\n }\r\n }\r\n\r\n /** Update an existing LinearlyReferencedAtLocation aspect within the iModel.\r\n * @param iModel The iModel to update.\r\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\r\n * @param linearLocationProps The properties to use to update the LinearlyReferencedAtLocation aspect.\r\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\r\n * @throws [[IModelError]]\r\n */\r\n public static updateAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedAtLocationProps,\r\n aspectId?: Id64String): void {\r\n let linearLocAspectId: Id64String;\r\n if (aspectId !== undefined)\r\n linearLocAspectId = aspectId;\r\n else {\r\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedAtLocation\")!;\r\n }\r\n\r\n const linearLocationAspectProps: LinearlyReferencedAtLocationAspectProps = {\r\n id: linearLocAspectId,\r\n element: { id: linearlyLocatedElementId },\r\n classFullName: \"LinearReferencing:LinearlyReferencedAtLocation\",\r\n atPosition: linearLocationProps.atPosition,\r\n fromReferent: linearLocationProps.fromReferent,\r\n };\r\n\r\n iModel.elements.updateAspect(linearLocationAspectProps);\r\n }\r\n\r\n /** Update an existing LinearlyReferencedFromToLocation aspect within the iModel.\r\n * @param iModel The iModel to update.\r\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\r\n * @param linearLocationProps The properties to use to update the LinearlyReferencedFromToLocation aspect.\r\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\r\n * @throws [[IModelError]]\r\n */\r\n public static updateFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedFromToLocationProps,\r\n aspectId?: Id64String): void {\r\n let linearLocAspectId: Id64String;\r\n if (aspectId !== undefined)\r\n linearLocAspectId = aspectId;\r\n else {\r\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedFromToLocation\")!;\r\n }\r\n\r\n const linearLocationAspectProps: LinearlyReferencedFromToLocationAspectProps = {\r\n id: linearLocAspectId,\r\n element: { id: linearlyLocatedElementId, relClassName: \"LinearReferencing:ILinearlyLocatedOwnsFromToLocations\" },\r\n classFullName: \"LinearReferencing:LinearlyReferencedFromToLocation\",\r\n fromPosition: linearLocationProps.fromPosition,\r\n fromPositionFromReferent: linearLocationProps.fromPositionFromReferent,\r\n toPosition: linearLocationProps.toPosition,\r\n toPositionFromReferent: linearLocationProps.toPositionFromReferent,\r\n };\r\n\r\n iModel.elements.updateAspect(linearLocationAspectProps);\r\n }\r\n\r\n /** Query for the Id of the Linear-Element along which the specified LinearlyLocated Element is located.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query a Linear-Element for.\r\n * @returns Returns the Id of the Linear-Element or undefined is none is assigned.\r\n */\r\n public static getLinearElementId(iModel: IModelDb, linearlyLocatedElementId: Id64String): Id64String | undefined {\r\n let linearElementId: Id64String | undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.withPreparedStatement(\"SELECT TargetECInstanceId FROM LinearReferencing.ILinearlyLocatedAlongILinearElement WHERE SourceECInstanceId = ?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, linearlyLocatedElementId);\r\n\r\n if (DbResult.BE_SQLITE_ROW === stmt.step())\r\n linearElementId = stmt.getValue(0).getId();\r\n else\r\n linearElementId = undefined;\r\n });\r\n\r\n return linearElementId;\r\n }\r\n\r\n /** Query for LinearlyReferenced FromToLocation aspects owned by the specified LinearlyLocated Element.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\r\n * @returns Returns an array of LinearlyReferencedFromToLocation.\r\n * @throws [[IModelError]]\r\n */\r\n public static getFromToLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation[] {\r\n return this.getLinearLocations<LinearlyReferencedFromToLocation>(\r\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedFromToLocation\");\r\n }\r\n\r\n /** Query for the single LinearlyReferenced FromToLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getFromToLocations]] instead.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\r\n * @returns Returns an LinearlyReferencedFromToLocation or undefined is none is found.\r\n * @throws [[IModelError]]\r\n */\r\n public static getFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation | undefined {\r\n const linearLocations = this.getFromToLocations(iModel, linearlyLocatedElementId);\r\n if (linearLocations.length === 0)\r\n return undefined;\r\n else {\r\n assert(linearLocations.length === 1);\r\n return linearLocations[0];\r\n }\r\n }\r\n}\r\n\r\n/** Base interface to optionally be implemented by Elements inherently Linearly-Located. Implementors should choose the\r\n * appropriate sub-interface rather than implementing LinearlyLocatedBase directly.\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedBase {\r\n getLinearElementId(): Id64String | undefined;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single at-position.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedSingleAt extends LinearlyLocatedBase {\r\n getAtLocation(): LinearlyReferencedAtLocation | undefined;\r\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId?: Id64String): void;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always at-positions.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedMultipleAt extends LinearlyLocatedBase {\r\n getAtLocations(): LinearlyReferencedAtLocation[];\r\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId: Id64String): void;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single from-to-position.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedSingleFromTo extends LinearlyLocatedBase {\r\n getFromToLocation(): LinearlyReferencedFromToLocation | undefined;\r\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId?: Id64String): void;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always from-to-positions.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedMultipleFromTo extends LinearlyLocatedBase {\r\n getFromToLocations(): LinearlyReferencedFromToLocation[];\r\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId: Id64String): void;\r\n}\r\n\r\n/** A class offering services for linearly-located data along a Linear-Element.\r\n * @beta\r\n */\r\nexport class LinearElement {\r\n /** Query for LinearLocationReferences based on specified query parameters.\r\n * @returns Returns an array of LinearLocationReferences.\r\n * @throws [[IModelError]]\r\n */\r\n public static queryLinearLocations(iModel: IModelDb, linearElementId: Id64String, queryParams: QueryParams): LinearLocationReference[] {\r\n const ecSqlGen = new QueryLinearLocationsECSQLGen(queryParams);\r\n const ecsqlAndBindVals = ecSqlGen.generate(linearElementId);\r\n\r\n const linearLocationRefs: LinearLocationReference[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.withPreparedStatement(ecsqlAndBindVals[0], (stmt: ECSqlStatement) => {\r\n stmt.bindValues(ecsqlAndBindVals[1]);\r\n\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const linearLocationRef: LinearLocationReference = {\r\n linearlyLocatedId: stmt.getValue(0).getId(),\r\n linearlyLocatedClassFullName: stmt.getValue(1).getString(),\r\n startDistanceAlong: stmt.getValue(2).getDouble(),\r\n stopDistanceAlong: stmt.getValue(3).getDouble(),\r\n locationAspectId: stmt.getValue(4).getId(),\r\n };\r\n\r\n linearLocationRefs.push(linearLocationRef);\r\n }\r\n });\r\n\r\n return linearLocationRefs;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingRelationships.js","sourceRoot":"","sources":["../../src/LinearReferencingRelationships.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,sDAA8D;AAC9D,oDAAoD;AAEpD;;GAEG;AACH,MAAa,mCAAoC,SAAQ,sCAAuB;IAC9E,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,qCAAqC,CAAC,CAAC,CAAC;CACjG;AAHD,kFAGC;AAED;;GAEG;AACH,MAAa,6BAA8B,SAAQ,sCAAuB;IACxE,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,+BAA+B,CAAC,CAAC,CAAC;CAC3F;AAHD,sEAGC;AAED;;GAEG;AACH,MAAa,8BAA+B,SAAQ,4BAAc;IACzD,MAAM,CAAC,aAAa,GAAG,kDAAkD,CAAC;IACjF,YAAmB,QAAoB,EAAE,eAAuB,8BAA8B,CAAC,aAAa;QAC1G,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACxC,CAAC;;AAJH,wEAKC;AAED;;GAEG;AACH,MAAa,iCAAkC,SAAQ,4BAAc;IAC5D,MAAM,CAAC,aAAa,GAAG,qDAAqD,CAAC;IACpF,YAAmB,mBAA+B,EAAE,eAAuB,iCAAiC,CAAC,aAAa;QACxH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAJH,8EAKC;AAED;;GAEG;AACH,MAAa,0BAA2B,SAAQ,4BAAc;IACrD,MAAM,CAAC,aAAa,GAAG,8CAA8C,CAAC;IAC7E,YAAmB,mBAA+B,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACjH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAJH,gEAKC;AAED;;GAEG;AACH,MAAa,4CAA6C,SAAQ,4BAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACxG,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAJH,oGAKC;AAED;;GAEG;AACH,MAAa,8CAA+C,SAAQ,4BAAc;IACzE,MAAM,CAAC,aAAa,GAAG,kEAAkE,CAAC;IACjG,YAAmB,UAAsB,EAAE,eAAuB,8CAA8C,CAAC,aAAa;QAC5H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAJH,wGAKC;AAED;;GAEG;AACH,MAAa,4CAA6C,SAAQ,4BAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,4CAA4C,CAAC,aAAa;QAC1H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAJH,oGAKC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ElementRefersToElements } from \"@itwin/core-backend\";\nimport { RelatedElement } from \"@itwin/core-common\";\n\n/** Relationship indicating the Linear-Element along which concrete instances mixing-in ILinearlyLocated are located.\n * @beta\n */\nexport class ILinearlyLocatedAlongILinearElement extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"ILinearlyLocatedAlongILinearElement\"; }\n}\n\n/** Relationship indicating bis:Element being linearly-located by a concrete instance mixing-in ILinearLocationElement.\n * @beta\n */\nexport class ILinearLocationLocatesElement extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"ILinearLocationLocatesElement\"; }\n}\n\n/** Relationship associating Linear-Elements with the elements they came from.\n * @beta\n */\nexport class ILinearElementProvidedBySource extends RelatedElement {\n public static classFullName = \"LinearReferencing:ILinearElementProvidedBySource\";\n public constructor(sourceId: Id64String, relClassName: string = ILinearElementProvidedBySource.classFullName) {\n super({ id: sourceId, relClassName });\n }\n}\n\n/** Relationship indicating the bis:Element being attributed by a concrete instance mixing-in ILinearlyLocatedAttribution.\n * @beta\n */\nexport class ILinearlyLocatedAttributesElement extends RelatedElement {\n public static classFullName = \"LinearReferencing:ILinearlyLocatedAttributesElement\";\n public constructor(attributedElementId: Id64String, relClassName: string = ILinearlyLocatedAttributesElement.classFullName) {\n super({ id: attributedElementId, relClassName });\n }\n}\n\n/** Relationship indicating the bis:SpatialElement being used as Referent for Linear Referencing purposes.\n * @beta\n */\nexport class IReferentReferencesElement extends RelatedElement {\n public static classFullName = \"LinearReferencing:IReferentReferencesElement\";\n public constructor(referencedElementId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\n super({ id: referencedElementId, relClassName });\n }\n}\n\n/** Relationship indicating the referent used by a particular linearly-referenced At position.\n * @beta\n */\nexport class LinearlyReferencedAtPositionRefersToReferent extends RelatedElement {\n public static classFullName = \"LinearReferencing:LinearlyReferencedAtPositionRefersToReferent\";\n public constructor(referentId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\n super({ id: referentId, relClassName });\n }\n}\n\n/** Relationship indicating the referent used by a particular linearly-referenced From position.\n * @beta\n */\nexport class LinearlyReferencedFromPositionRefersToReferent extends RelatedElement {\n public static classFullName = \"LinearReferencing:LinearlyReferencedFromPositionRefersToReferent\";\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedFromPositionRefersToReferent.classFullName) {\n super({ id: referentId, relClassName });\n }\n}\n\n/** Relationship indicating the referent used by a particular linearly-referenced To position.\n * @beta\n */\nexport class LinearlyReferencedToPositionRefersToReferent extends RelatedElement {\n public static classFullName = \"LinearReferencing:LinearlyReferencedToPositionRefersToReferent\";\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedToPositionRefersToReferent.classFullName) {\n super({ id: referentId, relClassName });\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingRelationships.js","sourceRoot":"","sources":["../../src/LinearReferencingRelationships.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,sDAA8D;AAC9D,oDAAoD;AAEpD;;GAEG;AACH,MAAa,mCAAoC,SAAQ,sCAAuB;IAC9E,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,qCAAqC,CAAC,CAAC,CAAC;CACjG;AAHD,kFAGC;AAED;;GAEG;AACH,MAAa,6BAA8B,SAAQ,sCAAuB;IACxE,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,+BAA+B,CAAC,CAAC,CAAC;CAC3F;AAHD,sEAGC;AAED;;GAEG;AACH,MAAa,8BAA+B,SAAQ,4BAAc;IACzD,MAAM,CAAC,aAAa,GAAG,kDAAkD,CAAC;IACjF,YAAmB,QAAoB,EAAE,eAAuB,8BAA8B,CAAC,aAAa;QAC1G,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACxC,CAAC;;AAJH,wEAKC;AAED;;GAEG;AACH,MAAa,iCAAkC,SAAQ,4BAAc;IAC5D,MAAM,CAAC,aAAa,GAAG,qDAAqD,CAAC;IACpF,YAAmB,mBAA+B,EAAE,eAAuB,iCAAiC,CAAC,aAAa;QACxH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAJH,8EAKC;AAED;;GAEG;AACH,MAAa,0BAA2B,SAAQ,4BAAc;IACrD,MAAM,CAAC,aAAa,GAAG,8CAA8C,CAAC;IAC7E,YAAmB,mBAA+B,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACjH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAJH,gEAKC;AAED;;GAEG;AACH,MAAa,4CAA6C,SAAQ,4BAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACxG,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAJH,oGAKC;AAED;;GAEG;AACH,MAAa,8CAA+C,SAAQ,4BAAc;IACzE,MAAM,CAAC,aAAa,GAAG,kEAAkE,CAAC;IACjG,YAAmB,UAAsB,EAAE,eAAuB,8CAA8C,CAAC,aAAa;QAC5H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAJH,wGAKC;AAED;;GAEG;AACH,MAAa,4CAA6C,SAAQ,4BAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,4CAA4C,CAAC,aAAa;QAC1H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAJH,oGAKC","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 LinearReferencing\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { ElementRefersToElements } from \"@itwin/core-backend\";\r\nimport { RelatedElement } from \"@itwin/core-common\";\r\n\r\n/** Relationship indicating the Linear-Element along which concrete instances mixing-in ILinearlyLocated are located.\r\n * @beta\r\n */\r\nexport class ILinearlyLocatedAlongILinearElement extends ElementRefersToElements {\r\n /** @internal */\r\n public static override get className(): string { return \"ILinearlyLocatedAlongILinearElement\"; }\r\n}\r\n\r\n/** Relationship indicating bis:Element being linearly-located by a concrete instance mixing-in ILinearLocationElement.\r\n * @beta\r\n */\r\nexport class ILinearLocationLocatesElement extends ElementRefersToElements {\r\n /** @internal */\r\n public static override get className(): string { return \"ILinearLocationLocatesElement\"; }\r\n}\r\n\r\n/** Relationship associating Linear-Elements with the elements they came from.\r\n * @beta\r\n */\r\nexport class ILinearElementProvidedBySource extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:ILinearElementProvidedBySource\";\r\n public constructor(sourceId: Id64String, relClassName: string = ILinearElementProvidedBySource.classFullName) {\r\n super({ id: sourceId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the bis:Element being attributed by a concrete instance mixing-in ILinearlyLocatedAttribution.\r\n * @beta\r\n */\r\nexport class ILinearlyLocatedAttributesElement extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:ILinearlyLocatedAttributesElement\";\r\n public constructor(attributedElementId: Id64String, relClassName: string = ILinearlyLocatedAttributesElement.classFullName) {\r\n super({ id: attributedElementId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the bis:SpatialElement being used as Referent for Linear Referencing purposes.\r\n * @beta\r\n */\r\nexport class IReferentReferencesElement extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:IReferentReferencesElement\";\r\n public constructor(referencedElementId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\r\n super({ id: referencedElementId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the referent used by a particular linearly-referenced At position.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedAtPositionRefersToReferent extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:LinearlyReferencedAtPositionRefersToReferent\";\r\n public constructor(referentId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\r\n super({ id: referentId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the referent used by a particular linearly-referenced From position.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedFromPositionRefersToReferent extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:LinearlyReferencedFromPositionRefersToReferent\";\r\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedFromPositionRefersToReferent.classFullName) {\r\n super({ id: referentId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the referent used by a particular linearly-referenced To position.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedToPositionRefersToReferent extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:LinearlyReferencedToPositionRefersToReferent\";\r\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedToPositionRefersToReferent.classFullName) {\r\n super({ id: referentId, relClassName });\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingSchema.js","sourceRoot":"","sources":["../../src/LinearReferencingSchema.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kCAAkC;AAClC,sDAAqF;AACrF,mEAAmE;AACnE,8DAA8D;AAC9D,wEAAwE;AAExE;;;GAGG;AACH,MAAa,uBAAwB,SAAQ,qBAAM;IAC1C,MAAM,KAAc,UAAU,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAC7E;;;KAGC;IACI,MAAM,KAAK,cAAc,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,6BAAc,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,CAAC;IAClJ,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,sBAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,sBAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,sBAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE7B,4BAAa,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACnD,4BAAa,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAClD,4BAAa,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF;AAjBD,0DAiBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport * as path from \"node:path\";\nimport { ClassRegistry, KnownLocations, Schema, Schemas } from \"@itwin/core-backend\";\nimport * as aspectsModule from \"./LinearReferencingElementAspects\";\nimport * as elementsModule from \"./LinearReferencingElements\";\nimport * as relationshipsModule from \"./LinearReferencingRelationships\";\n\n/** Schema for the LinearReferencing domain.\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\n * @beta\n */\nexport class LinearReferencingSchema extends Schema {\n public static override get schemaName(): string { return \"LinearReferencing\"; }\n /**\n * TODO: Currently the schema file comes from a hardcoded path assuming its delivered with imodeljs-native\n * Look to add a dependency on @bentley/linear-referencing-schema and using require.resolve to obtain the path\n */\n public static get schemaFilePath(): string { return path.join(KnownLocations.nativeAssetsDir, \"ECSchemas\", \"Domain\", \"LinearReferencing.ecschema.xml\"); }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n\n ClassRegistry.registerModule(elementsModule, this);\n ClassRegistry.registerModule(aspectsModule, this);\n ClassRegistry.registerModule(relationshipsModule, this);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingSchema.js","sourceRoot":"","sources":["../../src/LinearReferencingSchema.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kCAAkC;AAClC,sDAAqF;AACrF,mEAAmE;AACnE,8DAA8D;AAC9D,wEAAwE;AAExE;;;GAGG;AACH,MAAa,uBAAwB,SAAQ,qBAAM;IAC1C,MAAM,KAAc,UAAU,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAC7E;;;KAGC;IACI,MAAM,KAAK,cAAc,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,6BAAc,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,CAAC;IAClJ,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,sBAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,sBAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,sBAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE7B,4BAAa,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACnD,4BAAa,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAClD,4BAAa,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF;AAjBD,0DAiBC","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 LinearReferencing\r\n */\r\n\r\nimport * as path from \"node:path\";\r\nimport { ClassRegistry, KnownLocations, Schema, Schemas } from \"@itwin/core-backend\";\r\nimport * as aspectsModule from \"./LinearReferencingElementAspects\";\r\nimport * as elementsModule from \"./LinearReferencingElements\";\r\nimport * as relationshipsModule from \"./LinearReferencingRelationships\";\r\n\r\n/** Schema for the LinearReferencing domain.\r\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\r\n * @beta\r\n */\r\nexport class LinearReferencingSchema extends Schema {\r\n public static override get schemaName(): string { return \"LinearReferencing\"; }\r\n /**\r\n * TODO: Currently the schema file comes from a hardcoded path assuming its delivered with imodeljs-native\r\n * Look to add a dependency on @bentley/linear-referencing-schema and using require.resolve to obtain the path\r\n */\r\n public static get schemaFilePath(): string { return path.join(KnownLocations.nativeAssetsDir, \"ECSchemas\", \"Domain\", \"LinearReferencing.ecschema.xml\"); }\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\r\n Schemas.unregisterSchema(this.schemaName);\r\n Schemas.registerSchema(this);\r\n\r\n ClassRegistry.registerModule(elementsModule, this);\r\n ClassRegistry.registerModule(aspectsModule, this);\r\n ClassRegistry.registerModule(relationshipsModule, this);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"linear-referencing-backend.js","sourceRoot":"","sources":["../../src/linear-referencing-backend.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,oEAAkD;AAClD,8DAA4C;AAC5C,mEAAiD;AACjD,4DAA0C;AAE1C;;GAEG;AAEH;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nexport * from \"./LinearReferencingElementAspects\";\nexport * from \"./LinearReferencingElements\";\nexport * from \"./LinearReferencingRelationships\";\nexport * from \"./LinearReferencingSchema\";\n\n/** @docs-package-description\n * The `@itwin/linear-referencing-backend` package contains classes for working with the LinearReferencing schema on the backend.\n */\n\n/** @docs-group-description LinearReferencing\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\n */\n"]}
1
+ {"version":3,"file":"linear-referencing-backend.js","sourceRoot":"","sources":["../../src/linear-referencing-backend.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;AAE/F,oEAAkD;AAClD,8DAA4C;AAC5C,mEAAiD;AACjD,4DAA0C;AAE1C;;GAEG;AAEH;;GAEG","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\r\nexport * from \"./LinearReferencingElementAspects\";\r\nexport * from \"./LinearReferencingElements\";\r\nexport * from \"./LinearReferencingRelationships\";\r\nexport * from \"./LinearReferencingSchema\";\r\n\r\n/** @docs-package-description\r\n * The `@itwin/linear-referencing-backend` package contains classes for working with the LinearReferencing schema on the backend.\r\n */\r\n\r\n/** @docs-group-description LinearReferencing\r\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\r\n */\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingElementAspects.js","sourceRoot":"","sources":["../../src/LinearReferencingElementAspects.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport { Id64String, JsonUtils } from \"@itwin/core-bentley\";\nimport { ElementMultiAspect, IModelDb } from \"@itwin/core-backend\";\nimport { RelatedElement } from \"@itwin/core-common\";\nimport {\n DistanceExpressionProps, LinearlyReferencedAtLocationAspectProps, LinearlyReferencedFromToLocationAspectProps,\n} from \"@itwin/linear-referencing-common\";\nimport {\n LinearlyReferencedAtPositionRefersToReferent, LinearlyReferencedFromPositionRefersToReferent, LinearlyReferencedToPositionRefersToReferent,\n} from \"./LinearReferencingRelationships\";\n\n/** Core structure carrying linearly-referenced information.\n * @beta\n */\nexport class DistanceExpression implements DistanceExpressionProps {\n public distanceAlongFromStart: number;\n public lateralOffsetFromILinearElement?: number;\n public verticalOffsetFromILinearElement?: number;\n public distanceAlongFromReferent?: number;\n\n constructor(props: DistanceExpressionProps) {\n this.distanceAlongFromStart = JsonUtils.asDouble(props.distanceAlongFromStart);\n this.lateralOffsetFromILinearElement = JsonUtils.asDouble(props.lateralOffsetFromILinearElement);\n this.verticalOffsetFromILinearElement = JsonUtils.asDouble(props.verticalOffsetFromILinearElement);\n this.distanceAlongFromReferent = JsonUtils.asDouble(props.distanceAlongFromReferent);\n }\n\n public static fromJSON(json: DistanceExpressionProps): DistanceExpression { return new DistanceExpression(json); }\n}\n\n/** Base class for multi-aspects carrying linearly-referenced locations.\n * @beta\n */\nexport class LinearlyReferencedLocation extends ElementMultiAspect {\n /** @internal */\n public static override get className(): string { return \"LinearlyReferencedLocation\"; }\n}\n\n/** Concrete multi-aspect class carrying 'at' linearly-referenced positions along a Linear-Element.\n * @beta\n */\nexport class LinearlyReferencedAtLocation extends LinearlyReferencedLocation {\n /** @internal */\n public static override get className(): string { return \"LinearlyReferencedAtLocation\"; }\n\n public atPosition: DistanceExpression;\n public fromReferent?: LinearlyReferencedAtPositionRefersToReferent;\n\n constructor(props: LinearlyReferencedAtLocationAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.atPosition = DistanceExpression.fromJSON(props.atPosition);\n this.fromReferent = RelatedElement.fromJSON(props.fromReferent);\n }\n\n private static toProps(locatedElementId: Id64String, at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocationAspectProps {\n const props: LinearlyReferencedAtLocationAspectProps = {\n classFullName: LinearlyReferencedAtLocation.classFullName,\n element: { id: locatedElementId },\n atPosition: at,\n fromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedAtPositionRefersToReferent(fromReferentId),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, locatedElementId: Id64String,\n at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocation {\n return new LinearlyReferencedAtLocation(this.toProps(locatedElementId, at, fromReferentId), iModel);\n }\n\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\n at: DistanceExpression, fromReferentId?: Id64String): void {\n iModel.elements.insertAspect(this.toProps(locatedElementId, at, fromReferentId));\n }\n}\n\n/** Concrete multi-aspect class carrying 'from-to' linearly-referenced positions along a Linear-Element.\n * @beta\n */\nexport class LinearlyReferencedFromToLocation extends LinearlyReferencedLocation {\n /** @internal */\n public static override get className(): string { return \"LinearlyReferencedFromToLocation\"; }\n\n public fromPosition: DistanceExpression;\n public fromPositionFromReferent?: LinearlyReferencedFromPositionRefersToReferent;\n public toPosition: DistanceExpression;\n public toPositionFromReferent?: LinearlyReferencedToPositionRefersToReferent;\n\n constructor(props: LinearlyReferencedFromToLocationAspectProps, iModel: IModelDb) {\n super(props, iModel);\n this.fromPosition = DistanceExpression.fromJSON(props.fromPosition);\n this.toPosition = DistanceExpression.fromJSON(props.toPosition);\n this.fromPositionFromReferent = RelatedElement.fromJSON(props.fromPositionFromReferent);\n this.toPositionFromReferent = RelatedElement.fromJSON(props.toPositionFromReferent);\n }\n\n private static toProps(locatedElementId: Id64String,\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocationAspectProps {\n const props: LinearlyReferencedFromToLocationAspectProps = {\n classFullName: LinearlyReferencedFromToLocation.classFullName,\n element: { id: locatedElementId },\n fromPosition: from,\n fromPositionFromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedFromPositionRefersToReferent(fromReferentId),\n toPosition: to,\n toPositionFromReferent: (toReferentId === undefined) ? undefined : new LinearlyReferencedToPositionRefersToReferent(toReferentId),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, locatedElementId: Id64String,\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocation {\n return new LinearlyReferencedFromToLocation(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId), iModel);\n }\n\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): void {\n iModel.elements.insertAspect(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId));\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingElementAspects.js","sourceRoot":"","sources":["../../src/LinearReferencingElementAspects.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 LinearReferencing\r\n */\r\n\r\nimport { Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { ElementMultiAspect, IModelDb } from \"@itwin/core-backend\";\r\nimport { RelatedElement } from \"@itwin/core-common\";\r\nimport {\r\n DistanceExpressionProps, LinearlyReferencedAtLocationAspectProps, LinearlyReferencedFromToLocationAspectProps,\r\n} from \"@itwin/linear-referencing-common\";\r\nimport {\r\n LinearlyReferencedAtPositionRefersToReferent, LinearlyReferencedFromPositionRefersToReferent, LinearlyReferencedToPositionRefersToReferent,\r\n} from \"./LinearReferencingRelationships\";\r\n\r\n/** Core structure carrying linearly-referenced information.\r\n * @beta\r\n */\r\nexport class DistanceExpression implements DistanceExpressionProps {\r\n public distanceAlongFromStart: number;\r\n public lateralOffsetFromILinearElement?: number;\r\n public verticalOffsetFromILinearElement?: number;\r\n public distanceAlongFromReferent?: number;\r\n\r\n constructor(props: DistanceExpressionProps) {\r\n this.distanceAlongFromStart = JsonUtils.asDouble(props.distanceAlongFromStart);\r\n this.lateralOffsetFromILinearElement = JsonUtils.asDouble(props.lateralOffsetFromILinearElement);\r\n this.verticalOffsetFromILinearElement = JsonUtils.asDouble(props.verticalOffsetFromILinearElement);\r\n this.distanceAlongFromReferent = JsonUtils.asDouble(props.distanceAlongFromReferent);\r\n }\r\n\r\n public static fromJSON(json: DistanceExpressionProps): DistanceExpression { return new DistanceExpression(json); }\r\n}\r\n\r\n/** Base class for multi-aspects carrying linearly-referenced locations.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedLocation extends ElementMultiAspect {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyReferencedLocation\"; }\r\n}\r\n\r\n/** Concrete multi-aspect class carrying 'at' linearly-referenced positions along a Linear-Element.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedAtLocation extends LinearlyReferencedLocation {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyReferencedAtLocation\"; }\r\n\r\n public atPosition: DistanceExpression;\r\n public fromReferent?: LinearlyReferencedAtPositionRefersToReferent;\r\n\r\n constructor(props: LinearlyReferencedAtLocationAspectProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.atPosition = DistanceExpression.fromJSON(props.atPosition);\r\n this.fromReferent = RelatedElement.fromJSON(props.fromReferent);\r\n }\r\n\r\n private static toProps(locatedElementId: Id64String, at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocationAspectProps {\r\n const props: LinearlyReferencedAtLocationAspectProps = {\r\n classFullName: LinearlyReferencedAtLocation.classFullName,\r\n element: { id: locatedElementId },\r\n atPosition: at,\r\n fromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedAtPositionRefersToReferent(fromReferentId),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, locatedElementId: Id64String,\r\n at: DistanceExpression, fromReferentId?: Id64String): LinearlyReferencedAtLocation {\r\n return new LinearlyReferencedAtLocation(this.toProps(locatedElementId, at, fromReferentId), iModel);\r\n }\r\n\r\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\r\n at: DistanceExpression, fromReferentId?: Id64String): void {\r\n iModel.elements.insertAspect(this.toProps(locatedElementId, at, fromReferentId));\r\n }\r\n}\r\n\r\n/** Concrete multi-aspect class carrying 'from-to' linearly-referenced positions along a Linear-Element.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedFromToLocation extends LinearlyReferencedLocation {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyReferencedFromToLocation\"; }\r\n\r\n public fromPosition: DistanceExpression;\r\n public fromPositionFromReferent?: LinearlyReferencedFromPositionRefersToReferent;\r\n public toPosition: DistanceExpression;\r\n public toPositionFromReferent?: LinearlyReferencedToPositionRefersToReferent;\r\n\r\n constructor(props: LinearlyReferencedFromToLocationAspectProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.fromPosition = DistanceExpression.fromJSON(props.fromPosition);\r\n this.toPosition = DistanceExpression.fromJSON(props.toPosition);\r\n this.fromPositionFromReferent = RelatedElement.fromJSON(props.fromPositionFromReferent);\r\n this.toPositionFromReferent = RelatedElement.fromJSON(props.toPositionFromReferent);\r\n }\r\n\r\n private static toProps(locatedElementId: Id64String,\r\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocationAspectProps {\r\n const props: LinearlyReferencedFromToLocationAspectProps = {\r\n classFullName: LinearlyReferencedFromToLocation.classFullName,\r\n element: { id: locatedElementId },\r\n fromPosition: from,\r\n fromPositionFromReferent: (fromReferentId === undefined) ? undefined : new LinearlyReferencedFromPositionRefersToReferent(fromReferentId),\r\n toPosition: to,\r\n toPositionFromReferent: (toReferentId === undefined) ? undefined : new LinearlyReferencedToPositionRefersToReferent(toReferentId),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, locatedElementId: Id64String,\r\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): LinearlyReferencedFromToLocation {\r\n return new LinearlyReferencedFromToLocation(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId), iModel);\r\n }\r\n\r\n public static insert(iModel: IModelDb, locatedElementId: Id64String,\r\n from: DistanceExpression, to: DistanceExpression, fromReferentId?: Id64String, toReferentId?: Id64String): void {\r\n iModel.elements.insertAspect(this.toProps(locatedElementId, from, to, fromReferentId, toReferentId));\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingElements.js","sourceRoot":"","sources":["../../src/LinearReferencingElements.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\nimport { ECSqlStatement, ElementAspect, IModelDb, PhysicalElement, SpatialLocationElement } from \"@itwin/core-backend\";\nimport { Code, ElementProps, GeometricElement3dProps, IModelError, PhysicalElementProps, RelatedElement } from \"@itwin/core-common\";\nimport {\n ComparisonOption, LinearLocationReference, LinearlyLocatedAttributionProps, LinearlyReferencedAtLocationAspectProps,\n LinearlyReferencedAtLocationProps, LinearlyReferencedFromToLocationAspectProps, LinearlyReferencedFromToLocationProps,\n LinearlyReferencedLocationType, QueryParams, ReferentElementProps,\n} from \"@itwin/linear-referencing-common\";\nimport { LinearlyReferencedAtLocation, LinearlyReferencedFromToLocation } from \"./LinearReferencingElementAspects\";\nimport {\n ILinearLocationLocatesElement, ILinearlyLocatedAlongILinearElement, ILinearlyLocatedAttributesElement, IReferentReferencesElement,\n} from \"./LinearReferencingRelationships\";\n\n/** Base class for Spatial Location Element subclasses representing properties whose value is located along a Linear-Element and only applies to a portion of an Element.\n * @beta\n */\nexport abstract class LinearlyLocatedAttribution extends SpatialLocationElement {\n /** @internal */\n public static override get className(): string { return \"LinearlyLocatedAttribution\"; }\n\n public attributedElement?: ILinearlyLocatedAttributesElement;\n\n public constructor(props: LinearlyLocatedAttributionProps, iModel: IModelDb) {\n super(props, iModel);\n this.attributedElement = RelatedElement.fromJSON(props.attributedElement);\n }\n\n public getLinearElementId(): Id64String | undefined {\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\n }\n}\n\n/** Base class for Spatial Location Element implementations that are linearly located along a Linear-Element.\n * @beta\n */\nexport abstract class LinearLocationElement extends SpatialLocationElement implements LinearlyLocatedBase {\n /** @internal */\n public static override get className(): string { return \"LinearLocationElement\"; }\n\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n public getLinearElementId(): Id64String | undefined {\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\n }\n}\n\n/** Linear Referencing Location attached to an Element not inherently Linearly Referenced.\n * @beta\n */\nexport class LinearLocation extends LinearLocationElement implements LinearlyLocatedBase {\n /** @internal */\n public static override get className(): string { return \"LinearLocation\"; }\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n private static toProps(modelId: Id64String, categoryId: Id64String): GeometricElement3dProps {\n const props: GeometricElement3dProps = {\n classFullName: LinearLocation.classFullName,\n category: categoryId,\n model: modelId,\n code: Code.createEmpty(),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String): LinearLocation {\n return new LinearLocation(this.toProps(modelId, categoryId), iModel);\n }\n\n public static insertFromTo(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\n fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertFromTo(iModel, this.toProps(modelId, categoryId), linearElementId, fromToPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n\n public insertFromTo(iModel: IModelDb, linearElementId: Id64String, fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertFromTo(iModel, this.toJSON(), linearElementId, fromToPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\n atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId), linearElementId, atPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\n const newId = LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\n\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\n\n return newId;\n }\n}\n\n/** Base class for Physical Elements that are inherently linearly located along a Linear-Element.\n * @beta\n */\nexport abstract class LinearPhysicalElement extends PhysicalElement {\n /** @internal */\n public static override get className(): string { return \"LinearPhysicalElement\"; }\n\n public constructor(props: PhysicalElementProps, iModel: IModelDb) {\n super(props, iModel);\n }\n}\n\n/** Spatial Location Element that can play the role of a Referent (known location along a Linear-Element).\n * @beta\n */\nexport abstract class ReferentElement extends SpatialLocationElement implements LinearlyLocatedBase {\n /** @internal */\n public static override get className(): string { return \"ReferentElement\"; }\n\n public referencedElement?: IReferentReferencesElement;\n\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\n super(props, iModel);\n this.referencedElement = RelatedElement.fromJSON(props.referencedElement);\n }\n\n public getLinearElementId(): Id64String | undefined {\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\n }\n}\n\n/** Referent-implementation turning any bis:SpatialElement not inherently Linearly-Referenced into a Referent for Linear-Referencing purposes.\n * @beta\n */\nexport class Referent extends ReferentElement {\n /** @internal */\n public static override get className(): string { return \"Referent\"; }\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\n super(props, iModel);\n }\n\n private static toProps(modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): ReferentElementProps {\n const props: ReferentElementProps = {\n classFullName: LinearLocation.classFullName,\n category: categoryId,\n model: modelId,\n code: Code.createEmpty(),\n referencedElement: new IReferentReferencesElement(referencedElementId),\n };\n\n return props;\n }\n\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): Referent {\n return new Referent(this.toProps(modelId, categoryId, referencedElementId), iModel);\n }\n\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\n atPosition: LinearlyReferencedAtLocationProps, referencedElementId: Id64String): Id64String {\n return LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId, referencedElementId), linearElementId, atPosition);\n }\n\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps): Id64String {\n return LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\n }\n}\n\nabstract class ECSQLGenImpl {\n public abstract genSelect(): string;\n public selectDistinct(): boolean {\n return false;\n }\n public abstract genFromJoin(): string;\n public abstract genWhere(bindVals?: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string;\n public abstract genOrderBy(): string;\n}\n\nclass AtAndFromToECSQLGenImpl extends ECSQLGenImpl {\n public genSelect(): string {\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart) StartDistanceAlong, \" +\n \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.ToPosition.DistanceAlongFromStart) StopDistanceAlong, \" +\n \"coalesce(AtLocation.ECInstanceId, FromToLocation.ECInstanceId) LocationAspectId \";\n }\n public override selectDistinct(): boolean {\n return true;\n }\n public genFromJoin(): string {\n return \"LEFT JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \" +\n \"LEFT JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\n }\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\n\n let ecSql = \"\";\n if (from !== undefined && to !== undefined) {\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) \" + \"OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?) \";\n\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n } else if (from !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? \";\n\n bindVals.push(from);\n bindVals.push(from);\n bindVals.push(from);\n } else if (to !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? \";\n\n bindVals.push(to);\n bindVals.push(to);\n bindVals.push(to);\n } else {\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL) OR \";\n ecSql += \"(FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL) \";\n }\n\n return ecSql;\n }\n public genOrderBy(): string {\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart)\";\n }\n}\n\nclass FromToECSQLGenImpl extends ECSQLGenImpl {\n public genSelect(): string {\n return \"FromToLocation.FromPosition.DistanceAlongFromStart StartDistanceAlong, FromToLocation.ToPosition.DistanceAlongFromStart StopDistanceAlong, FromToLocation.ECInstanceId LocationAspectId \";\n }\n public genFromJoin(): string {\n return \"INNER JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\n }\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\n\n let ecSql = \"\";\n if (from !== undefined && to !== undefined) {\n ecSql += \"AND ((FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?)) \";\n\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n bindVals.push(from);\n bindVals.push(to);\n } else if (from !== undefined) {\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ?)\";\n\n bindVals.push(from);\n bindVals.push(from);\n } else if (to !== undefined) {\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ?) \";\n\n bindVals.push(to);\n bindVals.push(to);\n } else {\n ecSql += \"FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL \";\n }\n\n return ecSql;\n }\n public genOrderBy(): string {\n return \"FromToLocation.FromPosition.DistanceAlongFromStart\";\n }\n}\n\nclass AtECSQLGenImpl extends ECSQLGenImpl {\n public genSelect(): string {\n return \"AtLocation.AtPosition.DistanceAlongFromStart StartDistanceAlong, AtLocation.AtPosition.DistanceAlongFromStart StopDistanceAlong, AtLocation.ECInstanceId LocationAspectId \";\n }\n public genFromJoin(): string {\n return \"INNER JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \";\n }\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\n\n let ecSql = \"\";\n if (from !== undefined && to !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? \";\n\n bindVals.push(from);\n bindVals.push(to);\n } else if (from !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += fromCompOp;\n ecSql += \" ? \";\n\n bindVals.push(from);\n } else if (to !== undefined) {\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\n ecSql += toCompOp;\n ecSql += \" ? \";\n\n bindVals.push(to);\n } else\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL \";\n\n return ecSql;\n }\n public genOrderBy(): string {\n return \"AtLocation.AtPosition.DistanceAlongFromStart\";\n }\n}\n\nclass QueryLinearLocationsECSQLGen {\n private readonly _params: QueryParams;\n private _ecSql: string;\n\n private _addSelectClause(impl: ECSQLGenImpl): void {\n let select = \"SELECT \";\n\n if (impl.selectDistinct())\n select += \"DISTINCT \";\n\n select += \"LinearlyLocated.InstanceId LinearlyLocatedId, printf('%s:%s', meta.ECSchemaDef.Name, meta.ECClassDef.Name) LinearlyLocatedClassFullName, \";\n select += impl.genSelect();\n\n this._ecSql += select;\n }\n\n private _parseClassFullName(classFullName: string): [string, string] | undefined {\n const parts = classFullName.split(\":\");\n if (parts.length !== 2)\n return undefined;\n\n return [parts[0], parts[1]];\n }\n\n private _genLinearlyLocated(): string {\n return \"meta.ECSchemaDef JOIN meta.ECClassDef USING meta.SchemaOwnsClasses JOIN \" +\n \"(SELECT coalesce(Located.TargetECInstanceId, Along.SourceECInstanceId) InstanceId, \" +\n \"coalesce(Located.TargetECClassId, Along.SourceECClassId) ClassId \" +\n \"FROM LinearReferencing.ILinearlyLocatedAlongILinearElement Along LEFT JOIN \" +\n \"LinearReferencing.ILinearLocationLocatesElement Located ON Along.SourceECInstanceId = Located.SourceECInstanceId \" +\n \"WHERE Along.TargetECInstanceId = ?) LinearlyLocated ON meta.ECClassDef.ECInstanceId = LinearlyLocated.ClassId \";\n }\n\n private _addFromClause(impl: ECSQLGenImpl/* bvector<double>& bindVals */): void {\n let from = \"FROM \";\n from += this._genLinearlyLocated();\n from += impl.genFromJoin();\n\n this._ecSql += from;\n }\n\n private _addWhereClause(impl: ECSQLGenImpl, bindVals: any[]) {\n let where = \"WHERE \";\n\n where += impl.genWhere(\n bindVals,\n this._params.fromDistanceAlong,\n (this._params.fromComparisonOption === undefined ||\n this._params.fromComparisonOption === ComparisonOption.Inclusive),\n this._params.toDistanceAlong,\n (this._params.toComparisonOption === undefined ||\n this._params.toComparisonOption === ComparisonOption.Inclusive));\n\n if (this._params.linearlyLocatedClassFullNames !== undefined) {\n if (where.length > 6)\n where += \"AND \";\n\n if (1 === this._params.linearlyLocatedClassFullNames.length) {\n const classFullName = this._params.linearlyLocatedClassFullNames[0];\n const schemaNameClassName = this._parseClassFullName(classFullName);\n if (schemaNameClassName === undefined)\n throw new IModelError(0, \"Invalid full class name\");\n\n where += `meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}' `;\n } else if (1 < this._params.linearlyLocatedClassFullNames.length) {\n where += \"(\";\n for (const classFullName of this._params.linearlyLocatedClassFullNames) {\n if (classFullName === undefined)\n continue;\n\n const schemaNameClassName = this._parseClassFullName(classFullName);\n if (schemaNameClassName === undefined)\n continue;\n\n where += `(meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}') OR `;\n }\n\n where = where.substring(0, where.length - 4); // Removing last OR\n where += \") \";\n }\n }\n\n this._ecSql += where;\n }\n\n private _addOrderByClause(impl: ECSQLGenImpl): void {\n let orderBy = \"ORDER BY \";\n orderBy += impl.genOrderBy();\n\n this._ecSql += orderBy;\n }\n\n private _createImpl(): ECSQLGenImpl {\n if (this._params.linearlyReferencedLocationTypeFilter === undefined ||\n this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.Any) {\n return new AtAndFromToECSQLGenImpl();\n } else if (this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.FromTo) {\n return new FromToECSQLGenImpl();\n } else {\n return new AtECSQLGenImpl();\n }\n }\n\n public constructor(params: QueryParams) {\n this._params = params;\n this._ecSql = \"\";\n }\n\n public generate(linearElementId: Id64String): [string, any[]] {\n this._ecSql = \"\";\n const impl = this._createImpl();\n\n const bindVals: any[] = [linearElementId];\n this._addSelectClause(impl);\n this._addFromClause(impl);\n this._addWhereClause(impl, bindVals);\n this._addOrderByClause(impl);\n\n return [this._ecSql, bindVals];\n }\n}\n\n/** A class offering services for LinearlyLocated elements.\n * @beta\n */\nexport class LinearlyLocated {\n private static insertBasic(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String): Id64String {\n const newId = iModel.elements.insertElement(elProps);\n\n const linearlyLocatedAlongLinearElement =\n ILinearlyLocatedAlongILinearElement.create(iModel, newId, linearElementId);\n linearlyLocatedAlongLinearElement.insert();\n\n return newId;\n }\n\n /** Insert a new LinearlyLocated element into an iModel at a specific location along an existing Linear-Element.\n * @param iModel The iModel to insert the new element into.\n * @param elProps The properties of the new element.\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\n * @param atPosition Linear position.\n * @returns The newly inserted element's Id.\n * @throws [[IModelError]] if unable to insert the element.\n */\n public static insertAt(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\n atPosition: LinearlyReferencedAtLocationProps): Id64String {\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\n\n LinearlyReferencedAtLocation.insert(iModel, newId, atPosition.atPosition,\n (atPosition.fromReferent === undefined) ? undefined : atPosition.fromReferent.id);\n\n return newId;\n }\n\n /** Insert a new LinearlyLocated element into an iModel at a specific from-to location along an existing Linear-Element.\n * @param iModel The iModel to insert the new element into.\n * @param elProps The properties of the new element.\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\n * @param fromToPosition Linear position.\n * @returns The newly inserted element's Id.\n * @throws [[IModelError]] if unable to insert the element.\n */\n public static insertFromTo(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\n fromToPosition: LinearlyReferencedFromToLocationProps): Id64String {\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\n\n LinearlyReferencedFromToLocation.insert(iModel, newId,\n fromToPosition.fromPosition, fromToPosition.toPosition,\n (fromToPosition.fromPositionFromReferent === undefined) ? undefined : fromToPosition.fromPositionFromReferent.id,\n (fromToPosition.toPositionFromReferent === undefined) ? undefined : fromToPosition.toPositionFromReferent.id);\n\n return newId;\n }\n\n private static getLinearLocations<T>(iModel: IModelDb, linearlyLocatedElementId: Id64String, fullClassName: string): T[] {\n const aspects: ElementAspect[] =\n iModel.elements.getAspects(linearlyLocatedElementId, fullClassName);\n\n if (aspects.length === 0)\n return [];\n\n const retVal: T[] = [];\n for (const aspect of aspects) {\n const linearAspect = (aspect as unknown) as T;\n retVal.push(linearAspect);\n }\n\n return retVal;\n }\n\n private static queryFirstLinearLocationAspectId(iModel: IModelDb, linearlyLocatedElementId: Id64String, className: string): Id64String | undefined {\n let aspectId: Id64String | undefined;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(`SELECT ECInstanceId FROM LinearReferencing.${className} WHERE Element.Id=? LIMIT 1`, (stmt: ECSqlStatement) => {\n stmt.bindId(1, linearlyLocatedElementId);\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\n aspectId = stmt.getValue(0).getId();\n });\n\n return aspectId;\n }\n\n /** Query for LinearlyReferenced AtLocation aspects owned by the specified LinearlyLocated Element.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\n * @returns Returns an array of LinearlyReferencedAtLocation.\n * @throws [[IModelError]]\n */\n public static getAtLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation[] {\n return this.getLinearLocations<LinearlyReferencedAtLocation>(\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedAtLocation\");\n }\n\n /** Query for the single LinearlyReferenced AtLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getAtLocations]] instead.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\n * @returns Returns an LinearlyReferencedAtLocation or undefined is none is found.\n * @throws [[IModelError]]\n */\n public static getAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation | undefined {\n const linearLocations = this.getAtLocations(iModel, linearlyLocatedElementId);\n if (linearLocations.length === 0)\n return undefined;\n else {\n assert(linearLocations.length === 1);\n return linearLocations[0];\n }\n }\n\n /** Update an existing LinearlyReferencedAtLocation aspect within the iModel.\n * @param iModel The iModel to update.\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\n * @param linearLocationProps The properties to use to update the LinearlyReferencedAtLocation aspect.\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\n * @throws [[IModelError]]\n */\n public static updateAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedAtLocationProps,\n aspectId?: Id64String): void {\n let linearLocAspectId: Id64String;\n if (aspectId !== undefined)\n linearLocAspectId = aspectId;\n else {\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedAtLocation\")!;\n }\n\n const linearLocationAspectProps: LinearlyReferencedAtLocationAspectProps = {\n id: linearLocAspectId,\n element: { id: linearlyLocatedElementId },\n classFullName: \"LinearReferencing:LinearlyReferencedAtLocation\",\n atPosition: linearLocationProps.atPosition,\n fromReferent: linearLocationProps.fromReferent,\n };\n\n iModel.elements.updateAspect(linearLocationAspectProps);\n }\n\n /** Update an existing LinearlyReferencedFromToLocation aspect within the iModel.\n * @param iModel The iModel to update.\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\n * @param linearLocationProps The properties to use to update the LinearlyReferencedFromToLocation aspect.\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\n * @throws [[IModelError]]\n */\n public static updateFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedFromToLocationProps,\n aspectId?: Id64String): void {\n let linearLocAspectId: Id64String;\n if (aspectId !== undefined)\n linearLocAspectId = aspectId;\n else {\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedFromToLocation\")!;\n }\n\n const linearLocationAspectProps: LinearlyReferencedFromToLocationAspectProps = {\n id: linearLocAspectId,\n element: { id: linearlyLocatedElementId, relClassName: \"LinearReferencing:ILinearlyLocatedOwnsFromToLocations\" },\n classFullName: \"LinearReferencing:LinearlyReferencedFromToLocation\",\n fromPosition: linearLocationProps.fromPosition,\n fromPositionFromReferent: linearLocationProps.fromPositionFromReferent,\n toPosition: linearLocationProps.toPosition,\n toPositionFromReferent: linearLocationProps.toPositionFromReferent,\n };\n\n iModel.elements.updateAspect(linearLocationAspectProps);\n }\n\n /** Query for the Id of the Linear-Element along which the specified LinearlyLocated Element is located.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query a Linear-Element for.\n * @returns Returns the Id of the Linear-Element or undefined is none is assigned.\n */\n public static getLinearElementId(iModel: IModelDb, linearlyLocatedElementId: Id64String): Id64String | undefined {\n let linearElementId: Id64String | undefined;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(\"SELECT TargetECInstanceId FROM LinearReferencing.ILinearlyLocatedAlongILinearElement WHERE SourceECInstanceId = ?\", (stmt: ECSqlStatement) => {\n stmt.bindId(1, linearlyLocatedElementId);\n\n if (DbResult.BE_SQLITE_ROW === stmt.step())\n linearElementId = stmt.getValue(0).getId();\n else\n linearElementId = undefined;\n });\n\n return linearElementId;\n }\n\n /** Query for LinearlyReferenced FromToLocation aspects owned by the specified LinearlyLocated Element.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\n * @returns Returns an array of LinearlyReferencedFromToLocation.\n * @throws [[IModelError]]\n */\n public static getFromToLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation[] {\n return this.getLinearLocations<LinearlyReferencedFromToLocation>(\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedFromToLocation\");\n }\n\n /** Query for the single LinearlyReferenced FromToLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getFromToLocations]] instead.\n * @param iModel The iModel to query from.\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\n * @returns Returns an LinearlyReferencedFromToLocation or undefined is none is found.\n * @throws [[IModelError]]\n */\n public static getFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation | undefined {\n const linearLocations = this.getFromToLocations(iModel, linearlyLocatedElementId);\n if (linearLocations.length === 0)\n return undefined;\n else {\n assert(linearLocations.length === 1);\n return linearLocations[0];\n }\n }\n}\n\n/** Base interface to optionally be implemented by Elements inherently Linearly-Located. Implementors should choose the\n * appropriate sub-interface rather than implementing LinearlyLocatedBase directly.\n * @beta\n */\nexport interface LinearlyLocatedBase {\n getLinearElementId(): Id64String | undefined;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single at-position.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedSingleAt extends LinearlyLocatedBase {\n getAtLocation(): LinearlyReferencedAtLocation | undefined;\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId?: Id64String): void;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always at-positions.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedMultipleAt extends LinearlyLocatedBase {\n getAtLocations(): LinearlyReferencedAtLocation[];\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId: Id64String): void;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single from-to-position.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedSingleFromTo extends LinearlyLocatedBase {\n getFromToLocation(): LinearlyReferencedFromToLocation | undefined;\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId?: Id64String): void;\n}\n\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always from-to-positions.\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\n * @beta\n */\nexport interface LinearlyLocatedMultipleFromTo extends LinearlyLocatedBase {\n getFromToLocations(): LinearlyReferencedFromToLocation[];\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId: Id64String): void;\n}\n\n/** A class offering services for linearly-located data along a Linear-Element.\n * @beta\n */\nexport class LinearElement {\n /** Query for LinearLocationReferences based on specified query parameters.\n * @returns Returns an array of LinearLocationReferences.\n * @throws [[IModelError]]\n */\n public static queryLinearLocations(iModel: IModelDb, linearElementId: Id64String, queryParams: QueryParams): LinearLocationReference[] {\n const ecSqlGen = new QueryLinearLocationsECSQLGen(queryParams);\n const ecsqlAndBindVals = ecSqlGen.generate(linearElementId);\n\n const linearLocationRefs: LinearLocationReference[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.withPreparedStatement(ecsqlAndBindVals[0], (stmt: ECSqlStatement) => {\n stmt.bindValues(ecsqlAndBindVals[1]);\n\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const linearLocationRef: LinearLocationReference = {\n linearlyLocatedId: stmt.getValue(0).getId(),\n linearlyLocatedClassFullName: stmt.getValue(1).getString(),\n startDistanceAlong: stmt.getValue(2).getDouble(),\n stopDistanceAlong: stmt.getValue(3).getDouble(),\n locationAspectId: stmt.getValue(4).getId(),\n };\n\n linearLocationRefs.push(linearLocationRef);\n }\n });\n\n return linearLocationRefs;\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingElements.js","sourceRoot":"","sources":["../../src/LinearReferencingElements.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 LinearReferencing\r\n */\r\n\r\nimport { assert, DbResult, Id64String } from \"@itwin/core-bentley\";\r\nimport { ECSqlStatement, ElementAspect, IModelDb, PhysicalElement, SpatialLocationElement } from \"@itwin/core-backend\";\r\nimport { Code, ElementProps, GeometricElement3dProps, IModelError, PhysicalElementProps, RelatedElement } from \"@itwin/core-common\";\r\nimport {\r\n ComparisonOption, LinearLocationReference, LinearlyLocatedAttributionProps, LinearlyReferencedAtLocationAspectProps,\r\n LinearlyReferencedAtLocationProps, LinearlyReferencedFromToLocationAspectProps, LinearlyReferencedFromToLocationProps,\r\n LinearlyReferencedLocationType, QueryParams, ReferentElementProps,\r\n} from \"@itwin/linear-referencing-common\";\r\nimport { LinearlyReferencedAtLocation, LinearlyReferencedFromToLocation } from \"./LinearReferencingElementAspects\";\r\nimport {\r\n ILinearLocationLocatesElement, ILinearlyLocatedAlongILinearElement, ILinearlyLocatedAttributesElement, IReferentReferencesElement,\r\n} from \"./LinearReferencingRelationships\";\r\n\r\n/** Base class for Spatial Location Element subclasses representing properties whose value is located along a Linear-Element and only applies to a portion of an Element.\r\n * @beta\r\n */\r\nexport abstract class LinearlyLocatedAttribution extends SpatialLocationElement {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearlyLocatedAttribution\"; }\r\n\r\n public attributedElement?: ILinearlyLocatedAttributesElement;\r\n\r\n public constructor(props: LinearlyLocatedAttributionProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.attributedElement = RelatedElement.fromJSON(props.attributedElement);\r\n }\r\n\r\n public getLinearElementId(): Id64String | undefined {\r\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\r\n }\r\n}\r\n\r\n/** Base class for Spatial Location Element implementations that are linearly located along a Linear-Element.\r\n * @beta\r\n */\r\nexport abstract class LinearLocationElement extends SpatialLocationElement implements LinearlyLocatedBase {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearLocationElement\"; }\r\n\r\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n\r\n public getLinearElementId(): Id64String | undefined {\r\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\r\n }\r\n}\r\n\r\n/** Linear Referencing Location attached to an Element not inherently Linearly Referenced.\r\n * @beta\r\n */\r\nexport class LinearLocation extends LinearLocationElement implements LinearlyLocatedBase {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearLocation\"; }\r\n public constructor(props: GeometricElement3dProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n\r\n private static toProps(modelId: Id64String, categoryId: Id64String): GeometricElement3dProps {\r\n const props: GeometricElement3dProps = {\r\n classFullName: LinearLocation.classFullName,\r\n category: categoryId,\r\n model: modelId,\r\n code: Code.createEmpty(),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String): LinearLocation {\r\n return new LinearLocation(this.toProps(modelId, categoryId), iModel);\r\n }\r\n\r\n public static insertFromTo(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\r\n fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertFromTo(iModel, this.toProps(modelId, categoryId), linearElementId, fromToPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n\r\n public insertFromTo(iModel: IModelDb, linearElementId: Id64String, fromToPosition: LinearlyReferencedFromToLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertFromTo(iModel, this.toJSON(), linearElementId, fromToPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n\r\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\r\n atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId), linearElementId, atPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n\r\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps, locatedElementId: Id64String): Id64String {\r\n const newId = LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\r\n\r\n ILinearLocationLocatesElement.insert(iModel, newId, locatedElementId);\r\n\r\n return newId;\r\n }\r\n}\r\n\r\n/** Base class for Physical Elements that are inherently linearly located along a Linear-Element.\r\n * @beta\r\n */\r\nexport abstract class LinearPhysicalElement extends PhysicalElement {\r\n /** @internal */\r\n public static override get className(): string { return \"LinearPhysicalElement\"; }\r\n\r\n public constructor(props: PhysicalElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n}\r\n\r\n/** Spatial Location Element that can play the role of a Referent (known location along a Linear-Element).\r\n * @beta\r\n */\r\nexport abstract class ReferentElement extends SpatialLocationElement implements LinearlyLocatedBase {\r\n /** @internal */\r\n public static override get className(): string { return \"ReferentElement\"; }\r\n\r\n public referencedElement?: IReferentReferencesElement;\r\n\r\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n this.referencedElement = RelatedElement.fromJSON(props.referencedElement);\r\n }\r\n\r\n public getLinearElementId(): Id64String | undefined {\r\n return LinearlyLocated.getLinearElementId(this.iModel, this.id);\r\n }\r\n}\r\n\r\n/** Referent-implementation turning any bis:SpatialElement not inherently Linearly-Referenced into a Referent for Linear-Referencing purposes.\r\n * @beta\r\n */\r\nexport class Referent extends ReferentElement {\r\n /** @internal */\r\n public static override get className(): string { return \"Referent\"; }\r\n public constructor(props: ReferentElementProps, iModel: IModelDb) {\r\n super(props, iModel);\r\n }\r\n\r\n private static toProps(modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): ReferentElementProps {\r\n const props: ReferentElementProps = {\r\n classFullName: LinearLocation.classFullName,\r\n category: categoryId,\r\n model: modelId,\r\n code: Code.createEmpty(),\r\n referencedElement: new IReferentReferencesElement(referencedElementId),\r\n };\r\n\r\n return props;\r\n }\r\n\r\n public static create(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, referencedElementId: Id64String): Referent {\r\n return new Referent(this.toProps(modelId, categoryId, referencedElementId), iModel);\r\n }\r\n\r\n public static insertAt(iModel: IModelDb, modelId: Id64String, categoryId: Id64String, linearElementId: Id64String,\r\n atPosition: LinearlyReferencedAtLocationProps, referencedElementId: Id64String): Id64String {\r\n return LinearlyLocated.insertAt(iModel, this.toProps(modelId, categoryId, referencedElementId), linearElementId, atPosition);\r\n }\r\n\r\n public insertAt(iModel: IModelDb, linearElementId: Id64String, atPosition: LinearlyReferencedAtLocationProps): Id64String {\r\n return LinearlyLocated.insertAt(iModel, this.toJSON(), linearElementId, atPosition);\r\n }\r\n}\r\n\r\nabstract class ECSQLGenImpl {\r\n public abstract genSelect(): string;\r\n public selectDistinct(): boolean {\r\n return false;\r\n }\r\n public abstract genFromJoin(): string;\r\n public abstract genWhere(bindVals?: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string;\r\n public abstract genOrderBy(): string;\r\n}\r\n\r\nclass AtAndFromToECSQLGenImpl extends ECSQLGenImpl {\r\n public genSelect(): string {\r\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart) StartDistanceAlong, \" +\r\n \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.ToPosition.DistanceAlongFromStart) StopDistanceAlong, \" +\r\n \"coalesce(AtLocation.ECInstanceId, FromToLocation.ECInstanceId) LocationAspectId \";\r\n }\r\n public override selectDistinct(): boolean {\r\n return true;\r\n }\r\n public genFromJoin(): string {\r\n return \"LEFT JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \" +\r\n \"LEFT JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\r\n }\r\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\r\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\r\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\r\n\r\n let ecSql = \"\";\r\n if (from !== undefined && to !== undefined) {\r\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) \" + \"OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?) \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n } else if (from !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(from);\r\n bindVals.push(from);\r\n } else if (to !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? OR FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(to);\r\n bindVals.push(to);\r\n bindVals.push(to);\r\n } else {\r\n ecSql += \"(AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL) OR \";\r\n ecSql += \"(FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL) \";\r\n }\r\n\r\n return ecSql;\r\n }\r\n public genOrderBy(): string {\r\n return \"coalesce(AtLocation.AtPosition.DistanceAlongFromStart, FromToLocation.FromPosition.DistanceAlongFromStart)\";\r\n }\r\n}\r\n\r\nclass FromToECSQLGenImpl extends ECSQLGenImpl {\r\n public genSelect(): string {\r\n return \"FromToLocation.FromPosition.DistanceAlongFromStart StartDistanceAlong, FromToLocation.ToPosition.DistanceAlongFromStart StopDistanceAlong, FromToLocation.ECInstanceId LocationAspectId \";\r\n }\r\n public genFromJoin(): string {\r\n return \"INNER JOIN LinearReferencing.LinearlyReferencedFromToLocation FromToLocation ON LinearlyLocated.InstanceId = FromToLocation.Element.Id \";\r\n }\r\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\r\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\r\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\r\n\r\n let ecSql = \"\";\r\n if (from !== undefined && to !== undefined) {\r\n ecSql += \"AND ((FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) OR (FromToLocation.FromPosition.DistanceAlongFromStart <= ? AND FromToLocation.ToPosition.DistanceAlongFromStart >= ?)) \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n } else if (from !== undefined) {\r\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ?)\";\r\n\r\n bindVals.push(from);\r\n bindVals.push(from);\r\n } else if (to !== undefined) {\r\n ecSql += \"AND (FromToLocation.FromPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? OR FromToLocation.ToPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ?) \";\r\n\r\n bindVals.push(to);\r\n bindVals.push(to);\r\n } else {\r\n ecSql += \"FromToLocation.FromPosition.DistanceAlongFromStart IS NOT NULL \";\r\n }\r\n\r\n return ecSql;\r\n }\r\n public genOrderBy(): string {\r\n return \"FromToLocation.FromPosition.DistanceAlongFromStart\";\r\n }\r\n}\r\n\r\nclass AtECSQLGenImpl extends ECSQLGenImpl {\r\n public genSelect(): string {\r\n return \"AtLocation.AtPosition.DistanceAlongFromStart StartDistanceAlong, AtLocation.AtPosition.DistanceAlongFromStart StopDistanceAlong, AtLocation.ECInstanceId LocationAspectId \";\r\n }\r\n public genFromJoin(): string {\r\n return \"INNER JOIN LinearReferencing.LinearlyReferencedAtLocation AtLocation ON LinearlyLocated.InstanceId = AtLocation.Element.Id \";\r\n }\r\n public genWhere(bindVals: any[], from?: number, inclusiveFrom?: boolean, to?: number, inclusiveTo?: boolean): string {\r\n const fromCompOp: string = (inclusiveFrom === undefined || inclusiveFrom) ? \">=\" : \">\";\r\n const toCompOp: string = (inclusiveTo === undefined || inclusiveTo) ? \"<=\" : \"<\";\r\n\r\n let ecSql = \"\";\r\n if (from !== undefined && to !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? AND AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(from);\r\n bindVals.push(to);\r\n } else if (from !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += fromCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(from);\r\n } else if (to !== undefined) {\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart \";\r\n ecSql += toCompOp;\r\n ecSql += \" ? \";\r\n\r\n bindVals.push(to);\r\n } else\r\n ecSql += \"AtLocation.AtPosition.DistanceAlongFromStart IS NOT NULL \";\r\n\r\n return ecSql;\r\n }\r\n public genOrderBy(): string {\r\n return \"AtLocation.AtPosition.DistanceAlongFromStart\";\r\n }\r\n}\r\n\r\nclass QueryLinearLocationsECSQLGen {\r\n private readonly _params: QueryParams;\r\n private _ecSql: string;\r\n\r\n private _addSelectClause(impl: ECSQLGenImpl): void {\r\n let select = \"SELECT \";\r\n\r\n if (impl.selectDistinct())\r\n select += \"DISTINCT \";\r\n\r\n select += \"LinearlyLocated.InstanceId LinearlyLocatedId, printf('%s:%s', meta.ECSchemaDef.Name, meta.ECClassDef.Name) LinearlyLocatedClassFullName, \";\r\n select += impl.genSelect();\r\n\r\n this._ecSql += select;\r\n }\r\n\r\n private _parseClassFullName(classFullName: string): [string, string] | undefined {\r\n const parts = classFullName.split(\":\");\r\n if (parts.length !== 2)\r\n return undefined;\r\n\r\n return [parts[0], parts[1]];\r\n }\r\n\r\n private _genLinearlyLocated(): string {\r\n return \"meta.ECSchemaDef JOIN meta.ECClassDef USING meta.SchemaOwnsClasses JOIN \" +\r\n \"(SELECT coalesce(Located.TargetECInstanceId, Along.SourceECInstanceId) InstanceId, \" +\r\n \"coalesce(Located.TargetECClassId, Along.SourceECClassId) ClassId \" +\r\n \"FROM LinearReferencing.ILinearlyLocatedAlongILinearElement Along LEFT JOIN \" +\r\n \"LinearReferencing.ILinearLocationLocatesElement Located ON Along.SourceECInstanceId = Located.SourceECInstanceId \" +\r\n \"WHERE Along.TargetECInstanceId = ?) LinearlyLocated ON meta.ECClassDef.ECInstanceId = LinearlyLocated.ClassId \";\r\n }\r\n\r\n private _addFromClause(impl: ECSQLGenImpl/* bvector<double>& bindVals */): void {\r\n let from = \"FROM \";\r\n from += this._genLinearlyLocated();\r\n from += impl.genFromJoin();\r\n\r\n this._ecSql += from;\r\n }\r\n\r\n private _addWhereClause(impl: ECSQLGenImpl, bindVals: any[]) {\r\n let where = \"WHERE \";\r\n\r\n where += impl.genWhere(\r\n bindVals,\r\n this._params.fromDistanceAlong,\r\n (this._params.fromComparisonOption === undefined ||\r\n this._params.fromComparisonOption === ComparisonOption.Inclusive),\r\n this._params.toDistanceAlong,\r\n (this._params.toComparisonOption === undefined ||\r\n this._params.toComparisonOption === ComparisonOption.Inclusive));\r\n\r\n if (this._params.linearlyLocatedClassFullNames !== undefined) {\r\n if (where.length > 6)\r\n where += \"AND \";\r\n\r\n if (1 === this._params.linearlyLocatedClassFullNames.length) {\r\n const classFullName = this._params.linearlyLocatedClassFullNames[0];\r\n const schemaNameClassName = this._parseClassFullName(classFullName);\r\n if (schemaNameClassName === undefined)\r\n throw new IModelError(0, \"Invalid full class name\");\r\n\r\n where += `meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}' `;\r\n } else if (1 < this._params.linearlyLocatedClassFullNames.length) {\r\n where += \"(\";\r\n for (const classFullName of this._params.linearlyLocatedClassFullNames) {\r\n if (classFullName === undefined)\r\n continue;\r\n\r\n const schemaNameClassName = this._parseClassFullName(classFullName);\r\n if (schemaNameClassName === undefined)\r\n continue;\r\n\r\n where += `(meta.ECSchemaDef.Name='${schemaNameClassName[0]}' AND meta.ECClassDef.Name='${schemaNameClassName[1]}') OR `;\r\n }\r\n\r\n where = where.substring(0, where.length - 4); // Removing last OR\r\n where += \") \";\r\n }\r\n }\r\n\r\n this._ecSql += where;\r\n }\r\n\r\n private _addOrderByClause(impl: ECSQLGenImpl): void {\r\n let orderBy = \"ORDER BY \";\r\n orderBy += impl.genOrderBy();\r\n\r\n this._ecSql += orderBy;\r\n }\r\n\r\n private _createImpl(): ECSQLGenImpl {\r\n if (this._params.linearlyReferencedLocationTypeFilter === undefined ||\r\n this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.Any) {\r\n return new AtAndFromToECSQLGenImpl();\r\n } else if (this._params.linearlyReferencedLocationTypeFilter === LinearlyReferencedLocationType.FromTo) {\r\n return new FromToECSQLGenImpl();\r\n } else {\r\n return new AtECSQLGenImpl();\r\n }\r\n }\r\n\r\n public constructor(params: QueryParams) {\r\n this._params = params;\r\n this._ecSql = \"\";\r\n }\r\n\r\n public generate(linearElementId: Id64String): [string, any[]] {\r\n this._ecSql = \"\";\r\n const impl = this._createImpl();\r\n\r\n const bindVals: any[] = [linearElementId];\r\n this._addSelectClause(impl);\r\n this._addFromClause(impl);\r\n this._addWhereClause(impl, bindVals);\r\n this._addOrderByClause(impl);\r\n\r\n return [this._ecSql, bindVals];\r\n }\r\n}\r\n\r\n/** A class offering services for LinearlyLocated elements.\r\n * @beta\r\n */\r\nexport class LinearlyLocated {\r\n private static insertBasic(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String): Id64String {\r\n const newId = iModel.elements.insertElement(elProps);\r\n\r\n const linearlyLocatedAlongLinearElement =\r\n ILinearlyLocatedAlongILinearElement.create(iModel, newId, linearElementId);\r\n linearlyLocatedAlongLinearElement.insert();\r\n\r\n return newId;\r\n }\r\n\r\n /** Insert a new LinearlyLocated element into an iModel at a specific location along an existing Linear-Element.\r\n * @param iModel The iModel to insert the new element into.\r\n * @param elProps The properties of the new element.\r\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\r\n * @param atPosition Linear position.\r\n * @returns The newly inserted element's Id.\r\n * @throws [[IModelError]] if unable to insert the element.\r\n */\r\n public static insertAt(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\r\n atPosition: LinearlyReferencedAtLocationProps): Id64String {\r\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\r\n\r\n LinearlyReferencedAtLocation.insert(iModel, newId, atPosition.atPosition,\r\n (atPosition.fromReferent === undefined) ? undefined : atPosition.fromReferent.id);\r\n\r\n return newId;\r\n }\r\n\r\n /** Insert a new LinearlyLocated element into an iModel at a specific from-to location along an existing Linear-Element.\r\n * @param iModel The iModel to insert the new element into.\r\n * @param elProps The properties of the new element.\r\n * @param linearElementId The Id of the Linear-Element along which the new LinearlyLocated will be inserted.\r\n * @param fromToPosition Linear position.\r\n * @returns The newly inserted element's Id.\r\n * @throws [[IModelError]] if unable to insert the element.\r\n */\r\n public static insertFromTo(iModel: IModelDb, elProps: ElementProps, linearElementId: Id64String,\r\n fromToPosition: LinearlyReferencedFromToLocationProps): Id64String {\r\n const newId: Id64String = this.insertBasic(iModel, elProps, linearElementId);\r\n\r\n LinearlyReferencedFromToLocation.insert(iModel, newId,\r\n fromToPosition.fromPosition, fromToPosition.toPosition,\r\n (fromToPosition.fromPositionFromReferent === undefined) ? undefined : fromToPosition.fromPositionFromReferent.id,\r\n (fromToPosition.toPositionFromReferent === undefined) ? undefined : fromToPosition.toPositionFromReferent.id);\r\n\r\n return newId;\r\n }\r\n\r\n private static getLinearLocations<T>(iModel: IModelDb, linearlyLocatedElementId: Id64String, fullClassName: string): T[] {\r\n const aspects: ElementAspect[] =\r\n iModel.elements.getAspects(linearlyLocatedElementId, fullClassName);\r\n\r\n if (aspects.length === 0)\r\n return [];\r\n\r\n const retVal: T[] = [];\r\n for (const aspect of aspects) {\r\n const linearAspect = (aspect as unknown) as T;\r\n retVal.push(linearAspect);\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n private static queryFirstLinearLocationAspectId(iModel: IModelDb, linearlyLocatedElementId: Id64String, className: string): Id64String | undefined {\r\n let aspectId: Id64String | undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.withPreparedStatement(`SELECT ECInstanceId FROM LinearReferencing.${className} WHERE Element.Id=? LIMIT 1`, (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, linearlyLocatedElementId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n aspectId = stmt.getValue(0).getId();\r\n });\r\n\r\n return aspectId;\r\n }\r\n\r\n /** Query for LinearlyReferenced AtLocation aspects owned by the specified LinearlyLocated Element.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\r\n * @returns Returns an array of LinearlyReferencedAtLocation.\r\n * @throws [[IModelError]]\r\n */\r\n public static getAtLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation[] {\r\n return this.getLinearLocations<LinearlyReferencedAtLocation>(\r\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedAtLocation\");\r\n }\r\n\r\n /** Query for the single LinearlyReferenced AtLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getAtLocations]] instead.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\r\n * @returns Returns an LinearlyReferencedAtLocation or undefined is none is found.\r\n * @throws [[IModelError]]\r\n */\r\n public static getAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedAtLocation | undefined {\r\n const linearLocations = this.getAtLocations(iModel, linearlyLocatedElementId);\r\n if (linearLocations.length === 0)\r\n return undefined;\r\n else {\r\n assert(linearLocations.length === 1);\r\n return linearLocations[0];\r\n }\r\n }\r\n\r\n /** Update an existing LinearlyReferencedAtLocation aspect within the iModel.\r\n * @param iModel The iModel to update.\r\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\r\n * @param linearLocationProps The properties to use to update the LinearlyReferencedAtLocation aspect.\r\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\r\n * @throws [[IModelError]]\r\n */\r\n public static updateAtLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedAtLocationProps,\r\n aspectId?: Id64String): void {\r\n let linearLocAspectId: Id64String;\r\n if (aspectId !== undefined)\r\n linearLocAspectId = aspectId;\r\n else {\r\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedAtLocation\")!;\r\n }\r\n\r\n const linearLocationAspectProps: LinearlyReferencedAtLocationAspectProps = {\r\n id: linearLocAspectId,\r\n element: { id: linearlyLocatedElementId },\r\n classFullName: \"LinearReferencing:LinearlyReferencedAtLocation\",\r\n atPosition: linearLocationProps.atPosition,\r\n fromReferent: linearLocationProps.fromReferent,\r\n };\r\n\r\n iModel.elements.updateAspect(linearLocationAspectProps);\r\n }\r\n\r\n /** Update an existing LinearlyReferencedFromToLocation aspect within the iModel.\r\n * @param iModel The iModel to update.\r\n * @param linearlyLocatedElementId The Id of the owning Linearly Located Element.\r\n * @param linearLocationProps The properties to use to update the LinearlyReferencedFromToLocation aspect.\r\n * @param aspectId The Id of the aspect to update. If not known, the first aspectId will be looked-up.\r\n * @throws [[IModelError]]\r\n */\r\n public static updateFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String, linearLocationProps: LinearlyReferencedFromToLocationProps,\r\n aspectId?: Id64String): void {\r\n let linearLocAspectId: Id64String;\r\n if (aspectId !== undefined)\r\n linearLocAspectId = aspectId;\r\n else {\r\n linearLocAspectId = this.queryFirstLinearLocationAspectId(iModel, linearlyLocatedElementId, \"LinearlyReferencedFromToLocation\")!;\r\n }\r\n\r\n const linearLocationAspectProps: LinearlyReferencedFromToLocationAspectProps = {\r\n id: linearLocAspectId,\r\n element: { id: linearlyLocatedElementId, relClassName: \"LinearReferencing:ILinearlyLocatedOwnsFromToLocations\" },\r\n classFullName: \"LinearReferencing:LinearlyReferencedFromToLocation\",\r\n fromPosition: linearLocationProps.fromPosition,\r\n fromPositionFromReferent: linearLocationProps.fromPositionFromReferent,\r\n toPosition: linearLocationProps.toPosition,\r\n toPositionFromReferent: linearLocationProps.toPositionFromReferent,\r\n };\r\n\r\n iModel.elements.updateAspect(linearLocationAspectProps);\r\n }\r\n\r\n /** Query for the Id of the Linear-Element along which the specified LinearlyLocated Element is located.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query a Linear-Element for.\r\n * @returns Returns the Id of the Linear-Element or undefined is none is assigned.\r\n */\r\n public static getLinearElementId(iModel: IModelDb, linearlyLocatedElementId: Id64String): Id64String | undefined {\r\n let linearElementId: Id64String | undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.withPreparedStatement(\"SELECT TargetECInstanceId FROM LinearReferencing.ILinearlyLocatedAlongILinearElement WHERE SourceECInstanceId = ?\", (stmt: ECSqlStatement) => {\r\n stmt.bindId(1, linearlyLocatedElementId);\r\n\r\n if (DbResult.BE_SQLITE_ROW === stmt.step())\r\n linearElementId = stmt.getValue(0).getId();\r\n else\r\n linearElementId = undefined;\r\n });\r\n\r\n return linearElementId;\r\n }\r\n\r\n /** Query for LinearlyReferenced FromToLocation aspects owned by the specified LinearlyLocated Element.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query aspects about.\r\n * @returns Returns an array of LinearlyReferencedFromToLocation.\r\n * @throws [[IModelError]]\r\n */\r\n public static getFromToLocations(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation[] {\r\n return this.getLinearLocations<LinearlyReferencedFromToLocation>(\r\n iModel, linearlyLocatedElementId, \"LinearReferencing:LinearlyReferencedFromToLocation\");\r\n }\r\n\r\n /** Query for the single LinearlyReferenced FromToLocation aspect owned by the specified LinearlyLocated Element. If more than one aspect is expected, use [[getFromToLocations]] instead.\r\n * @param iModel The iModel to query from.\r\n * @param linearlyLocatedElementId The id of the LinearlyLocated Element to query about.\r\n * @returns Returns an LinearlyReferencedFromToLocation or undefined is none is found.\r\n * @throws [[IModelError]]\r\n */\r\n public static getFromToLocation(iModel: IModelDb, linearlyLocatedElementId: Id64String): LinearlyReferencedFromToLocation | undefined {\r\n const linearLocations = this.getFromToLocations(iModel, linearlyLocatedElementId);\r\n if (linearLocations.length === 0)\r\n return undefined;\r\n else {\r\n assert(linearLocations.length === 1);\r\n return linearLocations[0];\r\n }\r\n }\r\n}\r\n\r\n/** Base interface to optionally be implemented by Elements inherently Linearly-Located. Implementors should choose the\r\n * appropriate sub-interface rather than implementing LinearlyLocatedBase directly.\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedBase {\r\n getLinearElementId(): Id64String | undefined;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single at-position.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedSingleAt extends LinearlyLocatedBase {\r\n getAtLocation(): LinearlyReferencedAtLocation | undefined;\r\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId?: Id64String): void;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always at-positions.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedMultipleAt extends LinearlyLocatedBase {\r\n getAtLocations(): LinearlyReferencedAtLocation[];\r\n updateAtLocation(linearLocation: LinearlyReferencedAtLocationProps, aspectId: Id64String): void;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always a single from-to-position.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedSingleFromTo extends LinearlyLocatedBase {\r\n getFromToLocation(): LinearlyReferencedFromToLocation | undefined;\r\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId?: Id64String): void;\r\n}\r\n\r\n/** Interface to optionally be implemented by Elements inherently Linearly-Located whose linear-locations are always from-to-positions.\r\n * It also provides convenient APIs for callers to reach Linear-Referencing data stored on aspects. Classes implementing this interface should\r\n * make use of the services provided by [LinearlyLocated]($linear-referencing-backend).\r\n * @beta\r\n */\r\nexport interface LinearlyLocatedMultipleFromTo extends LinearlyLocatedBase {\r\n getFromToLocations(): LinearlyReferencedFromToLocation[];\r\n updateFromToLocation(linearLocation: LinearlyReferencedFromToLocationProps, aspectId: Id64String): void;\r\n}\r\n\r\n/** A class offering services for linearly-located data along a Linear-Element.\r\n * @beta\r\n */\r\nexport class LinearElement {\r\n /** Query for LinearLocationReferences based on specified query parameters.\r\n * @returns Returns an array of LinearLocationReferences.\r\n * @throws [[IModelError]]\r\n */\r\n public static queryLinearLocations(iModel: IModelDb, linearElementId: Id64String, queryParams: QueryParams): LinearLocationReference[] {\r\n const ecSqlGen = new QueryLinearLocationsECSQLGen(queryParams);\r\n const ecsqlAndBindVals = ecSqlGen.generate(linearElementId);\r\n\r\n const linearLocationRefs: LinearLocationReference[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.withPreparedStatement(ecsqlAndBindVals[0], (stmt: ECSqlStatement) => {\r\n stmt.bindValues(ecsqlAndBindVals[1]);\r\n\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const linearLocationRef: LinearLocationReference = {\r\n linearlyLocatedId: stmt.getValue(0).getId(),\r\n linearlyLocatedClassFullName: stmt.getValue(1).getString(),\r\n startDistanceAlong: stmt.getValue(2).getDouble(),\r\n stopDistanceAlong: stmt.getValue(3).getDouble(),\r\n locationAspectId: stmt.getValue(4).getId(),\r\n };\r\n\r\n linearLocationRefs.push(linearLocationRef);\r\n }\r\n });\r\n\r\n return linearLocationRefs;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingRelationships.js","sourceRoot":"","sources":["../../src/LinearReferencingRelationships.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,uBAAuB;IAC9E,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,qCAAqC,CAAC,CAAC,CAAC;CACjG;AAED;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,uBAAuB;IACxE,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,+BAA+B,CAAC,CAAC,CAAC;CAC3F;AAED;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,cAAc;IACzD,MAAM,CAAC,aAAa,GAAG,kDAAkD,CAAC;IACjF,YAAmB,QAAoB,EAAE,eAAuB,8BAA8B,CAAC,aAAa;QAC1G,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACxC,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,cAAc;IAC5D,MAAM,CAAC,aAAa,GAAG,qDAAqD,CAAC;IACpF,YAAmB,mBAA+B,EAAE,eAAuB,iCAAiC,CAAC,aAAa;QACxH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IACrD,MAAM,CAAC,aAAa,GAAG,8CAA8C,CAAC;IAC7E,YAAmB,mBAA+B,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACjH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,4CAA6C,SAAQ,cAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACxG,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,8CAA+C,SAAQ,cAAc;IACzE,MAAM,CAAC,aAAa,GAAG,kEAAkE,CAAC;IACjG,YAAmB,UAAsB,EAAE,eAAuB,8CAA8C,CAAC,aAAa;QAC5H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,4CAA6C,SAAQ,cAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,4CAA4C,CAAC,aAAa;QAC1H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ElementRefersToElements } from \"@itwin/core-backend\";\nimport { RelatedElement } from \"@itwin/core-common\";\n\n/** Relationship indicating the Linear-Element along which concrete instances mixing-in ILinearlyLocated are located.\n * @beta\n */\nexport class ILinearlyLocatedAlongILinearElement extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"ILinearlyLocatedAlongILinearElement\"; }\n}\n\n/** Relationship indicating bis:Element being linearly-located by a concrete instance mixing-in ILinearLocationElement.\n * @beta\n */\nexport class ILinearLocationLocatesElement extends ElementRefersToElements {\n /** @internal */\n public static override get className(): string { return \"ILinearLocationLocatesElement\"; }\n}\n\n/** Relationship associating Linear-Elements with the elements they came from.\n * @beta\n */\nexport class ILinearElementProvidedBySource extends RelatedElement {\n public static classFullName = \"LinearReferencing:ILinearElementProvidedBySource\";\n public constructor(sourceId: Id64String, relClassName: string = ILinearElementProvidedBySource.classFullName) {\n super({ id: sourceId, relClassName });\n }\n}\n\n/** Relationship indicating the bis:Element being attributed by a concrete instance mixing-in ILinearlyLocatedAttribution.\n * @beta\n */\nexport class ILinearlyLocatedAttributesElement extends RelatedElement {\n public static classFullName = \"LinearReferencing:ILinearlyLocatedAttributesElement\";\n public constructor(attributedElementId: Id64String, relClassName: string = ILinearlyLocatedAttributesElement.classFullName) {\n super({ id: attributedElementId, relClassName });\n }\n}\n\n/** Relationship indicating the bis:SpatialElement being used as Referent for Linear Referencing purposes.\n * @beta\n */\nexport class IReferentReferencesElement extends RelatedElement {\n public static classFullName = \"LinearReferencing:IReferentReferencesElement\";\n public constructor(referencedElementId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\n super({ id: referencedElementId, relClassName });\n }\n}\n\n/** Relationship indicating the referent used by a particular linearly-referenced At position.\n * @beta\n */\nexport class LinearlyReferencedAtPositionRefersToReferent extends RelatedElement {\n public static classFullName = \"LinearReferencing:LinearlyReferencedAtPositionRefersToReferent\";\n public constructor(referentId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\n super({ id: referentId, relClassName });\n }\n}\n\n/** Relationship indicating the referent used by a particular linearly-referenced From position.\n * @beta\n */\nexport class LinearlyReferencedFromPositionRefersToReferent extends RelatedElement {\n public static classFullName = \"LinearReferencing:LinearlyReferencedFromPositionRefersToReferent\";\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedFromPositionRefersToReferent.classFullName) {\n super({ id: referentId, relClassName });\n }\n}\n\n/** Relationship indicating the referent used by a particular linearly-referenced To position.\n * @beta\n */\nexport class LinearlyReferencedToPositionRefersToReferent extends RelatedElement {\n public static classFullName = \"LinearReferencing:LinearlyReferencedToPositionRefersToReferent\";\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedToPositionRefersToReferent.classFullName) {\n super({ id: referentId, relClassName });\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingRelationships.js","sourceRoot":"","sources":["../../src/LinearReferencingRelationships.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,uBAAuB;IAC9E,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,qCAAqC,CAAC,CAAC,CAAC;CACjG;AAED;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,uBAAuB;IACxE,gBAAgB;IACT,MAAM,KAAc,SAAS,KAAa,OAAO,+BAA+B,CAAC,CAAC,CAAC;CAC3F;AAED;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,cAAc;IACzD,MAAM,CAAC,aAAa,GAAG,kDAAkD,CAAC;IACjF,YAAmB,QAAoB,EAAE,eAAuB,8BAA8B,CAAC,aAAa;QAC1G,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACxC,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,cAAc;IAC5D,MAAM,CAAC,aAAa,GAAG,qDAAqD,CAAC;IACpF,YAAmB,mBAA+B,EAAE,eAAuB,iCAAiC,CAAC,aAAa;QACxH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IACrD,MAAM,CAAC,aAAa,GAAG,8CAA8C,CAAC;IAC7E,YAAmB,mBAA+B,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACjH,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,4CAA6C,SAAQ,cAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,0BAA0B,CAAC,aAAa;QACxG,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,8CAA+C,SAAQ,cAAc;IACzE,MAAM,CAAC,aAAa,GAAG,kEAAkE,CAAC;IACjG,YAAmB,UAAsB,EAAE,eAAuB,8CAA8C,CAAC,aAAa;QAC5H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;;AAGH;;GAEG;AACH,MAAM,OAAO,4CAA6C,SAAQ,cAAc;IACvE,MAAM,CAAC,aAAa,GAAG,gEAAgE,CAAC;IAC/F,YAAmB,UAAsB,EAAE,eAAuB,4CAA4C,CAAC,aAAa;QAC1H,KAAK,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC","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 LinearReferencing\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { ElementRefersToElements } from \"@itwin/core-backend\";\r\nimport { RelatedElement } from \"@itwin/core-common\";\r\n\r\n/** Relationship indicating the Linear-Element along which concrete instances mixing-in ILinearlyLocated are located.\r\n * @beta\r\n */\r\nexport class ILinearlyLocatedAlongILinearElement extends ElementRefersToElements {\r\n /** @internal */\r\n public static override get className(): string { return \"ILinearlyLocatedAlongILinearElement\"; }\r\n}\r\n\r\n/** Relationship indicating bis:Element being linearly-located by a concrete instance mixing-in ILinearLocationElement.\r\n * @beta\r\n */\r\nexport class ILinearLocationLocatesElement extends ElementRefersToElements {\r\n /** @internal */\r\n public static override get className(): string { return \"ILinearLocationLocatesElement\"; }\r\n}\r\n\r\n/** Relationship associating Linear-Elements with the elements they came from.\r\n * @beta\r\n */\r\nexport class ILinearElementProvidedBySource extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:ILinearElementProvidedBySource\";\r\n public constructor(sourceId: Id64String, relClassName: string = ILinearElementProvidedBySource.classFullName) {\r\n super({ id: sourceId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the bis:Element being attributed by a concrete instance mixing-in ILinearlyLocatedAttribution.\r\n * @beta\r\n */\r\nexport class ILinearlyLocatedAttributesElement extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:ILinearlyLocatedAttributesElement\";\r\n public constructor(attributedElementId: Id64String, relClassName: string = ILinearlyLocatedAttributesElement.classFullName) {\r\n super({ id: attributedElementId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the bis:SpatialElement being used as Referent for Linear Referencing purposes.\r\n * @beta\r\n */\r\nexport class IReferentReferencesElement extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:IReferentReferencesElement\";\r\n public constructor(referencedElementId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\r\n super({ id: referencedElementId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the referent used by a particular linearly-referenced At position.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedAtPositionRefersToReferent extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:LinearlyReferencedAtPositionRefersToReferent\";\r\n public constructor(referentId: Id64String, relClassName: string = IReferentReferencesElement.classFullName) {\r\n super({ id: referentId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the referent used by a particular linearly-referenced From position.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedFromPositionRefersToReferent extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:LinearlyReferencedFromPositionRefersToReferent\";\r\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedFromPositionRefersToReferent.classFullName) {\r\n super({ id: referentId, relClassName });\r\n }\r\n}\r\n\r\n/** Relationship indicating the referent used by a particular linearly-referenced To position.\r\n * @beta\r\n */\r\nexport class LinearlyReferencedToPositionRefersToReferent extends RelatedElement {\r\n public static classFullName = \"LinearReferencing:LinearlyReferencedToPositionRefersToReferent\";\r\n public constructor(referentId: Id64String, relClassName: string = LinearlyReferencedToPositionRefersToReferent.classFullName) {\r\n super({ id: referentId, relClassName });\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinearReferencingSchema.js","sourceRoot":"","sources":["../../src/LinearReferencingSchema.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,mBAAmB,MAAM,kCAAkC,CAAC;AAExE;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,MAAM;IAC1C,MAAM,KAAc,UAAU,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAC7E;;;KAGC;IACI,MAAM,KAAK,cAAc,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,CAAC;IAClJ,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE7B,aAAa,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACnD,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAClD,aAAa,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module LinearReferencing\n */\n\nimport * as path from \"node:path\";\nimport { ClassRegistry, KnownLocations, Schema, Schemas } from \"@itwin/core-backend\";\nimport * as aspectsModule from \"./LinearReferencingElementAspects\";\nimport * as elementsModule from \"./LinearReferencingElements\";\nimport * as relationshipsModule from \"./LinearReferencingRelationships\";\n\n/** Schema for the LinearReferencing domain.\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\n * @beta\n */\nexport class LinearReferencingSchema extends Schema {\n public static override get schemaName(): string { return \"LinearReferencing\"; }\n /**\n * TODO: Currently the schema file comes from a hardcoded path assuming its delivered with imodeljs-native\n * Look to add a dependency on @bentley/linear-referencing-schema and using require.resolve to obtain the path\n */\n public static get schemaFilePath(): string { return path.join(KnownLocations.nativeAssetsDir, \"ECSchemas\", \"Domain\", \"LinearReferencing.ecschema.xml\"); }\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\n Schemas.unregisterSchema(this.schemaName);\n Schemas.registerSchema(this);\n\n ClassRegistry.registerModule(elementsModule, this);\n ClassRegistry.registerModule(aspectsModule, this);\n ClassRegistry.registerModule(relationshipsModule, this);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"LinearReferencingSchema.js","sourceRoot":"","sources":["../../src/LinearReferencingSchema.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,mBAAmB,MAAM,kCAAkC,CAAC;AAExE;;;GAGG;AACH,MAAM,OAAO,uBAAwB,SAAQ,MAAM;IAC1C,MAAM,KAAc,UAAU,KAAa,OAAO,mBAAmB,CAAC,CAAC,CAAC;IAC7E;;;KAGC;IACI,MAAM,KAAK,cAAc,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,gCAAgC,CAAC,CAAC,CAAC,CAAC;IAClJ,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE7B,aAAa,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACnD,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAClD,aAAa,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF","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 LinearReferencing\r\n */\r\n\r\nimport * as path from \"node:path\";\r\nimport { ClassRegistry, KnownLocations, Schema, Schemas } from \"@itwin/core-backend\";\r\nimport * as aspectsModule from \"./LinearReferencingElementAspects\";\r\nimport * as elementsModule from \"./LinearReferencingElements\";\r\nimport * as relationshipsModule from \"./LinearReferencingRelationships\";\r\n\r\n/** Schema for the LinearReferencing domain.\r\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\r\n * @beta\r\n */\r\nexport class LinearReferencingSchema extends Schema {\r\n public static override get schemaName(): string { return \"LinearReferencing\"; }\r\n /**\r\n * TODO: Currently the schema file comes from a hardcoded path assuming its delivered with imodeljs-native\r\n * Look to add a dependency on @bentley/linear-referencing-schema and using require.resolve to obtain the path\r\n */\r\n public static get schemaFilePath(): string { return path.join(KnownLocations.nativeAssetsDir, \"ECSchemas\", \"Domain\", \"LinearReferencing.ecschema.xml\"); }\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(this.schemaName)) {\r\n Schemas.unregisterSchema(this.schemaName);\r\n Schemas.registerSchema(this);\r\n\r\n ClassRegistry.registerModule(elementsModule, this);\r\n ClassRegistry.registerModule(aspectsModule, this);\r\n ClassRegistry.registerModule(relationshipsModule, this);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"linear-referencing-backend.js","sourceRoot":"","sources":["../../src/linear-referencing-backend.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAE1C;;GAEG;AAEH;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nexport * from \"./LinearReferencingElementAspects\";\nexport * from \"./LinearReferencingElements\";\nexport * from \"./LinearReferencingRelationships\";\nexport * from \"./LinearReferencingSchema\";\n\n/** @docs-package-description\n * The `@itwin/linear-referencing-backend` package contains classes for working with the LinearReferencing schema on the backend.\n */\n\n/** @docs-group-description LinearReferencing\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\n */\n"]}
1
+ {"version":3,"file":"linear-referencing-backend.js","sourceRoot":"","sources":["../../src/linear-referencing-backend.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAE1C;;GAEG;AAEH;;GAEG","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\r\nexport * from \"./LinearReferencingElementAspects\";\r\nexport * from \"./LinearReferencingElements\";\r\nexport * from \"./LinearReferencingRelationships\";\r\nexport * from \"./LinearReferencingSchema\";\r\n\r\n/** @docs-package-description\r\n * The `@itwin/linear-referencing-backend` package contains classes for working with the LinearReferencing schema on the backend.\r\n */\r\n\r\n/** @docs-group-description LinearReferencing\r\n * [Linear referencing](https://en.wikipedia.org/wiki/Linear_referencing) is the method of storing geographic locations by using relative positions along a measured linear feature.\r\n */\r\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@itwin/linear-referencing-backend",
3
- "version": "5.3.2",
3
+ "version": "5.4.0-dev.11",
4
4
  "main": "lib/cjs/linear-referencing-backend.js",
5
5
  "module": "lib/esm/linear-referencing-backend.js",
6
6
  "typings": "lib/cjs/linear-referencing-backend",
7
7
  "license": "MIT",
8
8
  "engines": {
9
- "node": "^20.0.0 || ^22.0.0"
9
+ "node": "^20.0.0 || ^22.0.0 || ^24.0.0"
10
10
  },
11
11
  "repository": {
12
12
  "type": "git",
@@ -23,10 +23,10 @@
23
23
  "url": "http://www.bentley.com"
24
24
  },
25
25
  "peerDependencies": {
26
- "@itwin/core-backend": "5.3.2",
27
- "@itwin/core-bentley": "5.3.2",
28
- "@itwin/core-common": "5.3.2",
29
- "@itwin/linear-referencing-common": "5.3.2"
26
+ "@itwin/core-backend": "5.4.0-dev.11",
27
+ "@itwin/core-bentley": "5.4.0-dev.11",
28
+ "@itwin/core-common": "5.4.0-dev.11",
29
+ "@itwin/linear-referencing-common": "5.4.0-dev.11"
30
30
  },
31
31
  "//devDependencies": [
32
32
  "NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install",
@@ -44,11 +44,11 @@
44
44
  "nyc": "^17.1.0",
45
45
  "rimraf": "^6.0.1",
46
46
  "typescript": "~5.6.2",
47
- "@itwin/core-backend": "5.3.2",
48
- "@itwin/build-tools": "5.3.2",
49
- "@itwin/core-bentley": "5.3.2",
50
- "@itwin/core-common": "5.3.2",
51
- "@itwin/linear-referencing-common": "5.3.2"
47
+ "@itwin/build-tools": "5.4.0-dev.11",
48
+ "@itwin/core-backend": "5.4.0-dev.11",
49
+ "@itwin/core-bentley": "5.4.0-dev.11",
50
+ "@itwin/linear-referencing-common": "5.4.0-dev.11",
51
+ "@itwin/core-common": "5.4.0-dev.11"
52
52
  },
53
53
  "nyc": {
54
54
  "extends": "./node_modules/@itwin/build-tools/.nycrc"