@itwin/core-common 4.10.0-dev.3 → 4.10.0-dev.30
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 +33 -1
- package/lib/cjs/Code.d.ts +8 -0
- package/lib/cjs/Code.d.ts.map +1 -1
- package/lib/cjs/Code.js +8 -0
- package/lib/cjs/Code.js.map +1 -1
- package/lib/cjs/ContextRealityModel.d.ts +19 -0
- package/lib/cjs/ContextRealityModel.d.ts.map +1 -1
- package/lib/cjs/ContextRealityModel.js +31 -0
- package/lib/cjs/ContextRealityModel.js.map +1 -1
- package/lib/cjs/ContourDisplay.d.ts +216 -0
- package/lib/cjs/ContourDisplay.d.ts.map +1 -0
- package/lib/cjs/ContourDisplay.js +300 -0
- package/lib/cjs/ContourDisplay.js.map +1 -0
- package/lib/cjs/DisplayStyleSettings.d.ts +9 -0
- package/lib/cjs/DisplayStyleSettings.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleSettings.js +16 -0
- package/lib/cjs/DisplayStyleSettings.js.map +1 -1
- package/lib/cjs/ECSqlReader.d.ts.map +1 -1
- package/lib/cjs/ECSqlReader.js +1 -10
- package/lib/cjs/ECSqlReader.js.map +1 -1
- package/lib/cjs/ElementProps.d.ts +25 -0
- package/lib/cjs/ElementProps.d.ts.map +1 -1
- package/lib/cjs/ElementProps.js.map +1 -1
- package/lib/cjs/FeatureSymbology.d.ts +36 -5
- package/lib/cjs/FeatureSymbology.d.ts.map +1 -1
- package/lib/cjs/FeatureSymbology.js +127 -40
- package/lib/cjs/FeatureSymbology.js.map +1 -1
- package/lib/cjs/core-common.d.ts +1 -0
- package/lib/cjs/core-common.d.ts.map +1 -1
- package/lib/cjs/core-common.js +1 -0
- package/lib/cjs/core-common.js.map +1 -1
- package/lib/cjs/geometry/ElementGeometry.js +3 -3
- package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
- package/lib/cjs/geometry/GeometryStream.js +2 -2
- package/lib/cjs/geometry/GeometryStream.js.map +1 -1
- package/lib/cjs/geometry/Placement.d.ts +3 -0
- package/lib/cjs/geometry/Placement.d.ts.map +1 -1
- package/lib/cjs/geometry/Placement.js +3 -0
- package/lib/cjs/geometry/Placement.js.map +1 -1
- package/lib/cjs/internal/Snapping.d.ts +7 -1
- package/lib/cjs/internal/Snapping.d.ts.map +1 -1
- package/lib/cjs/internal/Snapping.js.map +1 -1
- package/lib/cjs/rpc/SnapshotIModelRpcInterface.d.ts +3 -0
- package/lib/cjs/rpc/SnapshotIModelRpcInterface.d.ts.map +1 -1
- package/lib/cjs/rpc/SnapshotIModelRpcInterface.js +3 -0
- package/lib/cjs/rpc/SnapshotIModelRpcInterface.js.map +1 -1
- package/lib/cjs/rpc/WipRpcInterface.d.ts +1 -0
- package/lib/cjs/rpc/WipRpcInterface.d.ts.map +1 -1
- package/lib/cjs/rpc/WipRpcInterface.js +2 -1
- package/lib/cjs/rpc/WipRpcInterface.js.map +1 -1
- package/lib/esm/Code.d.ts +8 -0
- package/lib/esm/Code.d.ts.map +1 -1
- package/lib/esm/Code.js +8 -0
- package/lib/esm/Code.js.map +1 -1
- package/lib/esm/ContextRealityModel.d.ts +19 -0
- package/lib/esm/ContextRealityModel.d.ts.map +1 -1
- package/lib/esm/ContextRealityModel.js +31 -0
- package/lib/esm/ContextRealityModel.js.map +1 -1
- package/lib/esm/ContourDisplay.d.ts +216 -0
- package/lib/esm/ContourDisplay.d.ts.map +1 -0
- package/lib/esm/ContourDisplay.js +293 -0
- package/lib/esm/ContourDisplay.js.map +1 -0
- package/lib/esm/DisplayStyleSettings.d.ts +9 -0
- package/lib/esm/DisplayStyleSettings.d.ts.map +1 -1
- package/lib/esm/DisplayStyleSettings.js +16 -0
- package/lib/esm/DisplayStyleSettings.js.map +1 -1
- package/lib/esm/ECSqlReader.d.ts.map +1 -1
- package/lib/esm/ECSqlReader.js +1 -10
- package/lib/esm/ECSqlReader.js.map +1 -1
- package/lib/esm/ElementProps.d.ts +25 -0
- package/lib/esm/ElementProps.d.ts.map +1 -1
- package/lib/esm/ElementProps.js.map +1 -1
- package/lib/esm/FeatureSymbology.d.ts +36 -5
- package/lib/esm/FeatureSymbology.d.ts.map +1 -1
- package/lib/esm/FeatureSymbology.js +127 -40
- package/lib/esm/FeatureSymbology.js.map +1 -1
- package/lib/esm/core-common.d.ts +1 -0
- package/lib/esm/core-common.d.ts.map +1 -1
- package/lib/esm/core-common.js +1 -0
- package/lib/esm/core-common.js.map +1 -1
- package/lib/esm/geometry/ElementGeometry.js +3 -3
- package/lib/esm/geometry/ElementGeometry.js.map +1 -1
- package/lib/esm/geometry/GeometryStream.js +2 -2
- package/lib/esm/geometry/GeometryStream.js.map +1 -1
- package/lib/esm/geometry/Placement.d.ts +3 -0
- package/lib/esm/geometry/Placement.d.ts.map +1 -1
- package/lib/esm/geometry/Placement.js +3 -0
- package/lib/esm/geometry/Placement.js.map +1 -1
- package/lib/esm/internal/Snapping.d.ts +7 -1
- package/lib/esm/internal/Snapping.d.ts.map +1 -1
- package/lib/esm/internal/Snapping.js.map +1 -1
- package/lib/esm/rpc/SnapshotIModelRpcInterface.d.ts +3 -0
- package/lib/esm/rpc/SnapshotIModelRpcInterface.d.ts.map +1 -1
- package/lib/esm/rpc/SnapshotIModelRpcInterface.js +3 -0
- package/lib/esm/rpc/SnapshotIModelRpcInterface.js.map +1 -1
- package/lib/esm/rpc/WipRpcInterface.d.ts +1 -0
- package/lib/esm/rpc/WipRpcInterface.d.ts.map +1 -1
- package/lib/esm/rpc/WipRpcInterface.js +2 -1
- package/lib/esm/rpc/WipRpcInterface.js.map +1 -1
- package/package.json +10 -11
|
@@ -238,7 +238,7 @@ export class GeometryStreamBuilder {
|
|
|
238
238
|
return true;
|
|
239
239
|
}
|
|
240
240
|
const entityTrans = Transform.fromJSON(brep.transform);
|
|
241
|
-
const localTrans =
|
|
241
|
+
const localTrans = this._worldToLocal.multiplyTransformTransform(entityTrans);
|
|
242
242
|
const localBrep = {
|
|
243
243
|
data: brep.data,
|
|
244
244
|
type: brep.type,
|
|
@@ -464,7 +464,7 @@ export class GeometryStreamIterator {
|
|
|
464
464
|
else if (entry.brep) {
|
|
465
465
|
if (this.entry.localToWorld !== undefined) {
|
|
466
466
|
const entityTrans = Transform.fromJSON(entry.brep.transform);
|
|
467
|
-
entry.brep.transform =
|
|
467
|
+
entry.brep.transform = this.entry.localToWorld.multiplyTransformTransform(entityTrans).toJSON();
|
|
468
468
|
}
|
|
469
469
|
this.entry.setBRep(entry.brep);
|
|
470
470
|
return { value: this.entry, done: false };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryStream.js","sourceRoot":"","sources":["../../../src/geometry/GeometryStream.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 Geometry\r\n */\r\n\r\nimport { Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport {\r\n Angle, AnyGeometryQuery, GeometryQuery, IModelJson as GeomJson, LineSegment3d, LowAndHighXYZ, Matrix3d, Point2d, Point3d, Range3d, Transform, TransformProps,\r\n Vector3d, XYZProps, YawPitchRollAngles, YawPitchRollProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ColorDef, ColorDefProps } from \"../ColorDef\";\r\nimport { GeometricElement2dProps, GeometricElement3dProps, GeometryPartProps, isPlacement2dProps, PlacementProps } from \"../ElementProps\";\r\nimport { BackgroundFill, FillDisplay, GeometryClass, GeometryParams } from \"../GeometryParams\";\r\nimport { Gradient } from \"../Gradient\";\r\nimport { IModelError } from \"../IModelError\";\r\nimport { AreaPattern } from \"./AreaPattern\";\r\nimport { ImageGraphic, ImageGraphicProps } from \"./ImageGraphic\";\r\nimport { LineStyle } from \"./LineStyle\";\r\nimport { TextString, TextStringProps } from \"./TextString\";\r\nimport { Base64EncodedString } from \"../Base64EncodedString\";\r\nimport { Placement2d, Placement3d } from \"./Placement\";\r\nimport { TextBlockGeometryProps } from \"../annotation/TextBlockGeometryProps\";\r\n\r\n/** Establish a non-default [[SubCategory]] or to override [[SubCategoryAppearance]] for the geometry that follows.\r\n * A GeometryAppearanceProps always signifies a reset to the [[SubCategoryAppearance]] for subsequent [[GeometryStreamProps]] entries for undefined values.\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryAppearanceProps {\r\n /** Optional [[SubCategory]] id for subsequent geometry. Use to create a GeometryStream with geometry that is not on the default [[SubCategory]] for the element's [[Category]] or is has geometry on multiple subCategories. */\r\n subCategory?: Id64String;\r\n /** Optional color to override [[SubCategoryAppearance.color]] for subsequent geometry. */\r\n color?: ColorDefProps;\r\n /** Optional weight to override [[SubCategoryAppearance.weight]] for subsequent geometry. */\r\n weight?: number;\r\n /** Optional style to override [[SubCategoryAppearance.styleId]] for subsequent geometry. */\r\n style?: Id64String;\r\n /** Optional transparency, 0.0 if undefined. Effective transparency is a combination of this value and [[SubCategoryAppearance.color]]. */\r\n transparency?: number;\r\n /** Optional display priority (2d only), 0 if undefined. Effective display priority is a combination of this value and [[SubCategoryAppearance.priority]]. */\r\n displayPriority?: number;\r\n /** Optional GeometryClass (for DGN compatibility, subCategories preferred), [[GeometryClass.Primary]] if undefined. */\r\n geometryClass?: GeometryClass;\r\n}\r\n\r\n/** Add a [[gradient]], [[backgroundFill]], or solid [[color]] fill to subsequent planar regions (or meshes).\r\n * Only one value among [[gradient]], [[backgroundFill]], and [[color]] should be set.\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface AreaFillProps {\r\n /** Fill display type, must be set to something other than [[FillDisplay.Never]] to display fill */\r\n display: FillDisplay;\r\n /** Optional fill transparency, will be the same as outline transparency if undefined. Allows for different fill and outline transparencies */\r\n transparency?: number;\r\n /** Set fill color to view background color. Use [[BackgroundFill.Solid]] for an opaque fill and [[BackgroundFill.Outline]] to display an outline using the line color */\r\n backgroundFill?: BackgroundFill;\r\n /** Set fill color to a specific color. If the fill color the same as the line color, it is an opaque fill, otherwise it is an outline fill */\r\n color?: ColorDefProps;\r\n /** Set fill using gradient properties. */\r\n gradient?: Gradient.SymbProps;\r\n}\r\n\r\n/** Override [[SubCategoryAppearance.materialId]] for subsequent surface and solid geometry.\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface MaterialProps {\r\n /** Material id to use, specify an invalid [[Id64]] to override [[SubCategoryAppearance.materialId]] with no material. */\r\n materialId?: Id64String;\r\n /** @internal */\r\n origin?: XYZProps;\r\n /** @internal */\r\n size?: XYZProps;\r\n /** @internal */\r\n rotation?: YawPitchRollProps;\r\n}\r\n\r\n/** JSON representation of a brep GeometryStream entry.\r\n * @public\r\n */\r\nexport namespace BRepEntity {\r\n /** Enum for type of solid kernel entity this represents */\r\n export enum Type {\r\n /** Body consisting of at least one solid region */\r\n Solid = 0,\r\n /** Body consisting of connected sets of faces having edges that are shared by a maximum of two faces */\r\n Sheet = 1,\r\n /** Body consisting of connected sets of edges having vertices that are shared by a maximum of two edges */\r\n Wire = 2,\r\n }\r\n\r\n /** Optional symbology that can be assigned to individual faces of a solid or sheet body */\r\n export interface FaceSymbologyProps {\r\n /** Optional color override for face */\r\n color?: ColorDefProps;\r\n /** Optional transparency override for face */\r\n transparency?: number;\r\n /** Optional material override for face */\r\n materialId?: Id64String;\r\n }\r\n\r\n /** Geometry entry representing raw brep data.\r\n * @see [[GeometryStreamEntryProps]]\r\n */\r\n export interface DataProps {\r\n /** data as Base64 encoded string. Must be specifically requested using [[ElementLoadProps.wantBRepData]]. */\r\n data?: Base64EncodedString;\r\n /** body type, default is Solid */\r\n type?: Type;\r\n /** body transform, default is identity */\r\n transform?: TransformProps;\r\n /** body face attachments */\r\n faceSymbology?: FaceSymbologyProps[];\r\n }\r\n}\r\n\r\n/** Add a reference to a [[GeometryPart]] from the GeometryStream of a [[GeometricElement]].\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryPartInstanceProps {\r\n /** GeometryPart id */\r\n part: Id64String;\r\n /** Optional translation relative to element's placement, 0.0,0.0,0.0 if undefined. For a 2d element/translation, supply non-zero x and y only */\r\n origin?: XYZProps;\r\n /** Optional rotation relative to element's placement, 0.0,0.0,0.0 if undefined. For a 2d element/rotation, supply a non-zero yaw angle only */\r\n rotation?: YawPitchRollProps;\r\n /** Optional scale to apply to part, 1.0 if undefined */\r\n scale?: number;\r\n}\r\n\r\n/** Flags applied to the entire contents of a [[GeometryStreamProps]].\r\n * @see GeometryStreamHeaderProps\r\n * @public\r\n * @extensions\r\n */\r\nexport enum GeometryStreamFlags {\r\n /** No flags. */\r\n None = 0,\r\n /** When the geometry is displayed, it is always oriented to face the viewer. The placement origin of the element associated with the geometry is used as the rotation point.\r\n * If the placement origin is outside of the view, the geometry will not necessarily be displayed, even if rotating it to face the viewer would cause its range to intersect the viewed volume.\r\n */\r\n ViewIndependent = 1 << 0,\r\n}\r\n\r\n/** An entry in a [[GeometryStreamProps]] containing [[GeometryStreamFlags]] that apply to the geometry stream as a whole.\r\n * If this entry exists in the [[GeometryStreamProps]] array, it will always be the *first* entry.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryStreamHeaderProps {\r\n /** The flags applied to the geometry stream. */\r\n flags: GeometryStreamFlags;\r\n}\r\n\r\n/** Allowed GeometryStream entries - should only set one value.\r\n * @see [GeometryStream]($docs/learning/common/geometrystream.md)\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryStreamEntryProps extends GeomJson.GeometryProps {\r\n header?: GeometryStreamHeaderProps;\r\n appearance?: GeometryAppearanceProps;\r\n styleMod?: LineStyle.ModifierProps;\r\n fill?: AreaFillProps;\r\n pattern?: AreaPattern.ParamsProps;\r\n material?: MaterialProps;\r\n geomPart?: GeometryPartInstanceProps;\r\n textString?: TextStringProps;\r\n brep?: BRepEntity.DataProps;\r\n image?: ImageGraphicProps;\r\n subRange?: LowAndHighXYZ;\r\n}\r\n\r\n/** A [[GeometricElement]]'s GeometryStream is represented by an array of [[GeometryStreamEntryProps]].\r\n * @public\r\n * @extensions\r\n */\r\nexport type GeometryStreamProps = GeometryStreamEntryProps[];\r\n\r\n/** GeometryStreamBuilder is a helper class for populating the [[GeometryStreamProps]] array needed to create a [[GeometricElement]] or [[GeometryPart]].\r\n * @public\r\n */\r\nexport class GeometryStreamBuilder {\r\n /** Current inverse placement transform, used for converting world coordinate input to be placement relative */\r\n private _worldToLocal?: Transform;\r\n /** GeometryStream entries */\r\n public readonly geometryStream: GeometryStreamProps = [];\r\n\r\n /** Supply optional local to world transform. Used to transform world coordinate input relative to element placement.\r\n * For a [[GeometricElement]]'s placement to be meaningful, world coordinate geometry should never be appended to an element with an identity placement.\r\n * Can be called with undefined or identity transform to start appending geometry supplied in local coordinates again.\r\n */\r\n public setLocalToWorld(localToWorld?: Transform) {\r\n this._worldToLocal = (undefined === localToWorld || localToWorld.isIdentity ? undefined : localToWorld.inverse());\r\n }\r\n\r\n /** Supply local to world transform from a Point3d and optional YawPitchRollAngles.\r\n * @see [[Placement3d]]\r\n */\r\n public setLocalToWorld3d(origin: Point3d, angles: YawPitchRollAngles = YawPitchRollAngles.createDegrees(0.0, 0.0, 0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(origin, angles.toMatrix3d()));\r\n }\r\n\r\n /** Supply local to world transform from a Point2d and optional Angle.\r\n * @see [[Placement2d]]\r\n */\r\n public setLocalToWorld2d(origin: Point2d, angle: Angle = Angle.createDegrees(0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(Point3d.createFrom(origin), Matrix3d.createRotationAroundVector(Vector3d.unitZ(), angle)));\r\n }\r\n\r\n /** Supply local to world transform from a PlacementProps2d or PlacementProps3d.\r\n * @see [[PlacementProps]]\r\n */\r\n public setLocalToWorldFromPlacement(props: PlacementProps) {\r\n const placement = isPlacement2dProps(props) ? Placement2d.fromJSON(props) : Placement3d.fromJSON(props);\r\n this.setLocalToWorld(placement.transform);\r\n }\r\n\r\n /** Store local ranges in GeometryStream for all subsequent geometry appended. Can improve performance of range testing for elements with a GeometryStream\r\n * containing more than one [[GeometryQuery]] differentiable by range. Not useful for a single [[GeometryQuery]] as its range and that of the [[GeometricElement]] are the same.\r\n * Ignored when defining a [[GeometryPart]] and not needed when only appending [[GeometryPart]] instances to a [[GeometricElement]] as these store their own range.\r\n */\r\n public appendGeometryRanges() {\r\n this.geometryStream.push({ subRange: Range3d.createNull() });\r\n }\r\n\r\n /** Change [[SubCategory]] or reset to [[SubCategoryAppearance]] for subsequent geometry.\r\n * An invalid sub-category id can be supplied to force a reset to the current [[SubCategoryAppearance]].\r\n * It is not valid to change the sub-category when defining a [[GeometryPart]]. A [[GeometryPart]] inherit the symbology of their instance for anything not explicitly overridden.\r\n */\r\n public appendSubCategoryChange(subCategoryId: Id64String): boolean {\r\n this.geometryStream.push({ appearance: { subCategory: subCategoryId } });\r\n return true;\r\n }\r\n\r\n /** Change [[GeometryParams]] for subsequent geometry.\r\n * It is not valid to change the sub-category when defining a [[GeometryPart]]. A [[GeometryPart]] inherits the symbology of their instance for anything not explicitly overridden.\r\n */\r\n public appendGeometryParamsChange(geomParams: GeometryParams): boolean {\r\n const appearance: GeometryAppearanceProps = {\r\n subCategory: geomParams.subCategoryId,\r\n color: geomParams.lineColor?.toJSON(),\r\n weight: geomParams.weight,\r\n style: geomParams.styleInfo?.styleId,\r\n transparency: geomParams.elmTransparency,\r\n displayPriority: geomParams.elmPriority,\r\n geometryClass: geomParams.geometryClass,\r\n };\r\n this.geometryStream.push({ appearance });\r\n\r\n if (undefined !== geomParams.materialId)\r\n this.geometryStream.push({ material: { materialId: geomParams.materialId } });\r\n\r\n if (undefined !== geomParams.fillDisplay && FillDisplay.Never !== geomParams.fillDisplay) {\r\n const fill: AreaFillProps = {\r\n display: geomParams.fillDisplay,\r\n transparency: geomParams.fillTransparency,\r\n };\r\n if (undefined !== geomParams.gradient && Gradient.Mode.None !== geomParams.gradient.mode)\r\n fill.gradient = geomParams.gradient?.toJSON();\r\n else if (undefined !== geomParams.backgroundFill && BackgroundFill.None !== geomParams.backgroundFill)\r\n fill.backgroundFill = geomParams.backgroundFill;\r\n else if (undefined !== geomParams.fillColor)\r\n fill.color = geomParams.fillColor.toJSON();\r\n this.geometryStream.push({ fill });\r\n }\r\n\r\n if (undefined !== geomParams.pattern) {\r\n const localPattern = this._worldToLocal ? geomParams.pattern.clone() : geomParams.pattern;\r\n if (undefined !== this._worldToLocal && !localPattern.applyTransform(this._worldToLocal))\r\n return false;\r\n\r\n this.geometryStream.push({ pattern: localPattern.toJSON() });\r\n }\r\n\r\n if (undefined !== geomParams.styleInfo && undefined !== geomParams.styleInfo.styleMod) {\r\n const localStyleMod = new LineStyle.Modifier(geomParams.styleInfo.styleMod);\r\n if (undefined !== this._worldToLocal && !localStyleMod.applyTransform(this._worldToLocal))\r\n return false;\r\n this.geometryStream.push({ styleMod: localStyleMod });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to a [[GeometryStreamProps]] array for creating a [[GeometricElement3d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart3d(partId: Id64String, instanceOrigin?: Point3d, instanceRotation?: YawPitchRollAngles, instanceScale?: number): boolean {\r\n if (undefined === this._worldToLocal) {\r\n this.geometryStream.push({ geomPart: { part: partId, origin: instanceOrigin, rotation: instanceRotation, scale: instanceScale } });\r\n return true;\r\n }\r\n const partTrans = Transform.createOriginAndMatrix(instanceOrigin, instanceRotation ? instanceRotation.toMatrix3d() : Matrix3d.createIdentity());\r\n if (undefined !== instanceScale)\r\n partTrans.matrix.scaleColumnsInPlace(instanceScale, instanceScale, instanceScale);\r\n const resultTrans = this._worldToLocal.multiplyTransformTransform(partTrans);\r\n const scales = new Vector3d();\r\n if (!resultTrans.matrix.normalizeColumnsInPlace(scales))\r\n return false;\r\n const newRotation = YawPitchRollAngles.createFromMatrix3d(resultTrans.matrix);\r\n if (undefined === newRotation)\r\n return false;\r\n this.geometryStream.push({ geomPart: { part: partId, origin: resultTrans.getOrigin(), rotation: newRotation, scale: scales.x } });\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to a [[GeometryStreamProps]] array for creating a [[GeometricElement2d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart2d(partId: Id64String, instanceOrigin?: Point2d, instanceRotation?: Angle, instanceScale?: number): boolean {\r\n return this.appendGeometryPart3d(partId, instanceOrigin ? Point3d.createFrom(instanceOrigin) : undefined, instanceRotation ? new YawPitchRollAngles(instanceRotation) : undefined, instanceScale);\r\n }\r\n\r\n /** Append a [[TextString]] supplied in either local or world coordinates to the [[GeometryStreamProps]] array */\r\n public appendTextString(textString: TextString): boolean {\r\n if (this._worldToLocal) {\r\n textString = new TextString(textString);\r\n if (!textString.transformInPlace(this._worldToLocal)) {\r\n return false;\r\n }\r\n }\r\n\r\n this.geometryStream.push({ textString: textString.toJSON() });\r\n return true;\r\n }\r\n\r\n /** Append a series of entries representing a [[TextBlock]] to the [[GeometryStreamProps]] array.\r\n * @beta\r\n */\r\n public appendTextBlock(block: TextBlockGeometryProps): boolean {\r\n for (const entry of block.entries) {\r\n let result: boolean;\r\n if (undefined !== entry.text) {\r\n result = this.appendTextString(new TextString(entry.text));\r\n } else if (undefined !== entry.color) {\r\n if (entry.color === \"subcategory\") {\r\n result = this.appendSubCategoryChange(Id64.invalid);\r\n } else {\r\n this.geometryStream.push({ appearance: { color: entry.color } });\r\n result = true;\r\n }\r\n } else {\r\n result = this.appendGeometry(LineSegment3d.fromJSON(entry.separator));\r\n }\r\n\r\n if (!result) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Append an [[ImageGraphic]] supplied in either local or world coordinates. */\r\n public appendImage(image: ImageGraphic): boolean {\r\n if (undefined !== this._worldToLocal)\r\n image = image.cloneTransformed(this._worldToLocal);\r\n\r\n this.geometryStream.push({ image: image.toJSON() });\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryQuery]] supplied in either local or world coordinates to the [[GeometryStreamProps]] array */\r\n public appendGeometry(geometry: GeometryQuery): boolean {\r\n if (undefined === this._worldToLocal) {\r\n const geomData = GeomJson.Writer.toIModelJson(geometry);\r\n if (undefined === geomData)\r\n return false;\r\n this.geometryStream.push(geomData);\r\n return true;\r\n }\r\n const localGeometry = geometry.cloneTransformed(this._worldToLocal);\r\n if (undefined === localGeometry)\r\n return false;\r\n const localGeomData = GeomJson.Writer.toIModelJson(localGeometry);\r\n if (undefined === localGeomData)\r\n return false;\r\n this.geometryStream.push(localGeomData);\r\n return true;\r\n }\r\n\r\n /** Append [[BRepEntity.DataProps]] supplied in either local or world coordinates to the [[GeometryStreamProps]] array\r\n * @beta\r\n */\r\n public appendBRepData(brep: BRepEntity.DataProps): boolean {\r\n if (undefined === this._worldToLocal) {\r\n this.geometryStream.push({ brep });\r\n return true;\r\n }\r\n const entityTrans = Transform.fromJSON(brep.transform);\r\n const localTrans = entityTrans.multiplyTransformTransform(this._worldToLocal);\r\n const localBrep: BRepEntity.DataProps = {\r\n data: brep.data,\r\n type: brep.type,\r\n transform: localTrans.isIdentity ? undefined : localTrans.toJSON(),\r\n faceSymbology: brep.faceSymbology,\r\n };\r\n this.geometryStream.push({ brep: localBrep });\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public getHeader(): GeometryStreamHeaderProps | undefined {\r\n return 0 < this.geometryStream.length ? this.geometryStream[0].header : undefined;\r\n }\r\n\r\n /** @internal */\r\n public obtainHeader(): GeometryStreamHeaderProps {\r\n const hdr = this.getHeader();\r\n if (undefined !== hdr)\r\n return hdr;\r\n\r\n const entry = { header: { flags: GeometryStreamFlags.None } };\r\n this.geometryStream.unshift(entry);\r\n return entry.header;\r\n }\r\n\r\n /** Controls whether or not the geometry in the stream should be displayed as view-independent.\r\n * When view-independent geometry is displayed, it is always oriented to face the viewer, using the placement origin of the element as the rotation point.\r\n * If the placement origin is outside of the view, the geometry will not necessarily be displayed, even if rotating it to face the viewer would cause its range to intersect the viewed volume\r\n * @public\r\n */\r\n public get isViewIndependent(): boolean {\r\n const hdr = this.getHeader();\r\n return undefined !== hdr && GeometryStreamFlags.None !== (hdr.flags & GeometryStreamFlags.ViewIndependent);\r\n }\r\n public set isViewIndependent(viewIndependent: boolean) {\r\n if (viewIndependent === this.isViewIndependent)\r\n return;\r\n\r\n const hdr = this.obtainHeader();\r\n if (viewIndependent)\r\n hdr.flags |= GeometryStreamFlags.ViewIndependent;\r\n else\r\n hdr.flags &= ~GeometryStreamFlags.ViewIndependent;\r\n }\r\n}\r\n\r\n/** Represents a text string within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface TextStringPrimitive {\r\n type: \"textString\";\r\n readonly textString: TextString;\r\n}\r\n\r\n/** Represents an image within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ImagePrimitive {\r\n type: \"image\";\r\n readonly image: ImageGraphic;\r\n}\r\n\r\n/** Represents a reference to a GeometryPart within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface PartReference {\r\n type: \"partReference\";\r\n part: {\r\n id: Id64String;\r\n readonly toLocal?: Transform;\r\n };\r\n}\r\n\r\n/** Represents a BRep within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface BRepPrimitive {\r\n type: \"brep\";\r\n /** @beta */\r\n readonly brep: BRepEntity.DataProps;\r\n}\r\n\r\n/** Represents one of a variety of GeometryQuery objects within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryPrimitive {\r\n type: \"geometryQuery\";\r\n readonly geometry: AnyGeometryQuery;\r\n}\r\n\r\n/** Union of all possible geometric primitive types that may appear within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport type GeometryStreamPrimitive = TextStringPrimitive | PartReference | BRepPrimitive | GeometryPrimitive | ImagePrimitive;\r\n\r\n/** Holds current state information for [[GeometryStreamIterator]]. Each entry represents exactly one geometry primitive in the stream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryStreamIteratorEntry {\r\n /** A [[GeometryParams]] representing the appearance of the current geometric entry */\r\n readonly geomParams: GeometryParams;\r\n /** Placement transform, used for converting placement relative, local coordinate entries to world */\r\n readonly localToWorld?: Transform;\r\n /** Optional stored local range for the current geometric entry */\r\n readonly localRange?: Range3d;\r\n /** Returns the geometric primitive represented by this entry. */\r\n readonly primitive: GeometryStreamPrimitive;\r\n}\r\n\r\nclass IteratorEntry implements GeometryStreamIteratorEntry {\r\n private _primitive?: GeometryStreamPrimitive;\r\n public readonly geomParams: GeometryParams;\r\n public readonly localToWorld?: Transform;\r\n public localRange?: Range3d;\r\n\r\n public constructor(appearance: Id64String | GeometryParams, localToWorld?: Transform) {\r\n this.geomParams = typeof appearance === \"string\" ? new GeometryParams(appearance) : appearance;\r\n this.localToWorld = localToWorld;\r\n }\r\n\r\n public get primitive() { return this._primitive!; }\r\n public set primitive(primitive: GeometryStreamPrimitive) { this._primitive = primitive; }\r\n\r\n public setGeometryQuery(geometry: AnyGeometryQuery) { this._primitive = { type: \"geometryQuery\", geometry }; }\r\n public setTextString(textString: TextString) { this._primitive = { type: \"textString\", textString }; }\r\n public setBRep(brep: BRepEntity.DataProps) { this._primitive = { type: \"brep\", brep }; }\r\n public setImage(image: ImageGraphic) { this._primitive = { type: \"image\", image }; }\r\n public setPartReference(id: Id64String, toLocal?: Transform) {\r\n this._primitive = {\r\n type: \"partReference\",\r\n part: { id, toLocal },\r\n };\r\n }\r\n}\r\n\r\n/** GeometryStreamIterator is a helper class for iterating a [[GeometryStreamProps]].\r\n * A [[GeometricElement]]'s GeometryStream must be specifically requested using [[ElementLoadProps.wantGeometry]].\r\n * Each [[GeometryStreamIteratorEntry]] returned by the iterator represents exactly one geometric primitive in the stream.\r\n * @public\r\n */\r\nexport class GeometryStreamIterator implements IterableIterator<GeometryStreamIteratorEntry> {\r\n /** GeometryStream entries */\r\n public geometryStream: GeometryStreamProps;\r\n /** Flags applied to the entire geometry stream. */\r\n public readonly flags: GeometryStreamFlags;\r\n /** Current entry position */\r\n private _index = 0;\r\n /** Allocated on first call to next() and reused thereafter. */\r\n private _entry?: IteratorEntry;\r\n /** Used to initialize this._entry. */\r\n private readonly _appearance: Id64String | GeometryParams;\r\n private readonly _localToWorld?: Transform;\r\n\r\n /** Construct a new GeometryStreamIterator given a [[GeometryStreamProps]] from either a [[GeometricElement3d]], [[GeometricElement2d]], or [[GeometryPart]].\r\n * Supply the [[GeometricElement]]'s category to initialize the appearance information for each geometric entry.\r\n */\r\n public constructor(geometryStream: GeometryStreamProps, categoryOrGeometryParams?: Id64String | GeometryParams, localToWorld?: Transform) {\r\n this.geometryStream = geometryStream;\r\n this._appearance = categoryOrGeometryParams ?? Id64.invalid;\r\n this._localToWorld = localToWorld;\r\n if (0 < geometryStream.length && undefined !== geometryStream[0].header) {\r\n this.flags = geometryStream[0].header.flags;\r\n ++this._index;\r\n } else {\r\n this.flags = GeometryStreamFlags.None;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private get entry() {\r\n if (undefined === this._entry)\r\n this._entry = new IteratorEntry(this._appearance, this._localToWorld);\r\n\r\n return this._entry;\r\n }\r\n\r\n /** Create a new GeometryStream iterator for a [[GeometricElement3d]].\r\n * If [[GeometricElement3dProps.placement]] is not undefined, placement relative entries will be returned transformed to world coordinates.\r\n * @throws [[IModelError]] if element.geom is undefined.\r\n */\r\n public static fromGeometricElement3d(element: Pick<GeometricElement3dProps, \"geom\" | \"placement\" | \"category\">) {\r\n if (element.geom === undefined)\r\n throw new IModelError(IModelStatus.NoGeometry, \"GeometricElement has no geometry or geometry wasn't requested\");\r\n\r\n let transform;\r\n if (element.placement !== undefined)\r\n transform = Transform.createOriginAndMatrix(Point3d.fromJSON(element.placement.origin), YawPitchRollAngles.fromJSON(element.placement.angles).toMatrix3d());\r\n\r\n return new GeometryStreamIterator(element.geom, element.category, transform);\r\n }\r\n\r\n /** Create a new GeometryStream iterator for a [[GeometricElement2d]].\r\n * If [[GeometricElement2dProps.placement]] is not undefined, placement relative entries will be returned transformed to world coordinates.\r\n * @throws [[IModelError]] if element.geom is undefined.\r\n */\r\n public static fromGeometricElement2d(element: Pick<GeometricElement2dProps, \"geom\" | \"placement\" | \"category\">) {\r\n if (element.geom === undefined)\r\n throw new IModelError(IModelStatus.NoGeometry, \"GeometricElement has no geometry or geometry wasn't requested\");\r\n\r\n let transform;\r\n if (element.placement !== undefined) {\r\n const origin = Point3d.createFrom(Point2d.fromJSON(element.placement.origin));\r\n const matrix = Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.fromJSON(element.placement.angle))!;\r\n transform = Transform.createOriginAndMatrix(origin, matrix);\r\n }\r\n\r\n return new GeometryStreamIterator(element.geom, element.category, transform);\r\n }\r\n\r\n /** Create a new GeometryStream iterator for a [[GeometryPart]].\r\n * To iterate a part's GeometryStream in the context of a part instance found for a [[GeometricElement]], provide the optional [[GeometryParams]] and Transform from the [[GeometricElement]]'s [[GeometryStreamIterator]].\r\n * Supply the [[GeometryParams]] to return appearance information as inherited from the [[GeometricElement]].\r\n * Supply the partToWorld transform to return the part geometry in world coordinates.\r\n * Supply the partToLocal transform to return the part geometry relative to the [[GeometricElement]]'s placement.\r\n * @throws [[IModelError]] if geomPart.geom is undefined.\r\n */\r\n public static fromGeometryPart(geomPart: Pick<GeometryPartProps, \"geom\">, geomParams?: GeometryParams, partTransform?: Transform) {\r\n if (geomPart.geom === undefined)\r\n throw new IModelError(IModelStatus.NoGeometry, \"GeometryPart has no geometry or geometry wasn't requested\");\r\n\r\n return new GeometryStreamIterator(geomPart.geom, geomParams?.clone(), partTransform);\r\n }\r\n\r\n /** Get the transform that if applied to a [[GeometryPart]]'s GeometryStream entries would return them in world coordinates. */\r\n public partToWorld(): Transform | undefined {\r\n if (undefined === this._entry)\r\n return this._localToWorld;\r\n\r\n const partToLocal = \"partReference\" === this._entry.primitive.type ? this._entry.primitive.part.toLocal : undefined;\r\n if (this._entry.localToWorld === undefined || partToLocal === undefined)\r\n return this._entry.localToWorld;\r\n\r\n return this._entry.localToWorld.multiplyTransformTransform(partToLocal);\r\n }\r\n\r\n /** Advance to next displayable geometric entry while updating the current [[GeometryParams]] from appearance related entries.\r\n * Geometric entries are [[TextString]], [[GeometryQuery]], [[GeometryPart]], [[ImageGraphic]], and [[BRepEntity.DataProps]].\r\n */\r\n public next(): IteratorResult<GeometryStreamIteratorEntry> {\r\n // NOTE: localRange remains valid until we encounter either a new subRange entry or a geometry part reference.\r\n while (this._index < this.geometryStream.length) {\r\n const entry = this.geometryStream[this._index++];\r\n if (entry.appearance) {\r\n this.entry.geomParams.resetAppearance();\r\n if (entry.appearance.subCategory)\r\n this.entry.geomParams.subCategoryId = Id64.fromJSON(entry.appearance.subCategory);\r\n if (undefined !== entry.appearance.color)\r\n this.entry.geomParams.lineColor = ColorDef.fromJSON(entry.appearance.color);\r\n if (undefined !== entry.appearance.weight)\r\n this.entry.geomParams.weight = entry.appearance.weight;\r\n if (undefined !== entry.appearance.style)\r\n this.entry.geomParams.styleInfo = new LineStyle.Info(Id64.fromJSON(entry.appearance.style));\r\n if (undefined !== entry.appearance.transparency)\r\n this.entry.geomParams.elmTransparency = entry.appearance.transparency;\r\n if (undefined !== entry.appearance.displayPriority)\r\n this.entry.geomParams.elmPriority = entry.appearance.displayPriority;\r\n if (undefined !== entry.appearance.geometryClass)\r\n this.entry.geomParams.geometryClass = entry.appearance.geometryClass;\r\n } else if (entry.styleMod) {\r\n if (this.entry.geomParams.styleInfo === undefined)\r\n continue;\r\n\r\n const styleMod = new LineStyle.Modifier(entry.styleMod);\r\n if (this.entry.localToWorld !== undefined)\r\n styleMod.applyTransform(this.entry.localToWorld);\r\n\r\n this.entry.geomParams.styleInfo = new LineStyle.Info(this.entry.geomParams.styleInfo.styleId, styleMod);\r\n } else if (entry.fill) {\r\n if (entry.fill.display)\r\n this.entry.geomParams.fillDisplay = entry.fill.display;\r\n if (entry.fill.transparency)\r\n this.entry.geomParams.fillTransparency = entry.fill.transparency;\r\n if (entry.fill.gradient)\r\n this.entry.geomParams.gradient = Gradient.Symb.fromJSON(entry.fill.gradient);\r\n else if (entry.fill.backgroundFill)\r\n this.entry.geomParams.backgroundFill = entry.fill.backgroundFill;\r\n else if (entry.fill.color)\r\n this.entry.geomParams.fillColor = ColorDef.fromJSON(entry.fill.color);\r\n } else if (entry.pattern) {\r\n const params = AreaPattern.Params.fromJSON(entry.pattern);\r\n if (this.entry.localToWorld !== undefined)\r\n params.applyTransform(this.entry.localToWorld);\r\n\r\n this.entry.geomParams.pattern = params;\r\n } else if (entry.material) {\r\n if (entry.material.materialId)\r\n this.entry.geomParams.materialId = Id64.fromJSON(entry.material.materialId);\r\n } else if (entry.subRange) {\r\n this.entry.localRange = Range3d.fromJSON(entry.subRange);\r\n } else if (entry.geomPart) {\r\n let transform;\r\n if (entry.geomPart.origin !== undefined || entry.geomPart.rotation !== undefined || entry.geomPart.scale !== undefined) {\r\n const origin = entry.geomPart.origin ? Point3d.fromJSON(entry.geomPart.origin) : Point3d.createZero();\r\n const rotation = entry.geomPart.rotation ? YawPitchRollAngles.fromJSON(entry.geomPart.rotation).toMatrix3d() : Matrix3d.createIdentity();\r\n transform = Transform.createRefs(origin, rotation);\r\n if (entry.geomPart.scale)\r\n transform.multiplyTransformTransform(Transform.createRefs(Point3d.createZero(), Matrix3d.createUniformScale(entry.geomPart.scale)), transform);\r\n }\r\n\r\n // Subgraphic range doesn't apply to parts. A sane geometry stream (i.e., any that has been through the native layers or GeometryStreamBuilder)\r\n // will have a new subgraphic range for any geometric primitive following the part.\r\n this.entry.localRange = undefined;\r\n this.entry.setPartReference(Id64.fromJSON(entry.geomPart.part), transform);\r\n return { value: this.entry, done: false };\r\n } else if (entry.textString) {\r\n const textString = new TextString(entry.textString);\r\n if (this.entry.localToWorld !== undefined)\r\n textString.transformInPlace(this.entry.localToWorld);\r\n\r\n this.entry.setTextString(textString);\r\n return { value: this.entry, done: false };\r\n } else if (entry.image) {\r\n const image = ImageGraphic.fromJSON(entry.image);\r\n if (undefined !== this.entry.localToWorld)\r\n image.transformInPlace(this.entry.localToWorld);\r\n\r\n this.entry.setImage(image);\r\n return { value: this.entry, done: false };\r\n } else if (entry.brep) {\r\n if (this.entry.localToWorld !== undefined) {\r\n const entityTrans = Transform.fromJSON(entry.brep.transform);\r\n entry.brep.transform = entityTrans.multiplyTransformTransform(this.entry.localToWorld).toJSON();\r\n }\r\n\r\n this.entry.setBRep(entry.brep);\r\n return { value: this.entry, done: false };\r\n } else {\r\n const geometryQuery = GeomJson.Reader.parse(entry);\r\n if (!(geometryQuery instanceof GeometryQuery))\r\n continue;\r\n\r\n if (this.entry.localToWorld !== undefined)\r\n geometryQuery.tryTransformInPlace(this.entry.localToWorld);\r\n\r\n this.entry.setGeometryQuery(geometryQuery);\r\n return { value: this.entry, done: false };\r\n }\r\n }\r\n\r\n return { value: this.entry, done: true };\r\n }\r\n\r\n public [Symbol.iterator](): IterableIterator<GeometryStreamIteratorEntry> {\r\n return this;\r\n }\r\n\r\n /** @internal */\r\n public get isViewIndependent(): boolean { return GeometryStreamFlags.None !== (this.flags & GeometryStreamFlags.ViewIndependent); }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GeometryStream.js","sourceRoot":"","sources":["../../../src/geometry/GeometryStream.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 Geometry\r\n */\r\n\r\nimport { Id64, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport {\r\n Angle, AnyGeometryQuery, GeometryQuery, IModelJson as GeomJson, LineSegment3d, LowAndHighXYZ, Matrix3d, Point2d, Point3d, Range3d, Transform, TransformProps,\r\n Vector3d, XYZProps, YawPitchRollAngles, YawPitchRollProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ColorDef, ColorDefProps } from \"../ColorDef\";\r\nimport { GeometricElement2dProps, GeometricElement3dProps, GeometryPartProps, isPlacement2dProps, PlacementProps } from \"../ElementProps\";\r\nimport { BackgroundFill, FillDisplay, GeometryClass, GeometryParams } from \"../GeometryParams\";\r\nimport { Gradient } from \"../Gradient\";\r\nimport { IModelError } from \"../IModelError\";\r\nimport { AreaPattern } from \"./AreaPattern\";\r\nimport { ImageGraphic, ImageGraphicProps } from \"./ImageGraphic\";\r\nimport { LineStyle } from \"./LineStyle\";\r\nimport { TextString, TextStringProps } from \"./TextString\";\r\nimport { Base64EncodedString } from \"../Base64EncodedString\";\r\nimport { Placement2d, Placement3d } from \"./Placement\";\r\nimport { TextBlockGeometryProps } from \"../annotation/TextBlockGeometryProps\";\r\n\r\n/** Establish a non-default [[SubCategory]] or to override [[SubCategoryAppearance]] for the geometry that follows.\r\n * A GeometryAppearanceProps always signifies a reset to the [[SubCategoryAppearance]] for subsequent [[GeometryStreamProps]] entries for undefined values.\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryAppearanceProps {\r\n /** Optional [[SubCategory]] id for subsequent geometry. Use to create a GeometryStream with geometry that is not on the default [[SubCategory]] for the element's [[Category]] or is has geometry on multiple subCategories. */\r\n subCategory?: Id64String;\r\n /** Optional color to override [[SubCategoryAppearance.color]] for subsequent geometry. */\r\n color?: ColorDefProps;\r\n /** Optional weight to override [[SubCategoryAppearance.weight]] for subsequent geometry. */\r\n weight?: number;\r\n /** Optional style to override [[SubCategoryAppearance.styleId]] for subsequent geometry. */\r\n style?: Id64String;\r\n /** Optional transparency, 0.0 if undefined. Effective transparency is a combination of this value and [[SubCategoryAppearance.color]]. */\r\n transparency?: number;\r\n /** Optional display priority (2d only), 0 if undefined. Effective display priority is a combination of this value and [[SubCategoryAppearance.priority]]. */\r\n displayPriority?: number;\r\n /** Optional GeometryClass (for DGN compatibility, subCategories preferred), [[GeometryClass.Primary]] if undefined. */\r\n geometryClass?: GeometryClass;\r\n}\r\n\r\n/** Add a [[gradient]], [[backgroundFill]], or solid [[color]] fill to subsequent planar regions (or meshes).\r\n * Only one value among [[gradient]], [[backgroundFill]], and [[color]] should be set.\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface AreaFillProps {\r\n /** Fill display type, must be set to something other than [[FillDisplay.Never]] to display fill */\r\n display: FillDisplay;\r\n /** Optional fill transparency, will be the same as outline transparency if undefined. Allows for different fill and outline transparencies */\r\n transparency?: number;\r\n /** Set fill color to view background color. Use [[BackgroundFill.Solid]] for an opaque fill and [[BackgroundFill.Outline]] to display an outline using the line color */\r\n backgroundFill?: BackgroundFill;\r\n /** Set fill color to a specific color. If the fill color the same as the line color, it is an opaque fill, otherwise it is an outline fill */\r\n color?: ColorDefProps;\r\n /** Set fill using gradient properties. */\r\n gradient?: Gradient.SymbProps;\r\n}\r\n\r\n/** Override [[SubCategoryAppearance.materialId]] for subsequent surface and solid geometry.\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface MaterialProps {\r\n /** Material id to use, specify an invalid [[Id64]] to override [[SubCategoryAppearance.materialId]] with no material. */\r\n materialId?: Id64String;\r\n /** @internal */\r\n origin?: XYZProps;\r\n /** @internal */\r\n size?: XYZProps;\r\n /** @internal */\r\n rotation?: YawPitchRollProps;\r\n}\r\n\r\n/** JSON representation of a brep GeometryStream entry.\r\n * @public\r\n */\r\nexport namespace BRepEntity {\r\n /** Enum for type of solid kernel entity this represents */\r\n export enum Type {\r\n /** Body consisting of at least one solid region */\r\n Solid = 0,\r\n /** Body consisting of connected sets of faces having edges that are shared by a maximum of two faces */\r\n Sheet = 1,\r\n /** Body consisting of connected sets of edges having vertices that are shared by a maximum of two edges */\r\n Wire = 2,\r\n }\r\n\r\n /** Optional symbology that can be assigned to individual faces of a solid or sheet body */\r\n export interface FaceSymbologyProps {\r\n /** Optional color override for face */\r\n color?: ColorDefProps;\r\n /** Optional transparency override for face */\r\n transparency?: number;\r\n /** Optional material override for face */\r\n materialId?: Id64String;\r\n }\r\n\r\n /** Geometry entry representing raw brep data.\r\n * @see [[GeometryStreamEntryProps]]\r\n */\r\n export interface DataProps {\r\n /** data as Base64 encoded string. Must be specifically requested using [[ElementLoadProps.wantBRepData]]. */\r\n data?: Base64EncodedString;\r\n /** body type, default is Solid */\r\n type?: Type;\r\n /** body transform, default is identity */\r\n transform?: TransformProps;\r\n /** body face attachments */\r\n faceSymbology?: FaceSymbologyProps[];\r\n }\r\n}\r\n\r\n/** Add a reference to a [[GeometryPart]] from the GeometryStream of a [[GeometricElement]].\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryPartInstanceProps {\r\n /** GeometryPart id */\r\n part: Id64String;\r\n /** Optional translation relative to element's placement, 0.0,0.0,0.0 if undefined. For a 2d element/translation, supply non-zero x and y only */\r\n origin?: XYZProps;\r\n /** Optional rotation relative to element's placement, 0.0,0.0,0.0 if undefined. For a 2d element/rotation, supply a non-zero yaw angle only */\r\n rotation?: YawPitchRollProps;\r\n /** Optional scale to apply to part, 1.0 if undefined */\r\n scale?: number;\r\n}\r\n\r\n/** Flags applied to the entire contents of a [[GeometryStreamProps]].\r\n * @see GeometryStreamHeaderProps\r\n * @public\r\n * @extensions\r\n */\r\nexport enum GeometryStreamFlags {\r\n /** No flags. */\r\n None = 0,\r\n /** When the geometry is displayed, it is always oriented to face the viewer. The placement origin of the element associated with the geometry is used as the rotation point.\r\n * If the placement origin is outside of the view, the geometry will not necessarily be displayed, even if rotating it to face the viewer would cause its range to intersect the viewed volume.\r\n */\r\n ViewIndependent = 1 << 0,\r\n}\r\n\r\n/** An entry in a [[GeometryStreamProps]] containing [[GeometryStreamFlags]] that apply to the geometry stream as a whole.\r\n * If this entry exists in the [[GeometryStreamProps]] array, it will always be the *first* entry.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryStreamHeaderProps {\r\n /** The flags applied to the geometry stream. */\r\n flags: GeometryStreamFlags;\r\n}\r\n\r\n/** Allowed GeometryStream entries - should only set one value.\r\n * @see [GeometryStream]($docs/learning/common/geometrystream.md)\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryStreamEntryProps extends GeomJson.GeometryProps {\r\n header?: GeometryStreamHeaderProps;\r\n appearance?: GeometryAppearanceProps;\r\n styleMod?: LineStyle.ModifierProps;\r\n fill?: AreaFillProps;\r\n pattern?: AreaPattern.ParamsProps;\r\n material?: MaterialProps;\r\n geomPart?: GeometryPartInstanceProps;\r\n textString?: TextStringProps;\r\n brep?: BRepEntity.DataProps;\r\n image?: ImageGraphicProps;\r\n subRange?: LowAndHighXYZ;\r\n}\r\n\r\n/** A [[GeometricElement]]'s GeometryStream is represented by an array of [[GeometryStreamEntryProps]].\r\n * @public\r\n * @extensions\r\n */\r\nexport type GeometryStreamProps = GeometryStreamEntryProps[];\r\n\r\n/** GeometryStreamBuilder is a helper class for populating the [[GeometryStreamProps]] array needed to create a [[GeometricElement]] or [[GeometryPart]].\r\n * @public\r\n */\r\nexport class GeometryStreamBuilder {\r\n /** Current inverse placement transform, used for converting world coordinate input to be placement relative */\r\n private _worldToLocal?: Transform;\r\n /** GeometryStream entries */\r\n public readonly geometryStream: GeometryStreamProps = [];\r\n\r\n /** Supply optional local to world transform. Used to transform world coordinate input relative to element placement.\r\n * For a [[GeometricElement]]'s placement to be meaningful, world coordinate geometry should never be appended to an element with an identity placement.\r\n * Can be called with undefined or identity transform to start appending geometry supplied in local coordinates again.\r\n */\r\n public setLocalToWorld(localToWorld?: Transform) {\r\n this._worldToLocal = (undefined === localToWorld || localToWorld.isIdentity ? undefined : localToWorld.inverse());\r\n }\r\n\r\n /** Supply local to world transform from a Point3d and optional YawPitchRollAngles.\r\n * @see [[Placement3d]]\r\n */\r\n public setLocalToWorld3d(origin: Point3d, angles: YawPitchRollAngles = YawPitchRollAngles.createDegrees(0.0, 0.0, 0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(origin, angles.toMatrix3d()));\r\n }\r\n\r\n /** Supply local to world transform from a Point2d and optional Angle.\r\n * @see [[Placement2d]]\r\n */\r\n public setLocalToWorld2d(origin: Point2d, angle: Angle = Angle.createDegrees(0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(Point3d.createFrom(origin), Matrix3d.createRotationAroundVector(Vector3d.unitZ(), angle)));\r\n }\r\n\r\n /** Supply local to world transform from a PlacementProps2d or PlacementProps3d.\r\n * @see [[PlacementProps]]\r\n */\r\n public setLocalToWorldFromPlacement(props: PlacementProps) {\r\n const placement = isPlacement2dProps(props) ? Placement2d.fromJSON(props) : Placement3d.fromJSON(props);\r\n this.setLocalToWorld(placement.transform);\r\n }\r\n\r\n /** Store local ranges in GeometryStream for all subsequent geometry appended. Can improve performance of range testing for elements with a GeometryStream\r\n * containing more than one [[GeometryQuery]] differentiable by range. Not useful for a single [[GeometryQuery]] as its range and that of the [[GeometricElement]] are the same.\r\n * Ignored when defining a [[GeometryPart]] and not needed when only appending [[GeometryPart]] instances to a [[GeometricElement]] as these store their own range.\r\n */\r\n public appendGeometryRanges() {\r\n this.geometryStream.push({ subRange: Range3d.createNull() });\r\n }\r\n\r\n /** Change [[SubCategory]] or reset to [[SubCategoryAppearance]] for subsequent geometry.\r\n * An invalid sub-category id can be supplied to force a reset to the current [[SubCategoryAppearance]].\r\n * It is not valid to change the sub-category when defining a [[GeometryPart]]. A [[GeometryPart]] inherit the symbology of their instance for anything not explicitly overridden.\r\n */\r\n public appendSubCategoryChange(subCategoryId: Id64String): boolean {\r\n this.geometryStream.push({ appearance: { subCategory: subCategoryId } });\r\n return true;\r\n }\r\n\r\n /** Change [[GeometryParams]] for subsequent geometry.\r\n * It is not valid to change the sub-category when defining a [[GeometryPart]]. A [[GeometryPart]] inherits the symbology of their instance for anything not explicitly overridden.\r\n */\r\n public appendGeometryParamsChange(geomParams: GeometryParams): boolean {\r\n const appearance: GeometryAppearanceProps = {\r\n subCategory: geomParams.subCategoryId,\r\n color: geomParams.lineColor?.toJSON(),\r\n weight: geomParams.weight,\r\n style: geomParams.styleInfo?.styleId,\r\n transparency: geomParams.elmTransparency,\r\n displayPriority: geomParams.elmPriority,\r\n geometryClass: geomParams.geometryClass,\r\n };\r\n this.geometryStream.push({ appearance });\r\n\r\n if (undefined !== geomParams.materialId)\r\n this.geometryStream.push({ material: { materialId: geomParams.materialId } });\r\n\r\n if (undefined !== geomParams.fillDisplay && FillDisplay.Never !== geomParams.fillDisplay) {\r\n const fill: AreaFillProps = {\r\n display: geomParams.fillDisplay,\r\n transparency: geomParams.fillTransparency,\r\n };\r\n if (undefined !== geomParams.gradient && Gradient.Mode.None !== geomParams.gradient.mode)\r\n fill.gradient = geomParams.gradient?.toJSON();\r\n else if (undefined !== geomParams.backgroundFill && BackgroundFill.None !== geomParams.backgroundFill)\r\n fill.backgroundFill = geomParams.backgroundFill;\r\n else if (undefined !== geomParams.fillColor)\r\n fill.color = geomParams.fillColor.toJSON();\r\n this.geometryStream.push({ fill });\r\n }\r\n\r\n if (undefined !== geomParams.pattern) {\r\n const localPattern = this._worldToLocal ? geomParams.pattern.clone() : geomParams.pattern;\r\n if (undefined !== this._worldToLocal && !localPattern.applyTransform(this._worldToLocal))\r\n return false;\r\n\r\n this.geometryStream.push({ pattern: localPattern.toJSON() });\r\n }\r\n\r\n if (undefined !== geomParams.styleInfo && undefined !== geomParams.styleInfo.styleMod) {\r\n const localStyleMod = new LineStyle.Modifier(geomParams.styleInfo.styleMod);\r\n if (undefined !== this._worldToLocal && !localStyleMod.applyTransform(this._worldToLocal))\r\n return false;\r\n this.geometryStream.push({ styleMod: localStyleMod });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to a [[GeometryStreamProps]] array for creating a [[GeometricElement3d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart3d(partId: Id64String, instanceOrigin?: Point3d, instanceRotation?: YawPitchRollAngles, instanceScale?: number): boolean {\r\n if (undefined === this._worldToLocal) {\r\n this.geometryStream.push({ geomPart: { part: partId, origin: instanceOrigin, rotation: instanceRotation, scale: instanceScale } });\r\n return true;\r\n }\r\n const partTrans = Transform.createOriginAndMatrix(instanceOrigin, instanceRotation ? instanceRotation.toMatrix3d() : Matrix3d.createIdentity());\r\n if (undefined !== instanceScale)\r\n partTrans.matrix.scaleColumnsInPlace(instanceScale, instanceScale, instanceScale);\r\n const resultTrans = this._worldToLocal.multiplyTransformTransform(partTrans);\r\n const scales = new Vector3d();\r\n if (!resultTrans.matrix.normalizeColumnsInPlace(scales))\r\n return false;\r\n const newRotation = YawPitchRollAngles.createFromMatrix3d(resultTrans.matrix);\r\n if (undefined === newRotation)\r\n return false;\r\n this.geometryStream.push({ geomPart: { part: partId, origin: resultTrans.getOrigin(), rotation: newRotation, scale: scales.x } });\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to a [[GeometryStreamProps]] array for creating a [[GeometricElement2d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart2d(partId: Id64String, instanceOrigin?: Point2d, instanceRotation?: Angle, instanceScale?: number): boolean {\r\n return this.appendGeometryPart3d(partId, instanceOrigin ? Point3d.createFrom(instanceOrigin) : undefined, instanceRotation ? new YawPitchRollAngles(instanceRotation) : undefined, instanceScale);\r\n }\r\n\r\n /** Append a [[TextString]] supplied in either local or world coordinates to the [[GeometryStreamProps]] array */\r\n public appendTextString(textString: TextString): boolean {\r\n if (this._worldToLocal) {\r\n textString = new TextString(textString);\r\n if (!textString.transformInPlace(this._worldToLocal)) {\r\n return false;\r\n }\r\n }\r\n\r\n this.geometryStream.push({ textString: textString.toJSON() });\r\n return true;\r\n }\r\n\r\n /** Append a series of entries representing a [[TextBlock]] to the [[GeometryStreamProps]] array.\r\n * @beta\r\n */\r\n public appendTextBlock(block: TextBlockGeometryProps): boolean {\r\n for (const entry of block.entries) {\r\n let result: boolean;\r\n if (undefined !== entry.text) {\r\n result = this.appendTextString(new TextString(entry.text));\r\n } else if (undefined !== entry.color) {\r\n if (entry.color === \"subcategory\") {\r\n result = this.appendSubCategoryChange(Id64.invalid);\r\n } else {\r\n this.geometryStream.push({ appearance: { color: entry.color } });\r\n result = true;\r\n }\r\n } else {\r\n result = this.appendGeometry(LineSegment3d.fromJSON(entry.separator));\r\n }\r\n\r\n if (!result) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Append an [[ImageGraphic]] supplied in either local or world coordinates. */\r\n public appendImage(image: ImageGraphic): boolean {\r\n if (undefined !== this._worldToLocal)\r\n image = image.cloneTransformed(this._worldToLocal);\r\n\r\n this.geometryStream.push({ image: image.toJSON() });\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryQuery]] supplied in either local or world coordinates to the [[GeometryStreamProps]] array */\r\n public appendGeometry(geometry: GeometryQuery): boolean {\r\n if (undefined === this._worldToLocal) {\r\n const geomData = GeomJson.Writer.toIModelJson(geometry);\r\n if (undefined === geomData)\r\n return false;\r\n this.geometryStream.push(geomData);\r\n return true;\r\n }\r\n const localGeometry = geometry.cloneTransformed(this._worldToLocal);\r\n if (undefined === localGeometry)\r\n return false;\r\n const localGeomData = GeomJson.Writer.toIModelJson(localGeometry);\r\n if (undefined === localGeomData)\r\n return false;\r\n this.geometryStream.push(localGeomData);\r\n return true;\r\n }\r\n\r\n /** Append [[BRepEntity.DataProps]] supplied in either local or world coordinates to the [[GeometryStreamProps]] array\r\n * @beta\r\n */\r\n public appendBRepData(brep: BRepEntity.DataProps): boolean {\r\n if (undefined === this._worldToLocal) {\r\n this.geometryStream.push({ brep });\r\n return true;\r\n }\r\n const entityTrans = Transform.fromJSON(brep.transform);\r\n const localTrans = this._worldToLocal.multiplyTransformTransform(entityTrans);\r\n const localBrep: BRepEntity.DataProps = {\r\n data: brep.data,\r\n type: brep.type,\r\n transform: localTrans.isIdentity ? undefined : localTrans.toJSON(),\r\n faceSymbology: brep.faceSymbology,\r\n };\r\n this.geometryStream.push({ brep: localBrep });\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n public getHeader(): GeometryStreamHeaderProps | undefined {\r\n return 0 < this.geometryStream.length ? this.geometryStream[0].header : undefined;\r\n }\r\n\r\n /** @internal */\r\n public obtainHeader(): GeometryStreamHeaderProps {\r\n const hdr = this.getHeader();\r\n if (undefined !== hdr)\r\n return hdr;\r\n\r\n const entry = { header: { flags: GeometryStreamFlags.None } };\r\n this.geometryStream.unshift(entry);\r\n return entry.header;\r\n }\r\n\r\n /** Controls whether or not the geometry in the stream should be displayed as view-independent.\r\n * When view-independent geometry is displayed, it is always oriented to face the viewer, using the placement origin of the element as the rotation point.\r\n * If the placement origin is outside of the view, the geometry will not necessarily be displayed, even if rotating it to face the viewer would cause its range to intersect the viewed volume\r\n * @public\r\n */\r\n public get isViewIndependent(): boolean {\r\n const hdr = this.getHeader();\r\n return undefined !== hdr && GeometryStreamFlags.None !== (hdr.flags & GeometryStreamFlags.ViewIndependent);\r\n }\r\n public set isViewIndependent(viewIndependent: boolean) {\r\n if (viewIndependent === this.isViewIndependent)\r\n return;\r\n\r\n const hdr = this.obtainHeader();\r\n if (viewIndependent)\r\n hdr.flags |= GeometryStreamFlags.ViewIndependent;\r\n else\r\n hdr.flags &= ~GeometryStreamFlags.ViewIndependent;\r\n }\r\n}\r\n\r\n/** Represents a text string within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface TextStringPrimitive {\r\n type: \"textString\";\r\n readonly textString: TextString;\r\n}\r\n\r\n/** Represents an image within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ImagePrimitive {\r\n type: \"image\";\r\n readonly image: ImageGraphic;\r\n}\r\n\r\n/** Represents a reference to a GeometryPart within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface PartReference {\r\n type: \"partReference\";\r\n part: {\r\n id: Id64String;\r\n readonly toLocal?: Transform;\r\n };\r\n}\r\n\r\n/** Represents a BRep within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface BRepPrimitive {\r\n type: \"brep\";\r\n /** @beta */\r\n readonly brep: BRepEntity.DataProps;\r\n}\r\n\r\n/** Represents one of a variety of GeometryQuery objects within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryPrimitive {\r\n type: \"geometryQuery\";\r\n readonly geometry: AnyGeometryQuery;\r\n}\r\n\r\n/** Union of all possible geometric primitive types that may appear within a GeometryStream.\r\n * @public\r\n * @extensions\r\n */\r\nexport type GeometryStreamPrimitive = TextStringPrimitive | PartReference | BRepPrimitive | GeometryPrimitive | ImagePrimitive;\r\n\r\n/** Holds current state information for [[GeometryStreamIterator]]. Each entry represents exactly one geometry primitive in the stream.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeometryStreamIteratorEntry {\r\n /** A [[GeometryParams]] representing the appearance of the current geometric entry */\r\n readonly geomParams: GeometryParams;\r\n /** Placement transform, used for converting placement relative, local coordinate entries to world */\r\n readonly localToWorld?: Transform;\r\n /** Optional stored local range for the current geometric entry */\r\n readonly localRange?: Range3d;\r\n /** Returns the geometric primitive represented by this entry. */\r\n readonly primitive: GeometryStreamPrimitive;\r\n}\r\n\r\nclass IteratorEntry implements GeometryStreamIteratorEntry {\r\n private _primitive?: GeometryStreamPrimitive;\r\n public readonly geomParams: GeometryParams;\r\n public readonly localToWorld?: Transform;\r\n public localRange?: Range3d;\r\n\r\n public constructor(appearance: Id64String | GeometryParams, localToWorld?: Transform) {\r\n this.geomParams = typeof appearance === \"string\" ? new GeometryParams(appearance) : appearance;\r\n this.localToWorld = localToWorld;\r\n }\r\n\r\n public get primitive() { return this._primitive!; }\r\n public set primitive(primitive: GeometryStreamPrimitive) { this._primitive = primitive; }\r\n\r\n public setGeometryQuery(geometry: AnyGeometryQuery) { this._primitive = { type: \"geometryQuery\", geometry }; }\r\n public setTextString(textString: TextString) { this._primitive = { type: \"textString\", textString }; }\r\n public setBRep(brep: BRepEntity.DataProps) { this._primitive = { type: \"brep\", brep }; }\r\n public setImage(image: ImageGraphic) { this._primitive = { type: \"image\", image }; }\r\n public setPartReference(id: Id64String, toLocal?: Transform) {\r\n this._primitive = {\r\n type: \"partReference\",\r\n part: { id, toLocal },\r\n };\r\n }\r\n}\r\n\r\n/** GeometryStreamIterator is a helper class for iterating a [[GeometryStreamProps]].\r\n * A [[GeometricElement]]'s GeometryStream must be specifically requested using [[ElementLoadProps.wantGeometry]].\r\n * Each [[GeometryStreamIteratorEntry]] returned by the iterator represents exactly one geometric primitive in the stream.\r\n * @public\r\n */\r\nexport class GeometryStreamIterator implements IterableIterator<GeometryStreamIteratorEntry> {\r\n /** GeometryStream entries */\r\n public geometryStream: GeometryStreamProps;\r\n /** Flags applied to the entire geometry stream. */\r\n public readonly flags: GeometryStreamFlags;\r\n /** Current entry position */\r\n private _index = 0;\r\n /** Allocated on first call to next() and reused thereafter. */\r\n private _entry?: IteratorEntry;\r\n /** Used to initialize this._entry. */\r\n private readonly _appearance: Id64String | GeometryParams;\r\n private readonly _localToWorld?: Transform;\r\n\r\n /** Construct a new GeometryStreamIterator given a [[GeometryStreamProps]] from either a [[GeometricElement3d]], [[GeometricElement2d]], or [[GeometryPart]].\r\n * Supply the [[GeometricElement]]'s category to initialize the appearance information for each geometric entry.\r\n */\r\n public constructor(geometryStream: GeometryStreamProps, categoryOrGeometryParams?: Id64String | GeometryParams, localToWorld?: Transform) {\r\n this.geometryStream = geometryStream;\r\n this._appearance = categoryOrGeometryParams ?? Id64.invalid;\r\n this._localToWorld = localToWorld;\r\n if (0 < geometryStream.length && undefined !== geometryStream[0].header) {\r\n this.flags = geometryStream[0].header.flags;\r\n ++this._index;\r\n } else {\r\n this.flags = GeometryStreamFlags.None;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private get entry() {\r\n if (undefined === this._entry)\r\n this._entry = new IteratorEntry(this._appearance, this._localToWorld);\r\n\r\n return this._entry;\r\n }\r\n\r\n /** Create a new GeometryStream iterator for a [[GeometricElement3d]].\r\n * If [[GeometricElement3dProps.placement]] is not undefined, placement relative entries will be returned transformed to world coordinates.\r\n * @throws [[IModelError]] if element.geom is undefined.\r\n */\r\n public static fromGeometricElement3d(element: Pick<GeometricElement3dProps, \"geom\" | \"placement\" | \"category\">) {\r\n if (element.geom === undefined)\r\n throw new IModelError(IModelStatus.NoGeometry, \"GeometricElement has no geometry or geometry wasn't requested\");\r\n\r\n let transform;\r\n if (element.placement !== undefined)\r\n transform = Transform.createOriginAndMatrix(Point3d.fromJSON(element.placement.origin), YawPitchRollAngles.fromJSON(element.placement.angles).toMatrix3d());\r\n\r\n return new GeometryStreamIterator(element.geom, element.category, transform);\r\n }\r\n\r\n /** Create a new GeometryStream iterator for a [[GeometricElement2d]].\r\n * If [[GeometricElement2dProps.placement]] is not undefined, placement relative entries will be returned transformed to world coordinates.\r\n * @throws [[IModelError]] if element.geom is undefined.\r\n */\r\n public static fromGeometricElement2d(element: Pick<GeometricElement2dProps, \"geom\" | \"placement\" | \"category\">) {\r\n if (element.geom === undefined)\r\n throw new IModelError(IModelStatus.NoGeometry, \"GeometricElement has no geometry or geometry wasn't requested\");\r\n\r\n let transform;\r\n if (element.placement !== undefined) {\r\n const origin = Point3d.createFrom(Point2d.fromJSON(element.placement.origin));\r\n const matrix = Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.fromJSON(element.placement.angle))!;\r\n transform = Transform.createOriginAndMatrix(origin, matrix);\r\n }\r\n\r\n return new GeometryStreamIterator(element.geom, element.category, transform);\r\n }\r\n\r\n /** Create a new GeometryStream iterator for a [[GeometryPart]].\r\n * To iterate a part's GeometryStream in the context of a part instance found for a [[GeometricElement]], provide the optional [[GeometryParams]] and Transform from the [[GeometricElement]]'s [[GeometryStreamIterator]].\r\n * Supply the [[GeometryParams]] to return appearance information as inherited from the [[GeometricElement]].\r\n * Supply the partToWorld transform to return the part geometry in world coordinates.\r\n * Supply the partToLocal transform to return the part geometry relative to the [[GeometricElement]]'s placement.\r\n * @throws [[IModelError]] if geomPart.geom is undefined.\r\n */\r\n public static fromGeometryPart(geomPart: Pick<GeometryPartProps, \"geom\">, geomParams?: GeometryParams, partTransform?: Transform) {\r\n if (geomPart.geom === undefined)\r\n throw new IModelError(IModelStatus.NoGeometry, \"GeometryPart has no geometry or geometry wasn't requested\");\r\n\r\n return new GeometryStreamIterator(geomPart.geom, geomParams?.clone(), partTransform);\r\n }\r\n\r\n /** Get the transform that if applied to a [[GeometryPart]]'s GeometryStream entries would return them in world coordinates. */\r\n public partToWorld(): Transform | undefined {\r\n if (undefined === this._entry)\r\n return this._localToWorld;\r\n\r\n const partToLocal = \"partReference\" === this._entry.primitive.type ? this._entry.primitive.part.toLocal : undefined;\r\n if (this._entry.localToWorld === undefined || partToLocal === undefined)\r\n return this._entry.localToWorld;\r\n\r\n return this._entry.localToWorld.multiplyTransformTransform(partToLocal);\r\n }\r\n\r\n /** Advance to next displayable geometric entry while updating the current [[GeometryParams]] from appearance related entries.\r\n * Geometric entries are [[TextString]], [[GeometryQuery]], [[GeometryPart]], [[ImageGraphic]], and [[BRepEntity.DataProps]].\r\n */\r\n public next(): IteratorResult<GeometryStreamIteratorEntry> {\r\n // NOTE: localRange remains valid until we encounter either a new subRange entry or a geometry part reference.\r\n while (this._index < this.geometryStream.length) {\r\n const entry = this.geometryStream[this._index++];\r\n if (entry.appearance) {\r\n this.entry.geomParams.resetAppearance();\r\n if (entry.appearance.subCategory)\r\n this.entry.geomParams.subCategoryId = Id64.fromJSON(entry.appearance.subCategory);\r\n if (undefined !== entry.appearance.color)\r\n this.entry.geomParams.lineColor = ColorDef.fromJSON(entry.appearance.color);\r\n if (undefined !== entry.appearance.weight)\r\n this.entry.geomParams.weight = entry.appearance.weight;\r\n if (undefined !== entry.appearance.style)\r\n this.entry.geomParams.styleInfo = new LineStyle.Info(Id64.fromJSON(entry.appearance.style));\r\n if (undefined !== entry.appearance.transparency)\r\n this.entry.geomParams.elmTransparency = entry.appearance.transparency;\r\n if (undefined !== entry.appearance.displayPriority)\r\n this.entry.geomParams.elmPriority = entry.appearance.displayPriority;\r\n if (undefined !== entry.appearance.geometryClass)\r\n this.entry.geomParams.geometryClass = entry.appearance.geometryClass;\r\n } else if (entry.styleMod) {\r\n if (this.entry.geomParams.styleInfo === undefined)\r\n continue;\r\n\r\n const styleMod = new LineStyle.Modifier(entry.styleMod);\r\n if (this.entry.localToWorld !== undefined)\r\n styleMod.applyTransform(this.entry.localToWorld);\r\n\r\n this.entry.geomParams.styleInfo = new LineStyle.Info(this.entry.geomParams.styleInfo.styleId, styleMod);\r\n } else if (entry.fill) {\r\n if (entry.fill.display)\r\n this.entry.geomParams.fillDisplay = entry.fill.display;\r\n if (entry.fill.transparency)\r\n this.entry.geomParams.fillTransparency = entry.fill.transparency;\r\n if (entry.fill.gradient)\r\n this.entry.geomParams.gradient = Gradient.Symb.fromJSON(entry.fill.gradient);\r\n else if (entry.fill.backgroundFill)\r\n this.entry.geomParams.backgroundFill = entry.fill.backgroundFill;\r\n else if (entry.fill.color)\r\n this.entry.geomParams.fillColor = ColorDef.fromJSON(entry.fill.color);\r\n } else if (entry.pattern) {\r\n const params = AreaPattern.Params.fromJSON(entry.pattern);\r\n if (this.entry.localToWorld !== undefined)\r\n params.applyTransform(this.entry.localToWorld);\r\n\r\n this.entry.geomParams.pattern = params;\r\n } else if (entry.material) {\r\n if (entry.material.materialId)\r\n this.entry.geomParams.materialId = Id64.fromJSON(entry.material.materialId);\r\n } else if (entry.subRange) {\r\n this.entry.localRange = Range3d.fromJSON(entry.subRange);\r\n } else if (entry.geomPart) {\r\n let transform;\r\n if (entry.geomPart.origin !== undefined || entry.geomPart.rotation !== undefined || entry.geomPart.scale !== undefined) {\r\n const origin = entry.geomPart.origin ? Point3d.fromJSON(entry.geomPart.origin) : Point3d.createZero();\r\n const rotation = entry.geomPart.rotation ? YawPitchRollAngles.fromJSON(entry.geomPart.rotation).toMatrix3d() : Matrix3d.createIdentity();\r\n transform = Transform.createRefs(origin, rotation);\r\n if (entry.geomPart.scale)\r\n transform.multiplyTransformTransform(Transform.createRefs(Point3d.createZero(), Matrix3d.createUniformScale(entry.geomPart.scale)), transform);\r\n }\r\n\r\n // Subgraphic range doesn't apply to parts. A sane geometry stream (i.e., any that has been through the native layers or GeometryStreamBuilder)\r\n // will have a new subgraphic range for any geometric primitive following the part.\r\n this.entry.localRange = undefined;\r\n this.entry.setPartReference(Id64.fromJSON(entry.geomPart.part), transform);\r\n return { value: this.entry, done: false };\r\n } else if (entry.textString) {\r\n const textString = new TextString(entry.textString);\r\n if (this.entry.localToWorld !== undefined)\r\n textString.transformInPlace(this.entry.localToWorld);\r\n\r\n this.entry.setTextString(textString);\r\n return { value: this.entry, done: false };\r\n } else if (entry.image) {\r\n const image = ImageGraphic.fromJSON(entry.image);\r\n if (undefined !== this.entry.localToWorld)\r\n image.transformInPlace(this.entry.localToWorld);\r\n\r\n this.entry.setImage(image);\r\n return { value: this.entry, done: false };\r\n } else if (entry.brep) {\r\n if (this.entry.localToWorld !== undefined) {\r\n const entityTrans = Transform.fromJSON(entry.brep.transform);\r\n entry.brep.transform = this.entry.localToWorld.multiplyTransformTransform(entityTrans).toJSON();\r\n }\r\n\r\n this.entry.setBRep(entry.brep);\r\n return { value: this.entry, done: false };\r\n } else {\r\n const geometryQuery = GeomJson.Reader.parse(entry);\r\n if (!(geometryQuery instanceof GeometryQuery))\r\n continue;\r\n\r\n if (this.entry.localToWorld !== undefined)\r\n geometryQuery.tryTransformInPlace(this.entry.localToWorld);\r\n\r\n this.entry.setGeometryQuery(geometryQuery);\r\n return { value: this.entry, done: false };\r\n }\r\n }\r\n\r\n return { value: this.entry, done: true };\r\n }\r\n\r\n public [Symbol.iterator](): IterableIterator<GeometryStreamIteratorEntry> {\r\n return this;\r\n }\r\n\r\n /** @internal */\r\n public get isViewIndependent(): boolean { return GeometryStreamFlags.None !== (this.flags & GeometryStreamFlags.ViewIndependent); }\r\n}\r\n"]}
|
|
@@ -60,6 +60,9 @@ export declare class Placement3d implements Placement3dProps {
|
|
|
60
60
|
/** Calculate the axis-aligned bounding box for this placement. */
|
|
61
61
|
calculateRange(): AxisAlignedBox3d;
|
|
62
62
|
/** Multiply the Transform of this Placement3d by the specified *other* Transform.
|
|
63
|
+
* * Specifically `this.angles` is set to the rotation specified by `other.matrix * this.transform.matrix`
|
|
64
|
+
* and `this.origin` is set to the origin of `other * this.transform`.
|
|
65
|
+
* * Since the placement transform is local-to-world, this means `other` is a world-to-world transform.
|
|
63
66
|
* @throws [[IModelError]] if the Transform is invalid for a GeometricElement3d.
|
|
64
67
|
*/
|
|
65
68
|
multiplyTransform(other: Transform): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Placement.d.ts","sourceRoot":"","sources":["../../../src/geometry/Placement.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACL,KAAK,EAAY,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAY,kBAAkB,EACrH,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAExC;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAElD;;;GAGG;AACH,qBAAa,WAAY,YAAW,gBAAgB;IACxB,MAAM,EAAE,OAAO;IAAS,MAAM,EAAE,kBAAkB;IAAS,IAAI,EAAE,mBAAmB;gBAApF,MAAM,EAAE,OAAO,EAAS,MAAM,EAAE,kBAAkB,EAAS,IAAI,EAAE,mBAAmB;IAC9G,sFAAsF;IACtF,IAAW,QAAQ,IAAI,QAAQ,CAAqC;IACpE,uFAAuF;IACvF,IAAW,SAAS,IAAI,SAAS,CAAwE;IACzG,wCAAwC;IACxC,IAAW,IAAI,IAAI,OAAO,CAAiB;IAE3C,wDAAwD;WAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,WAAW;IAK5D,kEAAkE;IAC3D,eAAe,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAM9C,oEAAoE;IAC7D,OAAO,CAAC,KAAK,EAAE,WAAW;IAMjC,mDAAmD;IACnD,IAAW,OAAO,IAAI,OAAO,CAAoH;IAEjJ,kEAAkE;IAC3D,cAAc,IAAI,gBAAgB;IAYzC
|
|
1
|
+
{"version":3,"file":"Placement.d.ts","sourceRoot":"","sources":["../../../src/geometry/Placement.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACL,KAAK,EAAY,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAY,kBAAkB,EACrH,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEvC;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAExC;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAElD;;;GAGG;AACH,qBAAa,WAAY,YAAW,gBAAgB;IACxB,MAAM,EAAE,OAAO;IAAS,MAAM,EAAE,kBAAkB;IAAS,IAAI,EAAE,mBAAmB;gBAApF,MAAM,EAAE,OAAO,EAAS,MAAM,EAAE,kBAAkB,EAAS,IAAI,EAAE,mBAAmB;IAC9G,sFAAsF;IACtF,IAAW,QAAQ,IAAI,QAAQ,CAAqC;IACpE,uFAAuF;IACvF,IAAW,SAAS,IAAI,SAAS,CAAwE;IACzG,wCAAwC;IACxC,IAAW,IAAI,IAAI,OAAO,CAAiB;IAE3C,wDAAwD;WAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,WAAW;IAK5D,kEAAkE;IAC3D,eAAe,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAM9C,oEAAoE;IAC7D,OAAO,CAAC,KAAK,EAAE,WAAW;IAMjC,mDAAmD;IACnD,IAAW,OAAO,IAAI,OAAO,CAAoH;IAEjJ,kEAAkE;IAC3D,cAAc,IAAI,gBAAgB;IAYzC;;;;;OAKG;IACI,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CASjD;AAED;;GAEG;AACH,qBAAa,WAAY,YAAW,gBAAgB;IACxB,MAAM,EAAE,OAAO;IAAS,KAAK,EAAE,KAAK;IAAS,IAAI,EAAE,mBAAmB;gBAAtE,MAAM,EAAE,OAAO,EAAS,KAAK,EAAE,KAAK,EAAS,IAAI,EAAE,mBAAmB;IAChG,sFAAsF;IACtF,IAAW,QAAQ,IAAI,QAAQ,CAA+E;IAC9G,uFAAuF;IACvF,IAAW,SAAS,IAAI,SAAS,CAA4F;IAC7H,wDAAwD;WAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,WAAW;IAI5D,wCAAwC;IACxC,IAAW,IAAI,IAAI,OAAO,CAAkB;IAE5C,kEAAkE;IAC3D,eAAe,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO;IAM9C,mDAAmD;IACnD,IAAW,OAAO,IAAI,OAAO,CAAoH;IAEjJ,oEAAoE;IAC7D,OAAO,CAAC,KAAK,EAAE,WAAW;IAMjC,kEAAkE;IAC3D,cAAc,IAAI,gBAAgB;IAczC;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CASjD"}
|
|
@@ -55,6 +55,9 @@ export class Placement3d {
|
|
|
55
55
|
return range;
|
|
56
56
|
}
|
|
57
57
|
/** Multiply the Transform of this Placement3d by the specified *other* Transform.
|
|
58
|
+
* * Specifically `this.angles` is set to the rotation specified by `other.matrix * this.transform.matrix`
|
|
59
|
+
* and `this.origin` is set to the origin of `other * this.transform`.
|
|
60
|
+
* * Since the placement transform is local-to-world, this means `other` is a world-to-world transform.
|
|
58
61
|
* @throws [[IModelError]] if the Transform is invalid for a GeometricElement3d.
|
|
59
62
|
*/
|
|
60
63
|
multiplyTransform(other) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Placement.js","sourceRoot":"","sources":["../../../src/geometry/Placement.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 Geometry\r\n */\r\n\r\nimport { IModelStatus } from \"@itwin/core-bentley\";\r\nimport {\r\n Angle, Constant, Matrix3d, Point2d, Point3d, Range2d, Range3d, Range3dProps, Transform, Vector3d, YawPitchRollAngles,\r\n} from \"@itwin/core-geometry\";\r\nimport { Placement2dProps, Placement3dProps } from \"../ElementProps\";\r\nimport { Frustum } from \"../Frustum\";\r\nimport { IModelError } from \"../IModelError\";\r\n\r\n/** A Range3d that is aligned with the axes of spatial coordinates.\r\n * @public\r\n * @extensions\r\n */\r\nexport type AxisAlignedBox3d = Range3d;\r\n\r\n/** The properties of a Range3d.\r\n * @public\r\n * @extensions\r\n */\r\nexport type AxisAlignedBox3dProps = Range3dProps;\r\n\r\n/** A bounding box aligned to the orientation of a 3d Element\r\n * @public\r\n * @extensions\r\n */\r\nexport type ElementAlignedBox3d = Range3d;\r\n\r\n/** A bounding box aligned to the orientation of a 2d Element\r\n * @public\r\n * @extensions\r\n */\r\nexport type ElementAlignedBox2d = Range2d;\r\n\r\n/** A bounding box aligned to a local coordinate system\r\n * @public\r\n * @extensions\r\n */\r\nexport type LocalAlignedBox3d = Range3d;\r\n\r\n/** Either a Placement2d or Placement3d\r\n * @public\r\n * @extensions\r\n */\r\nexport type Placement = Placement2d | Placement3d;\r\n\r\n/** The placement of a GeometricElement3d. This includes the origin, orientation, and size (bounding box) of the element.\r\n * All geometry of a GeometricElement are relative to its placement.\r\n * @public\r\n */\r\nexport class Placement3d implements Placement3dProps {\r\n public constructor(public origin: Point3d, public angles: YawPitchRollAngles, public bbox: ElementAlignedBox3d) { }\r\n /** Get the rotation from local coordinates of this placement to world coordinates. */\r\n public get rotation(): Matrix3d { return this.angles.toMatrix3d(); }\r\n /** Get the transform from local coordinates of this placement to world coordinates. */\r\n public get transform(): Transform { return Transform.createOriginAndMatrix(this.origin, this.rotation); }\r\n /** determine if this is 3d placement */\r\n public get is3d(): boolean { return true; }\r\n\r\n /** Create a new Placement3d from a Placement3dProps. */\r\n public static fromJSON(json?: Placement3dProps): Placement3d {\r\n const props: any = json ? json : {};\r\n return new Placement3d(Point3d.fromJSON(props.origin), YawPitchRollAngles.fromJSON(props.angles), Range3d.fromJSON<ElementAlignedBox3d>(props.bbox));\r\n }\r\n\r\n /** Get the 8 corners, in world coordinates, of this placement. */\r\n public getWorldCorners(out?: Frustum): Frustum {\r\n const frust = Frustum.fromRange(this.bbox, out);\r\n frust.multiply(this.transform);\r\n return frust;\r\n }\r\n\r\n /** Set the contents of this Placement3d from another Placement3d */\r\n public setFrom(other: Placement3d) {\r\n this.origin.setFrom(other.origin);\r\n this.angles.setFrom(other.angles);\r\n this.bbox.setFrom(other.bbox);\r\n }\r\n\r\n /** Determine whether this Placement3d is valid. */\r\n public get isValid(): boolean { return !this.bbox.isNull && Math.max(this.origin.maxAbs(), this.bbox.maxAbs()) < Constant.circumferenceOfEarth; }\r\n\r\n /** Calculate the axis-aligned bounding box for this placement. */\r\n public calculateRange(): AxisAlignedBox3d {\r\n const range = new Range3d();\r\n if (!this.isValid)\r\n return range;\r\n\r\n this.transform.multiplyRange(this.bbox, range);\r\n\r\n // low and high are not allowed to be equal\r\n range.ensureMinLengths();\r\n return range;\r\n }\r\n\r\n /** Multiply the Transform of this Placement3d by the specified *other* Transform.\r\n * @throws [[IModelError]] if the Transform is invalid for a GeometricElement3d.\r\n */\r\n public multiplyTransform(other: Transform): void {\r\n const transform = other.multiplyTransformTransform(this.transform);\r\n const angles = YawPitchRollAngles.createFromMatrix3d(transform.matrix);\r\n if (undefined === angles)\r\n throw new IModelError(IModelStatus.BadRequest, \"Invalid Transform\");\r\n\r\n this.angles = angles;\r\n this.origin.setFrom(transform.origin);\r\n }\r\n}\r\n\r\n/** The placement of a GeometricElement2d. This includes the origin, rotation, and size (bounding box) of the element.\r\n * @public\r\n */\r\nexport class Placement2d implements Placement2dProps {\r\n public constructor(public origin: Point2d, public angle: Angle, public bbox: ElementAlignedBox2d) { }\r\n /** Get the rotation from local coordinates of this placement to world coordinates. */\r\n public get rotation(): Matrix3d { return Matrix3d.createRotationAroundVector(Vector3d.unitZ(), this.angle)!; }\r\n /** Get the transform from local coordinates of this placement to world coordinates. */\r\n public get transform(): Transform { return Transform.createOriginAndMatrix(Point3d.createFrom(this.origin), this.rotation); }\r\n /** Create a new Placement2d from a Placement2dProps. */\r\n public static fromJSON(json?: Placement2dProps): Placement2d {\r\n const props: any = json ? json : {};\r\n return new Placement2d(Point2d.fromJSON(props.origin), Angle.fromJSON(props.angle), Range2d.fromJSON(props.bbox));\r\n }\r\n /** determine if this is 3d placement */\r\n public get is3d(): boolean { return false; }\r\n\r\n /** Get the 8 corners, in world coordinates, of this placement. */\r\n public getWorldCorners(out?: Frustum): Frustum {\r\n const frust = Frustum.fromRange(this.bbox, out);\r\n frust.multiply(this.transform);\r\n return frust;\r\n }\r\n\r\n /** Determine whether this Placement2d is valid. */\r\n public get isValid(): boolean { return !this.bbox.isNull && Math.max(this.origin.maxAbs(), this.bbox.maxAbs()) < Constant.circumferenceOfEarth; }\r\n\r\n /** Set the contents of this Placement2d from another Placement2d */\r\n public setFrom(other: Placement2d) {\r\n this.origin.setFrom(other.origin);\r\n this.angle.setFrom(other.angle);\r\n this.bbox.setFrom(other.bbox);\r\n }\r\n\r\n /** Calculate the axis-aligned bounding box for this placement. */\r\n public calculateRange(): AxisAlignedBox3d {\r\n const range = new Range3d();\r\n if (!this.isValid)\r\n return range;\r\n\r\n this.transform.multiplyRange(Range3d.createRange2d(this.bbox, 0), range);\r\n\r\n // low and high are not allowed to be equal\r\n range.ensureMinLengths();\r\n range.low.z = - 1.0; // is the 2dFrustumDepth, which === 1 meter\r\n range.high.z = 1.0;\r\n return range;\r\n }\r\n\r\n /** Multiply the Transform of this Placement2d by the specified *other* Transform.\r\n * @throws [[IModelError]] if the Transform is invalid for a GeometricElement2d.\r\n */\r\n public multiplyTransform(other: Transform): void {\r\n const transform = other.multiplyTransformTransform(this.transform);\r\n const angles = YawPitchRollAngles.createFromMatrix3d(transform.matrix);\r\n if ((undefined === angles) || !angles.pitch.isAlmostZero || !angles.roll.isAlmostZero)\r\n throw new IModelError(IModelStatus.BadRequest, \"Invalid Transform\");\r\n\r\n this.angle = angles.yaw;\r\n this.origin.setFrom(transform.origin);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Placement.js","sourceRoot":"","sources":["../../../src/geometry/Placement.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 Geometry\r\n */\r\n\r\nimport { IModelStatus } from \"@itwin/core-bentley\";\r\nimport {\r\n Angle, Constant, Matrix3d, Point2d, Point3d, Range2d, Range3d, Range3dProps, Transform, Vector3d, YawPitchRollAngles,\r\n} from \"@itwin/core-geometry\";\r\nimport { Placement2dProps, Placement3dProps } from \"../ElementProps\";\r\nimport { Frustum } from \"../Frustum\";\r\nimport { IModelError } from \"../IModelError\";\r\n\r\n/** A Range3d that is aligned with the axes of spatial coordinates.\r\n * @public\r\n * @extensions\r\n */\r\nexport type AxisAlignedBox3d = Range3d;\r\n\r\n/** The properties of a Range3d.\r\n * @public\r\n * @extensions\r\n */\r\nexport type AxisAlignedBox3dProps = Range3dProps;\r\n\r\n/** A bounding box aligned to the orientation of a 3d Element\r\n * @public\r\n * @extensions\r\n */\r\nexport type ElementAlignedBox3d = Range3d;\r\n\r\n/** A bounding box aligned to the orientation of a 2d Element\r\n * @public\r\n * @extensions\r\n */\r\nexport type ElementAlignedBox2d = Range2d;\r\n\r\n/** A bounding box aligned to a local coordinate system\r\n * @public\r\n * @extensions\r\n */\r\nexport type LocalAlignedBox3d = Range3d;\r\n\r\n/** Either a Placement2d or Placement3d\r\n * @public\r\n * @extensions\r\n */\r\nexport type Placement = Placement2d | Placement3d;\r\n\r\n/** The placement of a GeometricElement3d. This includes the origin, orientation, and size (bounding box) of the element.\r\n * All geometry of a GeometricElement are relative to its placement.\r\n * @public\r\n */\r\nexport class Placement3d implements Placement3dProps {\r\n public constructor(public origin: Point3d, public angles: YawPitchRollAngles, public bbox: ElementAlignedBox3d) { }\r\n /** Get the rotation from local coordinates of this placement to world coordinates. */\r\n public get rotation(): Matrix3d { return this.angles.toMatrix3d(); }\r\n /** Get the transform from local coordinates of this placement to world coordinates. */\r\n public get transform(): Transform { return Transform.createOriginAndMatrix(this.origin, this.rotation); }\r\n /** determine if this is 3d placement */\r\n public get is3d(): boolean { return true; }\r\n\r\n /** Create a new Placement3d from a Placement3dProps. */\r\n public static fromJSON(json?: Placement3dProps): Placement3d {\r\n const props: any = json ? json : {};\r\n return new Placement3d(Point3d.fromJSON(props.origin), YawPitchRollAngles.fromJSON(props.angles), Range3d.fromJSON<ElementAlignedBox3d>(props.bbox));\r\n }\r\n\r\n /** Get the 8 corners, in world coordinates, of this placement. */\r\n public getWorldCorners(out?: Frustum): Frustum {\r\n const frust = Frustum.fromRange(this.bbox, out);\r\n frust.multiply(this.transform);\r\n return frust;\r\n }\r\n\r\n /** Set the contents of this Placement3d from another Placement3d */\r\n public setFrom(other: Placement3d) {\r\n this.origin.setFrom(other.origin);\r\n this.angles.setFrom(other.angles);\r\n this.bbox.setFrom(other.bbox);\r\n }\r\n\r\n /** Determine whether this Placement3d is valid. */\r\n public get isValid(): boolean { return !this.bbox.isNull && Math.max(this.origin.maxAbs(), this.bbox.maxAbs()) < Constant.circumferenceOfEarth; }\r\n\r\n /** Calculate the axis-aligned bounding box for this placement. */\r\n public calculateRange(): AxisAlignedBox3d {\r\n const range = new Range3d();\r\n if (!this.isValid)\r\n return range;\r\n\r\n this.transform.multiplyRange(this.bbox, range);\r\n\r\n // low and high are not allowed to be equal\r\n range.ensureMinLengths();\r\n return range;\r\n }\r\n\r\n /** Multiply the Transform of this Placement3d by the specified *other* Transform.\r\n * * Specifically `this.angles` is set to the rotation specified by `other.matrix * this.transform.matrix`\r\n * and `this.origin` is set to the origin of `other * this.transform`.\r\n * * Since the placement transform is local-to-world, this means `other` is a world-to-world transform.\r\n * @throws [[IModelError]] if the Transform is invalid for a GeometricElement3d.\r\n */\r\n public multiplyTransform(other: Transform): void {\r\n const transform = other.multiplyTransformTransform(this.transform);\r\n const angles = YawPitchRollAngles.createFromMatrix3d(transform.matrix);\r\n if (undefined === angles)\r\n throw new IModelError(IModelStatus.BadRequest, \"Invalid Transform\");\r\n\r\n this.angles = angles;\r\n this.origin.setFrom(transform.origin);\r\n }\r\n}\r\n\r\n/** The placement of a GeometricElement2d. This includes the origin, rotation, and size (bounding box) of the element.\r\n * @public\r\n */\r\nexport class Placement2d implements Placement2dProps {\r\n public constructor(public origin: Point2d, public angle: Angle, public bbox: ElementAlignedBox2d) { }\r\n /** Get the rotation from local coordinates of this placement to world coordinates. */\r\n public get rotation(): Matrix3d { return Matrix3d.createRotationAroundVector(Vector3d.unitZ(), this.angle)!; }\r\n /** Get the transform from local coordinates of this placement to world coordinates. */\r\n public get transform(): Transform { return Transform.createOriginAndMatrix(Point3d.createFrom(this.origin), this.rotation); }\r\n /** Create a new Placement2d from a Placement2dProps. */\r\n public static fromJSON(json?: Placement2dProps): Placement2d {\r\n const props: any = json ? json : {};\r\n return new Placement2d(Point2d.fromJSON(props.origin), Angle.fromJSON(props.angle), Range2d.fromJSON(props.bbox));\r\n }\r\n /** determine if this is 3d placement */\r\n public get is3d(): boolean { return false; }\r\n\r\n /** Get the 8 corners, in world coordinates, of this placement. */\r\n public getWorldCorners(out?: Frustum): Frustum {\r\n const frust = Frustum.fromRange(this.bbox, out);\r\n frust.multiply(this.transform);\r\n return frust;\r\n }\r\n\r\n /** Determine whether this Placement2d is valid. */\r\n public get isValid(): boolean { return !this.bbox.isNull && Math.max(this.origin.maxAbs(), this.bbox.maxAbs()) < Constant.circumferenceOfEarth; }\r\n\r\n /** Set the contents of this Placement2d from another Placement2d */\r\n public setFrom(other: Placement2d) {\r\n this.origin.setFrom(other.origin);\r\n this.angle.setFrom(other.angle);\r\n this.bbox.setFrom(other.bbox);\r\n }\r\n\r\n /** Calculate the axis-aligned bounding box for this placement. */\r\n public calculateRange(): AxisAlignedBox3d {\r\n const range = new Range3d();\r\n if (!this.isValid)\r\n return range;\r\n\r\n this.transform.multiplyRange(Range3d.createRange2d(this.bbox, 0), range);\r\n\r\n // low and high are not allowed to be equal\r\n range.ensureMinLengths();\r\n range.low.z = - 1.0; // is the 2dFrustumDepth, which === 1 meter\r\n range.high.z = 1.0;\r\n return range;\r\n }\r\n\r\n /** Multiply the Transform of this Placement2d by the specified *other* Transform.\r\n * @throws [[IModelError]] if the Transform is invalid for a GeometricElement2d.\r\n */\r\n public multiplyTransform(other: Transform): void {\r\n const transform = other.multiplyTransformTransform(this.transform);\r\n const angles = YawPitchRollAngles.createFromMatrix3d(transform.matrix);\r\n if ((undefined === angles) || !angles.pitch.isAlmostZero || !angles.roll.isAlmostZero)\r\n throw new IModelError(IModelStatus.BadRequest, \"Invalid Transform\");\r\n\r\n this.angle = angles.yaw;\r\n this.origin.setFrom(transform.origin);\r\n }\r\n}\r\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @module Geometry
|
|
3
3
|
*/
|
|
4
4
|
import { Id64Array, Id64String } from "@itwin/core-bentley";
|
|
5
|
-
import { Matrix4dProps, XYZProps } from "@itwin/core-geometry";
|
|
5
|
+
import { Matrix4dProps, TransformProps, XYZProps } from "@itwin/core-geometry";
|
|
6
6
|
import { GeometryStreamProps } from "../geometry/GeometryStream";
|
|
7
7
|
import { GeometryClass } from "../GeometryParams";
|
|
8
8
|
import { ViewFlagProps } from "../ViewFlags";
|
|
@@ -30,6 +30,12 @@ export interface SnapRequestProps {
|
|
|
30
30
|
geometryClass?: GeometryClass;
|
|
31
31
|
intersectCandidates?: Id64Array;
|
|
32
32
|
decorationGeometry?: DecorationGeometryProps[];
|
|
33
|
+
/** A transform to be applied to the snap geometry.
|
|
34
|
+
* testPoint, closePoint, and worldToView are in "world" coordinates (the coordinates of the viewport's iModel).
|
|
35
|
+
* The snap geometry is in "model" coordinates (the coordinates of the iModel to which we're snapping).
|
|
36
|
+
* In normal cases these are the same iModel. They may differ when people draw multiple iModels into the same viewport.
|
|
37
|
+
*/
|
|
38
|
+
modelToWorld?: TransformProps;
|
|
33
39
|
}
|
|
34
40
|
/** Information returned from the back end to the front end holding the result of a *snap* operation.
|
|
35
41
|
* @internal RPC glue.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Snapping.d.ts","sourceRoot":"","sources":["../../../src/internal/Snapping.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC/
|
|
1
|
+
{"version":3,"file":"Snapping.d.ts","sourceRoot":"","sources":["../../../src/internal/Snapping.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,SAAS,EAAE,QAAQ,CAAC;IACpB,UAAU,EAAE,QAAQ,CAAC;IACrB,WAAW,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,kBAAkB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC/C;;;;OAIG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Snapping.js","sourceRoot":"","sources":["../../../src/internal/Snapping.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;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/** @packageDocumentation\r\n * @module Geometry\r\n */\r\n\r\nimport { Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { Matrix4dProps, XYZProps } from \"@itwin/core-geometry\";\r\nimport { GeometryStreamProps } from \"../geometry/GeometryStream\";\r\nimport { GeometryClass } from \"../GeometryParams\";\r\nimport { ViewFlagProps } from \"../ViewFlags\";\r\n\r\n/** Information required to request a *snap* to a pickable decoration from the front end to the back end.\r\n * @internal RPC glue.\r\n */\r\nexport interface DecorationGeometryProps {\r\n readonly id: Id64String;\r\n readonly geometryStream: GeometryStreamProps;\r\n}\r\n\r\n/** Information required to request a *snap* to an element from the front end to the back end.\r\n * Includes the viewing parameters so that snap can be relative to the view direction, viewing mode, etc.\r\n * @internal RPC glue.\r\n */\r\nexport interface SnapRequestProps {\r\n id: Id64String;\r\n testPoint: XYZProps;\r\n closePoint: XYZProps;\r\n worldToView: Matrix4dProps;\r\n viewFlags?: ViewFlagProps;\r\n snapModes?: number[];\r\n snapAperture?: number;\r\n snapDivisor?: number;\r\n subCategoryId?: Id64String;\r\n geometryClass?: GeometryClass;\r\n intersectCandidates?: Id64Array;\r\n decorationGeometry?: DecorationGeometryProps[];\r\n}\r\n\r\n/** Information returned from the back end to the front end holding the result of a *snap* operation.\r\n * @internal RPC glue.\r\n */\r\nexport interface SnapResponseProps {\r\n status: number;\r\n snapMode?: number;\r\n heat?: number;\r\n geomType?: number;\r\n parentGeomType?: number;\r\n hitPoint?: XYZProps;\r\n snapPoint?: XYZProps;\r\n normal?: XYZProps;\r\n curve?: any;\r\n intersectCurve?: any;\r\n intersectId?: string;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Snapping.js","sourceRoot":"","sources":["../../../src/internal/Snapping.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;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/** @packageDocumentation\r\n * @module Geometry\r\n */\r\n\r\nimport { Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { Matrix4dProps, TransformProps, XYZProps } from \"@itwin/core-geometry\";\r\nimport { GeometryStreamProps } from \"../geometry/GeometryStream\";\r\nimport { GeometryClass } from \"../GeometryParams\";\r\nimport { ViewFlagProps } from \"../ViewFlags\";\r\n\r\n/** Information required to request a *snap* to a pickable decoration from the front end to the back end.\r\n * @internal RPC glue.\r\n */\r\nexport interface DecorationGeometryProps {\r\n readonly id: Id64String;\r\n readonly geometryStream: GeometryStreamProps;\r\n}\r\n\r\n/** Information required to request a *snap* to an element from the front end to the back end.\r\n * Includes the viewing parameters so that snap can be relative to the view direction, viewing mode, etc.\r\n * @internal RPC glue.\r\n */\r\nexport interface SnapRequestProps {\r\n id: Id64String;\r\n testPoint: XYZProps;\r\n closePoint: XYZProps;\r\n worldToView: Matrix4dProps;\r\n viewFlags?: ViewFlagProps;\r\n snapModes?: number[];\r\n snapAperture?: number;\r\n snapDivisor?: number;\r\n subCategoryId?: Id64String;\r\n geometryClass?: GeometryClass;\r\n intersectCandidates?: Id64Array;\r\n decorationGeometry?: DecorationGeometryProps[];\r\n /** A transform to be applied to the snap geometry.\r\n * testPoint, closePoint, and worldToView are in \"world\" coordinates (the coordinates of the viewport's iModel).\r\n * The snap geometry is in \"model\" coordinates (the coordinates of the iModel to which we're snapping).\r\n * In normal cases these are the same iModel. They may differ when people draw multiple iModels into the same viewport.\r\n */\r\n modelToWorld?: TransformProps;\r\n}\r\n\r\n/** Information returned from the back end to the front end holding the result of a *snap* operation.\r\n * @internal RPC glue.\r\n */\r\nexport interface SnapResponseProps {\r\n status: number;\r\n snapMode?: number;\r\n heat?: number;\r\n geomType?: number;\r\n parentGeomType?: number;\r\n hitPoint?: XYZProps;\r\n snapPoint?: XYZProps;\r\n normal?: XYZProps;\r\n curve?: any;\r\n intersectCurve?: any;\r\n intersectId?: string;\r\n}\r\n"]}
|
|
@@ -18,6 +18,9 @@ export declare abstract class SnapshotIModelRpcInterface extends RpcInterface {
|
|
|
18
18
|
/** The version of the interface. */
|
|
19
19
|
static interfaceVersion: string;
|
|
20
20
|
openFile(_filePath: string, _opts?: SnapshotOpenOptions): Promise<IModelConnectionProps>;
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated in 4.10. Use [[CheckpointConnection.openRemote]].
|
|
23
|
+
*/
|
|
21
24
|
openRemote(_key: string, _opts?: SnapshotOpenOptions): Promise<IModelConnectionProps>;
|
|
22
25
|
close(_iModelRpcProps: IModelRpcProps): Promise<boolean>;
|
|
23
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotIModelRpcInterface.d.ts","sourceRoot":"","sources":["../../../src/rpc/SnapshotIModelRpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD;;;GAGG;AACH,8BAAsB,0BAA2B,SAAQ,YAAY;IACnE,+EAA+E;WACjE,SAAS,IAAI,0BAA0B;IAErD,qGAAqG;WACvF,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,0BAA0B;IAErF,2CAA2C;IAC3C,gBAAuB,aAAa,gCAAgC;IAEpE,oCAAoC;IACpC,OAAc,gBAAgB,SAAW;IAQ5B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"SnapshotIModelRpcInterface.d.ts","sourceRoot":"","sources":["../../../src/rpc/SnapshotIModelRpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD;;;GAGG;AACH,8BAAsB,0BAA2B,SAAQ,YAAY;IACnE,+EAA+E;WACjE,SAAS,IAAI,0BAA0B;IAErD,qGAAqG;WACvF,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,0BAA0B;IAErF,2CAA2C;IAC3C,gBAAuB,aAAa,gCAAgC;IAEpE,oCAAoC;IACpC,OAAc,gBAAgB,SAAW;IAQ5B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAErG;;OAEG;IAEU,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAErF,KAAK,CAAC,eAAe,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;CACtE"}
|
|
@@ -29,6 +29,9 @@ export class SnapshotIModelRpcInterface extends RpcInterface {
|
|
|
29
29
|
NOTE: Please consult the README in this folder for the semantic versioning rules.
|
|
30
30
|
===========================================================================================*/
|
|
31
31
|
async openFile(_filePath, _opts) { return this.forward(arguments); }
|
|
32
|
+
/**
|
|
33
|
+
* @deprecated in 4.10. Use [[CheckpointConnection.openRemote]].
|
|
34
|
+
*/
|
|
32
35
|
async openRemote(_key, _opts) { return this.forward(arguments); }
|
|
33
36
|
async close(_iModelRpcProps) { return this.forward(arguments); }
|
|
34
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotIModelRpcInterface.js","sourceRoot":"","sources":["../../../src/rpc/SnapshotIModelRpcInterface.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,MAAM,eAAe,GAA8B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhH;;;GAGG;AACH,MAAM,OAAgB,0BAA2B,SAAQ,YAAY;IACnE,+EAA+E;IACxE,MAAM,CAAC,SAAS,KAAiC,OAAO,UAAU,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAE9H,qGAAqG;IAC9F,MAAM,CAAC,mBAAmB,CAAC,KAAsB,IAAgC,OAAO,UAAU,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAQrK;;;iGAG6F;IAGhF,AAAN,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,KAA2B,IAAoC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"SnapshotIModelRpcInterface.js","sourceRoot":"","sources":["../../../src/rpc/SnapshotIModelRpcInterface.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,MAAM,eAAe,GAA8B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhH;;;GAGG;AACH,MAAM,OAAgB,0BAA2B,SAAQ,YAAY;IACnE,+EAA+E;IACxE,MAAM,CAAC,SAAS,KAAiC,OAAO,UAAU,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAE9H,qGAAqG;IAC9F,MAAM,CAAC,mBAAmB,CAAC,KAAsB,IAAgC,OAAO,UAAU,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAQrK;;;iGAG6F;IAGhF,AAAN,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,KAA2B,IAAoC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEzI;;OAEG;IAEU,AAAN,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,KAA2B,IAAoC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAE/H,KAAK,CAAC,KAAK,CAAC,eAA+B,IAAsB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;AApBzG,2CAA2C;AACpB,wCAAa,GAAG,4BAA4B,CAAC;AAEpE,oCAAoC;AACtB,2CAAgB,GAAG,OAAO,CAAC;AAQ5B;IADZ,YAAY,CAAC,eAAe,CAAC,eAAe,CAAC;0DAC2F;AAM5H;IADZ,YAAY,CAAC,eAAe,CAAC,eAAe,CAAC;4DACwF","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 RpcInterface\r\n */\r\n\r\nimport { IModelConnectionProps, IModelRpcProps, SnapshotOpenOptions } from \"../IModel\";\r\nimport { RpcInterface } from \"../RpcInterface\";\r\nimport { RpcManager } from \"../RpcManager\";\r\nimport { RpcOperation } from \"./core/RpcOperation\";\r\nimport { RpcRequestTokenSupplier_T } from \"./core/RpcRequest\";\r\nimport { RpcRoutingToken } from \"./core/RpcRoutingToken\";\r\n\r\nconst unknownIModelId: RpcRequestTokenSupplier_T = (req) => ({ iModelId: \"undefined\", key: req.parameters[0] });\r\n\r\n/** The RPC interface for working with *snapshot* iModels.\r\n * This interface is intended for desktop and mobile products. Web products are discouraged from registering this interface.\r\n * @internal\r\n */\r\nexport abstract class SnapshotIModelRpcInterface extends RpcInterface { // eslint-disable-line deprecation/deprecation\r\n /** Returns the SnapshotIModelRpcInterface client instance for the frontend. */\r\n public static getClient(): SnapshotIModelRpcInterface { return RpcManager.getClientForInterface(SnapshotIModelRpcInterface); }\r\n\r\n /** Returns the SnapshotIModelRpcInterface client instance for a custom RPC routing configuration. */\r\n public static getClientForRouting(token: RpcRoutingToken): SnapshotIModelRpcInterface { return RpcManager.getClientForInterface(SnapshotIModelRpcInterface, token); }\r\n\r\n /** The immutable name of the interface. */\r\n public static readonly interfaceName = \"SnapshotIModelRpcInterface\";\r\n\r\n /** The version of the interface. */\r\n public static interfaceVersion = \"2.0.0\";\r\n\r\n /*===========================================================================================\r\n NOTE: Any add/remove/change to the methods below requires an update of the interface version.\r\n NOTE: Please consult the README in this folder for the semantic versioning rules.\r\n ===========================================================================================*/\r\n\r\n @RpcOperation.setRoutingProps(unknownIModelId)\r\n public async openFile(_filePath: string, _opts?: SnapshotOpenOptions): Promise<IModelConnectionProps> { return this.forward(arguments); }\r\n\r\n /**\r\n * @deprecated in 4.10. Use [[CheckpointConnection.openRemote]].\r\n */\r\n @RpcOperation.setRoutingProps(unknownIModelId)\r\n public async openRemote(_key: string, _opts?: SnapshotOpenOptions): Promise<IModelConnectionProps> { return this.forward(arguments); }\r\n\r\n public async close(_iModelRpcProps: IModelRpcProps): Promise<boolean> { return this.forward(arguments); }\r\n}\r\n"]}
|
|
@@ -11,6 +11,7 @@ import { RpcInterface } from "../RpcInterface";
|
|
|
11
11
|
* Once stable, the goal is to move methods out to their rightful home.
|
|
12
12
|
* Apps/services should understand the *flux* implied by registering this RpcInterface and should be in control of both the client and server before even considering using it.
|
|
13
13
|
* @internal
|
|
14
|
+
* @deprecated in 4.10. If any of these methods are needed in the frontend, they should be rewritten using IPC or HTTP protocol.
|
|
14
15
|
*/
|
|
15
16
|
export declare abstract class WipRpcInterface extends RpcInterface {
|
|
16
17
|
/** Returns the IModelReadRpcInterface instance for the frontend. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WipRpcInterface.d.ts","sourceRoot":"","sources":["../../../src/rpc/WipRpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C
|
|
1
|
+
{"version":3,"file":"WipRpcInterface.d.ts","sourceRoot":"","sources":["../../../src/rpc/WipRpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;;;;;;GAQG;AACH,8BAAsB,eAAgB,SAAQ,YAAY;IACxD,oEAAoE;WACtD,SAAS,IAAI,eAAe;IAE1C,2CAA2C;IAC3C,gBAAuB,aAAa,qBAAqB;IAEzD;;OAEG;IACH,OAAc,gBAAgB,SAAW;IAM5B,WAAW,CAAC,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAC1D,qBAAqB,CAAC,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IACrE,iBAAiB,CAAC,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9D,kBAAkB,CAAC,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAC1I,oBAAoB,CAAC,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CACxG"}
|
|
@@ -14,10 +14,11 @@ import { RpcManager } from "../RpcManager";
|
|
|
14
14
|
* Once stable, the goal is to move methods out to their rightful home.
|
|
15
15
|
* Apps/services should understand the *flux* implied by registering this RpcInterface and should be in control of both the client and server before even considering using it.
|
|
16
16
|
* @internal
|
|
17
|
+
* @deprecated in 4.10. If any of these methods are needed in the frontend, they should be rewritten using IPC or HTTP protocol.
|
|
17
18
|
*/
|
|
18
19
|
export class WipRpcInterface extends RpcInterface {
|
|
19
20
|
/** Returns the IModelReadRpcInterface instance for the frontend. */
|
|
20
|
-
static getClient() { return RpcManager.getClientForInterface(WipRpcInterface); }
|
|
21
|
+
static getClient() { return RpcManager.getClientForInterface(WipRpcInterface); } // eslint-disable-line deprecation/deprecation
|
|
21
22
|
/*===========================================================================================
|
|
22
23
|
NOTE: Any add/remove/change to the methods below requires an update of the interface version.
|
|
23
24
|
NOTE: Please consult the README in this folder for the semantic versioning rules.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WipRpcInterface.js","sourceRoot":"","sources":["../../../src/rpc/WipRpcInterface.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"WipRpcInterface.js","sourceRoot":"","sources":["../../../src/rpc/WipRpcInterface.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,OAAgB,eAAgB,SAAQ,YAAY;IACxD,oEAAoE;IAC7D,MAAM,CAAC,SAAS,KAAsB,OAAO,UAAU,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,8CAA8C;IAUvJ;;;gGAG4F;IACrF,KAAK,CAAC,WAAW,CAAC,YAA4B,IAAqB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,2DAA2D;IAChK,KAAK,CAAC,qBAAqB,CAAC,YAA4B,IAAsB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/G,KAAK,CAAC,iBAAiB,CAAC,YAA4B,IAAmB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxG,KAAK,CAAC,kBAAkB,CAAC,YAA4B,EAAE,iBAAyB,EAAE,eAAuB,IAA0C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpL,KAAK,CAAC,oBAAoB,CAAC,YAA4B,EAAE,YAAoB,IAAsB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;AAhB3I,2CAA2C;AACpB,6BAAa,GAAG,iBAAiB,CAAC;AAEzD;;GAEG;AACW,gCAAgB,GAAG,OAAO,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 RpcInterface\r\n */\r\n\r\nimport { ChangedElements } from \"../ChangedElements\";\r\nimport { IModelRpcProps } from \"../IModel\";\r\nimport { RpcInterface } from \"../RpcInterface\";\r\nimport { RpcManager } from \"../RpcManager\";\r\n\r\n/** The purpose of this class is to house WIP RPC methods. For example:\r\n * - WIP methods where signatures or behavior is still changing\r\n * - Experimental methods that we may decide are a bad idea and never release\r\n * The idea is to house these WIP RPC methods away from other RpcInterfaces that have stated compatibility goals.\r\n * Once stable, the goal is to move methods out to their rightful home.\r\n * Apps/services should understand the *flux* implied by registering this RpcInterface and should be in control of both the client and server before even considering using it.\r\n * @internal\r\n * @deprecated in 4.10. If any of these methods are needed in the frontend, they should be rewritten using IPC or HTTP protocol.\r\n */\r\nexport abstract class WipRpcInterface extends RpcInterface { // eslint-disable-line deprecation/deprecation\r\n /** Returns the IModelReadRpcInterface instance for the frontend. */\r\n public static getClient(): WipRpcInterface { return RpcManager.getClientForInterface(WipRpcInterface); } // eslint-disable-line deprecation/deprecation\r\n\r\n /** The immutable name of the interface. */\r\n public static readonly interfaceName = \"WipRpcInterface\";\r\n\r\n /** The semantic version of the interface.\r\n * @note The WipRpcInterface will never progress to 1.0 since it is never intended to be public.\r\n */\r\n public static interfaceVersion = \"0.5.0\";\r\n\r\n /*===========================================================================================\r\n NOTE: Any add/remove/change to the methods below requires an update of the interface version.\r\n NOTE: Please consult the README in this folder for the semantic versioning rules.\r\n ==========================================================================================*/\r\n public async placeholder(_iModelToken: IModelRpcProps): Promise<string> { return this.forward(arguments); } // here to test that WipRpcInterface is configured properly\r\n public async isChangeCacheAttached(_iModelToken: IModelRpcProps): Promise<boolean> { return this.forward(arguments); }\r\n public async attachChangeCache(_iModelToken: IModelRpcProps): Promise<void> { return this.forward(arguments); }\r\n public async getChangedElements(_iModelToken: IModelRpcProps, _startChangesetId: string, _endChangesetId: string): Promise<ChangedElements | undefined> { return this.forward(arguments); }\r\n public async isChangesetProcessed(_iModelToken: IModelRpcProps, _changesetId: string): Promise<boolean> { return this.forward(arguments); }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-common",
|
|
3
|
-
"version": "4.10.0-dev.
|
|
3
|
+
"version": "4.10.0-dev.30",
|
|
4
4
|
"description": "iTwin.js components common to frontend and backend",
|
|
5
5
|
"main": "lib/cjs/core-common.js",
|
|
6
6
|
"module": "lib/esm/core-common.js",
|
|
@@ -27,25 +27,24 @@
|
|
|
27
27
|
"js-base64": "^3.6.1"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@itwin/core-bentley": "^4.10.0-dev.
|
|
31
|
-
"@itwin/core-geometry": "^4.10.0-dev.
|
|
30
|
+
"@itwin/core-bentley": "^4.10.0-dev.30",
|
|
31
|
+
"@itwin/core-geometry": "^4.10.0-dev.30"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@itwin/eslint-plugin": "^4.0.2",
|
|
35
35
|
"@itwin/object-storage-core": "^2.2.5",
|
|
36
36
|
"@types/chai": "4.3.1",
|
|
37
37
|
"@types/flatbuffers": "~1.10.0",
|
|
38
|
-
"@types/mocha": "^10.0.6",
|
|
39
38
|
"@types/node": "~18.16.20",
|
|
40
|
-
"
|
|
39
|
+
"@vitest/coverage-v8": "^2.1.0",
|
|
41
40
|
"eslint": "^8.56.0",
|
|
42
|
-
"mocha": "^10.2.0",
|
|
43
41
|
"nyc": "^15.1.0",
|
|
44
42
|
"rimraf": "^3.0.2",
|
|
45
43
|
"typescript": "~5.3.3",
|
|
46
|
-
"
|
|
47
|
-
"@itwin/
|
|
48
|
-
"@itwin/
|
|
44
|
+
"vitest": "^2.1.0",
|
|
45
|
+
"@itwin/build-tools": "4.10.0-dev.30",
|
|
46
|
+
"@itwin/core-geometry": "4.10.0-dev.30",
|
|
47
|
+
"@itwin/core-bentley": "4.10.0-dev.30"
|
|
49
48
|
},
|
|
50
49
|
"nyc": {
|
|
51
50
|
"extends": "./node_modules/@itwin/build-tools/.nycrc",
|
|
@@ -61,7 +60,7 @@
|
|
|
61
60
|
"extract-extension-api": "eslint --no-inline-config -c extraction.eslint.config.js \"./src/**/*.ts\" 1>&2",
|
|
62
61
|
"lint": "eslint -f visualstudio \"./src/**/*.ts\" 1>&2",
|
|
63
62
|
"lint-fix": "eslint --fix -f visualstudio \"./src/**/*.ts\" 1>&2",
|
|
64
|
-
"test": "
|
|
65
|
-
"cover": "
|
|
63
|
+
"test": "vitest --run",
|
|
64
|
+
"cover": "vitest --run --coverage"
|
|
66
65
|
}
|
|
67
66
|
}
|