@itwin/core-geometry 4.0.0-dev.46 → 4.0.0-dev.50

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.
Files changed (79) hide show
  1. package/lib/cjs/clipping/ClipPrimitive.d.ts +0 -1
  2. package/lib/cjs/clipping/ClipPrimitive.d.ts.map +1 -1
  3. package/lib/cjs/clipping/ClipPrimitive.js +0 -1
  4. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  5. package/lib/cjs/clipping/ClipUtils.d.ts +19 -5
  6. package/lib/cjs/clipping/ClipUtils.d.ts.map +1 -1
  7. package/lib/cjs/clipping/ClipUtils.js +32 -5
  8. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  9. package/lib/cjs/curve/CurveCurve.d.ts +2 -5
  10. package/lib/cjs/curve/CurveCurve.d.ts.map +1 -1
  11. package/lib/cjs/curve/CurveCurve.js +2 -5
  12. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  13. package/lib/cjs/curve/CurveCurveIntersectXY.js +1 -1
  14. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  15. package/lib/cjs/curve/CurveCurveIntersectXYZ.js +1 -1
  16. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
  17. package/lib/cjs/geometry3d/Matrix3d.d.ts +17 -4
  18. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  19. package/lib/cjs/geometry3d/Matrix3d.js +18 -6
  20. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  21. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +0 -1
  22. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  23. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +0 -1
  24. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  25. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.d.ts +1 -1
  26. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +1 -1
  27. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  28. package/lib/cjs/geometry3d/Transform.d.ts +159 -107
  29. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  30. package/lib/cjs/geometry3d/Transform.js +238 -137
  31. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  32. package/lib/cjs/geometry3d/XYZProps.d.ts +22 -21
  33. package/lib/cjs/geometry3d/XYZProps.d.ts.map +1 -1
  34. package/lib/cjs/geometry3d/XYZProps.js +2 -1
  35. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  36. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +7 -5
  37. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  38. package/lib/cjs/polyface/PolyfaceBuilder.js +17 -7
  39. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  40. package/lib/esm/clipping/ClipPrimitive.d.ts +0 -1
  41. package/lib/esm/clipping/ClipPrimitive.d.ts.map +1 -1
  42. package/lib/esm/clipping/ClipPrimitive.js +0 -1
  43. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  44. package/lib/esm/clipping/ClipUtils.d.ts +19 -5
  45. package/lib/esm/clipping/ClipUtils.d.ts.map +1 -1
  46. package/lib/esm/clipping/ClipUtils.js +32 -5
  47. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  48. package/lib/esm/curve/CurveCurve.d.ts +2 -5
  49. package/lib/esm/curve/CurveCurve.d.ts.map +1 -1
  50. package/lib/esm/curve/CurveCurve.js +2 -5
  51. package/lib/esm/curve/CurveCurve.js.map +1 -1
  52. package/lib/esm/curve/CurveCurveIntersectXY.js +1 -1
  53. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  54. package/lib/esm/curve/CurveCurveIntersectXYZ.js +1 -1
  55. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
  56. package/lib/esm/geometry3d/Matrix3d.d.ts +17 -4
  57. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  58. package/lib/esm/geometry3d/Matrix3d.js +18 -6
  59. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  60. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts +0 -1
  61. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.d.ts.map +1 -1
  62. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +0 -1
  63. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  64. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.d.ts +1 -1
  65. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +1 -1
  66. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  67. package/lib/esm/geometry3d/Transform.d.ts +159 -107
  68. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  69. package/lib/esm/geometry3d/Transform.js +238 -137
  70. package/lib/esm/geometry3d/Transform.js.map +1 -1
  71. package/lib/esm/geometry3d/XYZProps.d.ts +22 -21
  72. package/lib/esm/geometry3d/XYZProps.d.ts.map +1 -1
  73. package/lib/esm/geometry3d/XYZProps.js +2 -1
  74. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  75. package/lib/esm/polyface/PolyfaceBuilder.d.ts +7 -5
  76. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  77. package/lib/esm/polyface/PolyfaceBuilder.js +17 -7
  78. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  79. package/package.json +3 -3
@@ -9,7 +9,6 @@ import { Transform } from "./Transform";
9
9
  import { XAndY } from "./XYZProps";
10
10
  /**
11
11
  * A plane defined by
12
- *
13
12
  * * Any point on the plane.
14
13
  * * a unit normal.
15
14
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"Plane3dByOriginAndUnitNormal.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Plane3dByOriginAndUnitNormal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Plane3dByOriginAndUnitNormal.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Plane3dByOriginAndUnitNormal.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,6 @@ const Point3dVector3d_1 = require("./Point3dVector3d");
14
14
  const Transform_1 = require("./Transform");
15
15
  /**
16
16
  * A plane defined by
17
- *
18
17
  * * Any point on the plane.
19
18
  * * a unit normal.
20
19
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"Plane3dByOriginAndUnitNormal.js","sourceRoot":"","sources":["../../../src/geometry3d/Plane3dByOriginAndUnitNormal.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\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { AxisOrder, BeJSONFunctions, Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { Angle } from \"./Angle\";\r\nimport { Matrix3d } from \"./Matrix3d\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { Transform } from \"./Transform\";\r\nimport { XAndY } from \"./XYZProps\";\r\n\r\n/**\r\n * A plane defined by\r\n *\r\n * * Any point on the plane.\r\n * * a unit normal.\r\n * @public\r\n */\r\nexport class Plane3dByOriginAndUnitNormal implements BeJSONFunctions, PlaneAltitudeEvaluator {\r\n private _origin: Point3d;\r\n private _normal: Vector3d;\r\n // constructor captures references !!!\r\n private constructor(origin: Point3d, normal: Vector3d) {\r\n this._origin = origin;\r\n this._normal = normal;\r\n }\r\n // This is private because it does not check validity of the unit vector.\r\n private static _create(x: number, y: number, z: number, u: number, v: number, w: number) {\r\n return new Plane3dByOriginAndUnitNormal(Point3d.create(x, y, z), Vector3d.create(u, v, w));\r\n }\r\n /**\r\n * Create a plane parallel to the XY plane\r\n * @param origin optional plane origin. If omitted, the origin is placed at 000\r\n */\r\n public static createXYPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal {\r\n if (origin)\r\n return Plane3dByOriginAndUnitNormal._create(origin.x, origin.y, origin.z, 0, 0, 1);\r\n return Plane3dByOriginAndUnitNormal._create(0, 0, 0, 0, 0, 1);\r\n }\r\n /**\r\n * Create a plane parallel to the YZ plane\r\n * @param origin optional plane origin. If omitted, the origin is placed at 000\r\n */\r\n public static createYZPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal {\r\n if (origin)\r\n return Plane3dByOriginAndUnitNormal._create(origin.x, origin.y, origin.z, 1, 0, 0);\r\n return Plane3dByOriginAndUnitNormal._create(0, 0, 0, 1, 0, 0);\r\n }\r\n /**\r\n * Create a plane parallel to the ZX plane\r\n * @param origin optional plane origin. If omitted, the origin is placed at 000\r\n */\r\n public static createZXPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal {\r\n if (origin)\r\n return Plane3dByOriginAndUnitNormal._create(origin.x, origin.y, origin.z, 0, 1, 0);\r\n return Plane3dByOriginAndUnitNormal._create(0, 0, 0, 0, 1, 0);\r\n }\r\n /** create a new Plane3dByOriginAndUnitNormal with given origin and normal.\r\n * * The inputs are NOT captured.\r\n * * Returns undefined if the normal vector is all zeros.\r\n */\r\n public static create(origin: Point3d, normal: Vector3d, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined {\r\n const normalized = normal.normalize();\r\n if (!normalized)\r\n return undefined;\r\n if (result) {\r\n result.set(origin, normalized);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(origin.clone(), normalized);\r\n }\r\n /** create a new Plane3dByOriginAndUnitNormal with direct coordinates of origin and normal.\r\n * * Returns undefined if the normal vector is all zeros.\r\n * * If unable to normalize return undefined. (And if result is given it is left unchanged)\r\n */\r\n public static createXYZUVW(ax: number, ay: number, az: number, ux: number, uy: number, uz: number, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined {\r\n const magU = Geometry.hypotenuseXYZ(ux, uy, uz);\r\n if (magU < Geometry.smallMetricDistance)\r\n return undefined;\r\n if (result) {\r\n result._origin.set(ax, ay, az);\r\n result._normal.set(ux / magU, uy / magU, uz / magU);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(Point3d.create(ax, ay, az), Vector3d.create(ux / magU, uy / magU, uz / magU));\r\n }\r\n /** create a new Plane3dByOriginAndUnitNormal with unit normal (a) in the xy plane (b) perpendicular to the line defined by xy parts of origin to target.\r\n * * origin and normal both have z = 0.\r\n * * The inputs are NOT captured.\r\n * * Returns undefined if the normal vector is all zeros.\r\n */\r\n public static createOriginAndTargetXY(origin: XAndY, target: XAndY, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined {\r\n const ux = target.x - origin.x;\r\n const uy = target.y - origin.y;\r\n return this.createXYZUVW(origin.x, origin.y, 0.0, uy, -ux, 0.0, result);\r\n }\r\n\r\n /** create a new Plane3dByOriginAndUnitNormal with xy origin (at z=0) and normal angle in xy plane.\r\n * * Returns undefined if the normal vector is all zeros.\r\n */\r\n public static createXYAngle(x: number, y: number, normalAngleFromX: Angle, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal {\r\n if (result) {\r\n result._origin.set(x, y, 0.0);\r\n result._normal.set(normalAngleFromX.cos(), normalAngleFromX.sin(), 0.0);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(Point3d.create(x, y, 0), Vector3d.create(normalAngleFromX.cos(), normalAngleFromX.sin()));\r\n }\r\n\r\n /** Create a plane defined by two points and an in-plane vector.\r\n * @param pointA any point in the plane\r\n * @param pointB any other point in the plane\r\n * @param vector any vector in the plane but not parallel to the vector from pointA to pointB\r\n */\r\n public static createPointPointVectorInPlane(pointA: Point3d, pointB: Point3d, vector: Vector3d): Plane3dByOriginAndUnitNormal | undefined {\r\n const cross = vector.crossProductStartEnd(pointA, pointB);\r\n if (cross.tryNormalizeInPlace())\r\n return new Plane3dByOriginAndUnitNormal(pointA, cross);\r\n return undefined;\r\n }\r\n\r\n /** test for (toleranced) equality with `other` */\r\n public isAlmostEqual(other: Plane3dByOriginAndUnitNormal): boolean {\r\n return this._origin.isAlmostEqual(other._origin) && this._normal.isAlmostEqual(other._normal);\r\n }\r\n /** Parse a json fragment `{origin: [x,y,z], normal: [ux,uy,uz]}` */\r\n public setFromJSON(json?: any) {\r\n if (!json) {\r\n this._origin.set(0, 0, 0);\r\n this._normal.set(0, 0, 1);\r\n } else {\r\n this._origin.setFromJSON(json.origin);\r\n this._normal.setFromJSON(json.normal);\r\n }\r\n }\r\n /**\r\n * Convert to a JSON object.\r\n * @return {*} [origin,normal]\r\n */\r\n public toJSON(): any { return { origin: this._origin.toJSON(), normal: this._normal.toJSON() }; }\r\n /** create a new Plane3dByOriginAndUnitNormal from json fragment.\r\n * * See `Plane3dByOriginAndUnitNormal.setFromJSON`\r\n */\r\n public static fromJSON(json?: any): Plane3dByOriginAndUnitNormal {\r\n const result = Plane3dByOriginAndUnitNormal.createXYPlane();\r\n result.setFromJSON(json);\r\n return result;\r\n }\r\n /** Return a reference to the origin. */\r\n public getOriginRef(): Point3d { return this._origin; }\r\n /** Return a reference to the unit normal. */\r\n public getNormalRef(): Vector3d { return this._normal; }\r\n\r\n /** Return coordinate axes (as a transform) with\r\n * * origin at plane origin\r\n * * z axis in direction of plane normal.\r\n * * x,y axes in plane.\r\n */\r\n public getLocalToWorld(): Transform {\r\n const axes = Matrix3d.createRigidHeadsUp(this._normal, AxisOrder.ZXY);\r\n return Transform.createRefs(this._origin.clone(), axes);\r\n }\r\n /** Return a (singular) transform which projects points to this plane.\r\n */\r\n public getProjectionToPlane(): Transform {\r\n const axes = Matrix3d.createIdentity();\r\n axes.addScaledOuterProductInPlace(this._normal, this._normal, -1.0);\r\n axes.markSingular();\r\n return Transform.createFixedPointAndMatrix(this._origin, axes);\r\n }\r\n\r\n /** Copy coordinates from the given origin and normal. */\r\n public set(origin: Point3d, normal: Vector3d): void {\r\n this._origin.setFrom(origin);\r\n this._normal.setFrom(normal);\r\n }\r\n /** return a deep clone (point and normal cloned) */\r\n public clone(result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal {\r\n if (result) {\r\n result.set(this._origin, this._normal);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(this._origin.clone(), this._normal.clone());\r\n }\r\n /** Create a clone and return the transform of the clone. */\r\n public cloneTransformed(transform: Transform, inverse: boolean = false): Plane3dByOriginAndUnitNormal | undefined {\r\n const result = this.clone();\r\n if (inverse) {\r\n transform.multiplyInversePoint3d(result._origin, result._origin);\r\n if (transform.matrix.multiplyTransposeVector(result._normal, result._normal) !== undefined\r\n && result._normal.normalizeInPlace())\r\n return result;\r\n } else {\r\n transform.multiplyPoint3d(result._origin, result._origin);\r\n if (transform.matrix.multiplyInverseTranspose(result._normal, result._normal) !== undefined\r\n && result._normal.normalizeInPlace())\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /** Copy data from the given plane. */\r\n public setFrom(source: Plane3dByOriginAndUnitNormal): void {\r\n this.set(source._origin, source._normal);\r\n }\r\n /** Return the altitude of spacePoint above or below the plane. (Below is negative) */\r\n public altitude(spacePoint: Point3d): number { return this._normal.dotProductStartEnd(this._origin, spacePoint); }\r\n /** Return the altitude of point (x,y) given xy parts using only the xy parts of origin and unit normal */\r\n public altitudeXY(x: number, y: number): number {\r\n return (x - this._origin.x) * this._normal.x + (y - this._origin.y) * this._normal.y;\r\n }\r\n /**\r\n * Return the x component of the normal used to evaluate altitude.\r\n */\r\n public normalX(): number {return this._normal.x; }\r\n /**\r\n * Return the x component of the normal used to evaluate altitude.\r\n */\r\n public normalY(): number {return this._normal.y; }\r\n /**\r\n * Return the z component of the normal used to evaluate altitude.\r\n */\r\n public normalZ(): number {return this._normal.z; }\r\n\r\n /** Return the altitude of weighted spacePoint above or below the plane. (Below is negative) */\r\n public weightedAltitude(spacePoint: Point4d): number {\r\n return this._normal.dotProductStart3dEnd4d(this._origin, spacePoint);\r\n }\r\n\r\n /** return a point at specified (signed) altitude */\r\n public altitudeToPoint(altitude: number, result?: Point3d): Point3d {\r\n return this._origin.plusScaled(this._normal, altitude, result);\r\n }\r\n /** Return the dot product of spaceVector with the plane's unit normal. This tells the rate of change of altitude\r\n * for a point moving at speed one along the spaceVector.\r\n */\r\n public velocityXYZ(x: number, y: number, z: number): number { return this._normal.dotProductXYZ(x, y, z); }\r\n /** Return the dot product of spaceVector with the plane's unit normal. This tells the rate of change of altitude\r\n * for a point moving at speed one along the spaceVector.\r\n */\r\n public velocity(spaceVector: Vector3d): number { return this._normal.dotProduct(spaceVector); }\r\n /** Return the altitude of a point given as separate x,y,z components. */\r\n public altitudeXYZ(x: number, y: number, z: number): number {\r\n return this._normal.dotProductStartEndXYZ(this._origin, x, y, z);\r\n }\r\n /** Return the altitude of a point given as separate x,y,z,w components. */\r\n public altitudeXYZW(x: number, y: number, z: number, w: number): number {\r\n return this._normal.dotProductStartEndXYZW(this._origin, x, y, z, w);\r\n }\r\n /** Return the projection of spacePoint onto the plane. */\r\n public projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d {\r\n return spacePoint.plusScaled(this._normal, -this._normal.dotProductStartEnd(this._origin, spacePoint), result);\r\n }\r\n /** Returns true of spacePoint is within distance tolerance of the plane. */\r\n public isPointInPlane(spacePoint: Point3d): boolean { return Geometry.isSmallMetricDistance(this.altitude(spacePoint)); }\r\n}\r\n"]}
1
+ {"version":3,"file":"Plane3dByOriginAndUnitNormal.js","sourceRoot":"","sources":["../../../src/geometry3d/Plane3dByOriginAndUnitNormal.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\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { AxisOrder, BeJSONFunctions, Geometry, PlaneAltitudeEvaluator } from \"../Geometry\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { Angle } from \"./Angle\";\r\nimport { Matrix3d } from \"./Matrix3d\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { Transform } from \"./Transform\";\r\nimport { XAndY } from \"./XYZProps\";\r\n\r\n/**\r\n * A plane defined by\r\n * * Any point on the plane.\r\n * * a unit normal.\r\n * @public\r\n */\r\nexport class Plane3dByOriginAndUnitNormal implements BeJSONFunctions, PlaneAltitudeEvaluator {\r\n private _origin: Point3d;\r\n private _normal: Vector3d;\r\n // constructor captures references !!!\r\n private constructor(origin: Point3d, normal: Vector3d) {\r\n this._origin = origin;\r\n this._normal = normal;\r\n }\r\n // This is private because it does not check validity of the unit vector.\r\n private static _create(x: number, y: number, z: number, u: number, v: number, w: number) {\r\n return new Plane3dByOriginAndUnitNormal(Point3d.create(x, y, z), Vector3d.create(u, v, w));\r\n }\r\n /**\r\n * Create a plane parallel to the XY plane\r\n * @param origin optional plane origin. If omitted, the origin is placed at 000\r\n */\r\n public static createXYPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal {\r\n if (origin)\r\n return Plane3dByOriginAndUnitNormal._create(origin.x, origin.y, origin.z, 0, 0, 1);\r\n return Plane3dByOriginAndUnitNormal._create(0, 0, 0, 0, 0, 1);\r\n }\r\n /**\r\n * Create a plane parallel to the YZ plane\r\n * @param origin optional plane origin. If omitted, the origin is placed at 000\r\n */\r\n public static createYZPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal {\r\n if (origin)\r\n return Plane3dByOriginAndUnitNormal._create(origin.x, origin.y, origin.z, 1, 0, 0);\r\n return Plane3dByOriginAndUnitNormal._create(0, 0, 0, 1, 0, 0);\r\n }\r\n /**\r\n * Create a plane parallel to the ZX plane\r\n * @param origin optional plane origin. If omitted, the origin is placed at 000\r\n */\r\n public static createZXPlane(origin?: Point3d): Plane3dByOriginAndUnitNormal {\r\n if (origin)\r\n return Plane3dByOriginAndUnitNormal._create(origin.x, origin.y, origin.z, 0, 1, 0);\r\n return Plane3dByOriginAndUnitNormal._create(0, 0, 0, 0, 1, 0);\r\n }\r\n /** create a new Plane3dByOriginAndUnitNormal with given origin and normal.\r\n * * The inputs are NOT captured.\r\n * * Returns undefined if the normal vector is all zeros.\r\n */\r\n public static create(origin: Point3d, normal: Vector3d, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined {\r\n const normalized = normal.normalize();\r\n if (!normalized)\r\n return undefined;\r\n if (result) {\r\n result.set(origin, normalized);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(origin.clone(), normalized);\r\n }\r\n /** create a new Plane3dByOriginAndUnitNormal with direct coordinates of origin and normal.\r\n * * Returns undefined if the normal vector is all zeros.\r\n * * If unable to normalize return undefined. (And if result is given it is left unchanged)\r\n */\r\n public static createXYZUVW(ax: number, ay: number, az: number, ux: number, uy: number, uz: number, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined {\r\n const magU = Geometry.hypotenuseXYZ(ux, uy, uz);\r\n if (magU < Geometry.smallMetricDistance)\r\n return undefined;\r\n if (result) {\r\n result._origin.set(ax, ay, az);\r\n result._normal.set(ux / magU, uy / magU, uz / magU);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(Point3d.create(ax, ay, az), Vector3d.create(ux / magU, uy / magU, uz / magU));\r\n }\r\n /** create a new Plane3dByOriginAndUnitNormal with unit normal (a) in the xy plane (b) perpendicular to the line defined by xy parts of origin to target.\r\n * * origin and normal both have z = 0.\r\n * * The inputs are NOT captured.\r\n * * Returns undefined if the normal vector is all zeros.\r\n */\r\n public static createOriginAndTargetXY(origin: XAndY, target: XAndY, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal | undefined {\r\n const ux = target.x - origin.x;\r\n const uy = target.y - origin.y;\r\n return this.createXYZUVW(origin.x, origin.y, 0.0, uy, -ux, 0.0, result);\r\n }\r\n\r\n /** create a new Plane3dByOriginAndUnitNormal with xy origin (at z=0) and normal angle in xy plane.\r\n * * Returns undefined if the normal vector is all zeros.\r\n */\r\n public static createXYAngle(x: number, y: number, normalAngleFromX: Angle, result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal {\r\n if (result) {\r\n result._origin.set(x, y, 0.0);\r\n result._normal.set(normalAngleFromX.cos(), normalAngleFromX.sin(), 0.0);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(Point3d.create(x, y, 0), Vector3d.create(normalAngleFromX.cos(), normalAngleFromX.sin()));\r\n }\r\n\r\n /** Create a plane defined by two points and an in-plane vector.\r\n * @param pointA any point in the plane\r\n * @param pointB any other point in the plane\r\n * @param vector any vector in the plane but not parallel to the vector from pointA to pointB\r\n */\r\n public static createPointPointVectorInPlane(pointA: Point3d, pointB: Point3d, vector: Vector3d): Plane3dByOriginAndUnitNormal | undefined {\r\n const cross = vector.crossProductStartEnd(pointA, pointB);\r\n if (cross.tryNormalizeInPlace())\r\n return new Plane3dByOriginAndUnitNormal(pointA, cross);\r\n return undefined;\r\n }\r\n\r\n /** test for (toleranced) equality with `other` */\r\n public isAlmostEqual(other: Plane3dByOriginAndUnitNormal): boolean {\r\n return this._origin.isAlmostEqual(other._origin) && this._normal.isAlmostEqual(other._normal);\r\n }\r\n /** Parse a json fragment `{origin: [x,y,z], normal: [ux,uy,uz]}` */\r\n public setFromJSON(json?: any) {\r\n if (!json) {\r\n this._origin.set(0, 0, 0);\r\n this._normal.set(0, 0, 1);\r\n } else {\r\n this._origin.setFromJSON(json.origin);\r\n this._normal.setFromJSON(json.normal);\r\n }\r\n }\r\n /**\r\n * Convert to a JSON object.\r\n * @return {*} [origin,normal]\r\n */\r\n public toJSON(): any { return { origin: this._origin.toJSON(), normal: this._normal.toJSON() }; }\r\n /** create a new Plane3dByOriginAndUnitNormal from json fragment.\r\n * * See `Plane3dByOriginAndUnitNormal.setFromJSON`\r\n */\r\n public static fromJSON(json?: any): Plane3dByOriginAndUnitNormal {\r\n const result = Plane3dByOriginAndUnitNormal.createXYPlane();\r\n result.setFromJSON(json);\r\n return result;\r\n }\r\n /** Return a reference to the origin. */\r\n public getOriginRef(): Point3d { return this._origin; }\r\n /** Return a reference to the unit normal. */\r\n public getNormalRef(): Vector3d { return this._normal; }\r\n\r\n /** Return coordinate axes (as a transform) with\r\n * * origin at plane origin\r\n * * z axis in direction of plane normal.\r\n * * x,y axes in plane.\r\n */\r\n public getLocalToWorld(): Transform {\r\n const axes = Matrix3d.createRigidHeadsUp(this._normal, AxisOrder.ZXY);\r\n return Transform.createRefs(this._origin.clone(), axes);\r\n }\r\n /** Return a (singular) transform which projects points to this plane.\r\n */\r\n public getProjectionToPlane(): Transform {\r\n const axes = Matrix3d.createIdentity();\r\n axes.addScaledOuterProductInPlace(this._normal, this._normal, -1.0);\r\n axes.markSingular();\r\n return Transform.createFixedPointAndMatrix(this._origin, axes);\r\n }\r\n\r\n /** Copy coordinates from the given origin and normal. */\r\n public set(origin: Point3d, normal: Vector3d): void {\r\n this._origin.setFrom(origin);\r\n this._normal.setFrom(normal);\r\n }\r\n /** return a deep clone (point and normal cloned) */\r\n public clone(result?: Plane3dByOriginAndUnitNormal): Plane3dByOriginAndUnitNormal {\r\n if (result) {\r\n result.set(this._origin, this._normal);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndUnitNormal(this._origin.clone(), this._normal.clone());\r\n }\r\n /** Create a clone and return the transform of the clone. */\r\n public cloneTransformed(transform: Transform, inverse: boolean = false): Plane3dByOriginAndUnitNormal | undefined {\r\n const result = this.clone();\r\n if (inverse) {\r\n transform.multiplyInversePoint3d(result._origin, result._origin);\r\n if (transform.matrix.multiplyTransposeVector(result._normal, result._normal) !== undefined\r\n && result._normal.normalizeInPlace())\r\n return result;\r\n } else {\r\n transform.multiplyPoint3d(result._origin, result._origin);\r\n if (transform.matrix.multiplyInverseTranspose(result._normal, result._normal) !== undefined\r\n && result._normal.normalizeInPlace())\r\n return result;\r\n }\r\n return undefined;\r\n }\r\n /** Copy data from the given plane. */\r\n public setFrom(source: Plane3dByOriginAndUnitNormal): void {\r\n this.set(source._origin, source._normal);\r\n }\r\n /** Return the altitude of spacePoint above or below the plane. (Below is negative) */\r\n public altitude(spacePoint: Point3d): number { return this._normal.dotProductStartEnd(this._origin, spacePoint); }\r\n /** Return the altitude of point (x,y) given xy parts using only the xy parts of origin and unit normal */\r\n public altitudeXY(x: number, y: number): number {\r\n return (x - this._origin.x) * this._normal.x + (y - this._origin.y) * this._normal.y;\r\n }\r\n /**\r\n * Return the x component of the normal used to evaluate altitude.\r\n */\r\n public normalX(): number {return this._normal.x; }\r\n /**\r\n * Return the x component of the normal used to evaluate altitude.\r\n */\r\n public normalY(): number {return this._normal.y; }\r\n /**\r\n * Return the z component of the normal used to evaluate altitude.\r\n */\r\n public normalZ(): number {return this._normal.z; }\r\n\r\n /** Return the altitude of weighted spacePoint above or below the plane. (Below is negative) */\r\n public weightedAltitude(spacePoint: Point4d): number {\r\n return this._normal.dotProductStart3dEnd4d(this._origin, spacePoint);\r\n }\r\n\r\n /** return a point at specified (signed) altitude */\r\n public altitudeToPoint(altitude: number, result?: Point3d): Point3d {\r\n return this._origin.plusScaled(this._normal, altitude, result);\r\n }\r\n /** Return the dot product of spaceVector with the plane's unit normal. This tells the rate of change of altitude\r\n * for a point moving at speed one along the spaceVector.\r\n */\r\n public velocityXYZ(x: number, y: number, z: number): number { return this._normal.dotProductXYZ(x, y, z); }\r\n /** Return the dot product of spaceVector with the plane's unit normal. This tells the rate of change of altitude\r\n * for a point moving at speed one along the spaceVector.\r\n */\r\n public velocity(spaceVector: Vector3d): number { return this._normal.dotProduct(spaceVector); }\r\n /** Return the altitude of a point given as separate x,y,z components. */\r\n public altitudeXYZ(x: number, y: number, z: number): number {\r\n return this._normal.dotProductStartEndXYZ(this._origin, x, y, z);\r\n }\r\n /** Return the altitude of a point given as separate x,y,z,w components. */\r\n public altitudeXYZW(x: number, y: number, z: number, w: number): number {\r\n return this._normal.dotProductStartEndXYZW(this._origin, x, y, z, w);\r\n }\r\n /** Return the projection of spacePoint onto the plane. */\r\n public projectPointToPlane(spacePoint: Point3d, result?: Point3d): Point3d {\r\n return spacePoint.plusScaled(this._normal, -this._normal.dotProductStartEnd(this._origin, spacePoint), result);\r\n }\r\n /** Returns true of spacePoint is within distance tolerance of the plane. */\r\n public isPointInPlane(spacePoint: Point3d): boolean { return Geometry.isSmallMetricDistance(this.altitude(spacePoint)); }\r\n}\r\n"]}
@@ -6,7 +6,7 @@ import { Point3d, Vector3d } from "./Point3dVector3d";
6
6
  import { Ray3d } from "./Ray3d";
7
7
  import { Transform } from "./Transform";
8
8
  /**
9
- * A Point3dVector3dVector3d is an origin and a pair of vectors.
9
+ * A Plane3dByOriginAndVectors is an origin and a pair of vectors.
10
10
  * This defines a plane with a (possibly skewed) uv coordinate grid
11
11
  * * The grid directions (`vectorU` and `vectorV`)
12
12
  * * are NOT required to be unit vectors.
@@ -13,7 +13,7 @@ const Point3dVector3d_1 = require("./Point3dVector3d");
13
13
  const Ray3d_1 = require("./Ray3d");
14
14
  const Transform_1 = require("./Transform");
15
15
  /**
16
- * A Point3dVector3dVector3d is an origin and a pair of vectors.
16
+ * A Plane3dByOriginAndVectors is an origin and a pair of vectors.
17
17
  * This defines a plane with a (possibly skewed) uv coordinate grid
18
18
  * * The grid directions (`vectorU` and `vectorV`)
19
19
  * * are NOT required to be unit vectors.
@@ -1 +1 @@
1
- {"version":3,"file":"Plane3dByOriginAndVectors.js","sourceRoot":"","sources":["../../../src/geometry3d/Plane3dByOriginAndVectors.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\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { AxisOrder, BeJSONFunctions, Geometry } from \"../Geometry\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { Ray3d } from \"./Ray3d\";\r\nimport { Transform } from \"./Transform\";\r\n\r\n/**\r\n * A Point3dVector3dVector3d is an origin and a pair of vectors.\r\n * This defines a plane with a (possibly skewed) uv coordinate grid\r\n * * The grid directions (`vectorU` and `vectorV`)\r\n * * are NOT required to be unit vectors.\r\n * * are NOT required to be perpendicular vectors.\r\n * @public\r\n */\r\nexport class Plane3dByOriginAndVectors implements BeJSONFunctions {\r\n /** origin of plane grid */\r\n public origin: Point3d;\r\n /** u direction in plane grid */\r\n public vectorU: Vector3d;\r\n /** v direction in plane grid */\r\n public vectorV: Vector3d;\r\n private constructor(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d) {\r\n this.origin = origin;\r\n this.vectorU = vectorU;\r\n this.vectorV = vectorV;\r\n }\r\n /** create a new plane from origin and vectors. */\r\n public static createOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (result) {\r\n result.origin.setFrom(origin);\r\n result.vectorU.setFrom(vectorU);\r\n result.vectorV.setFrom(vectorV);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndVectors(origin.clone(), vectorU.clone(), vectorV.clone());\r\n }\r\n /** clone to a new plane. */\r\n public clone(): Plane3dByOriginAndVectors {\r\n return new Plane3dByOriginAndVectors(this.origin.clone(), this.vectorU.clone(), this.vectorV.clone());\r\n }\r\n\r\n /**\r\n * Return a Plane3dByOriginAndVectors, with\r\n * * origin is the translation (aka origin) from the Transform\r\n * * vectorU is the X column of the transform\r\n * * vectorV is the Y column of the transform.\r\n * @param transform source transform\r\n * @param xLength optional length to impose on vectorU.\r\n * @param yLength optional length to impose on vectorV.\r\n * @param result optional preexisting result\r\n */\r\n public static createFromTransformColumnsXYAndLengths(transform: Transform,\r\n xLength: number | undefined, yLength: number | undefined,\r\n result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (result) {\r\n result.origin.setFrom(transform.getOrigin());\r\n transform.matrix.columnX(result.vectorU);\r\n transform.matrix.columnY(result.vectorV);\r\n } else {\r\n result = new Plane3dByOriginAndVectors(\r\n transform.getOrigin(),\r\n transform.matrix.columnX(),\r\n transform.matrix.columnY());\r\n }\r\n if (xLength !== undefined)\r\n result.vectorU.scaleToLength(xLength, result.vectorU);\r\n if (yLength !== undefined)\r\n result.vectorV.scaleToLength(yLength, result.vectorV);\r\n return result;\r\n }\r\n /** Capture origin and directions in a new plane. */\r\n public static createCapture(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (!result)\r\n return new Plane3dByOriginAndVectors(origin, vectorU, vectorV);\r\n result.origin = origin;\r\n result.vectorU = vectorU;\r\n result.vectorV = vectorV;\r\n return result;\r\n }\r\n\r\n /** Set all origin and both vectors from direct numeric parameters */\r\n public setOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): Plane3dByOriginAndVectors {\r\n this.origin.set(x0, y0, z0);\r\n this.vectorU.set(ux, uy, uz);\r\n this.vectorV.set(vx, vy, vz);\r\n return this;\r\n }\r\n /** Set all origin and both vectors from coordinates in given origin and vectors.\r\n * * Note that coordinates are copied out of the parameters -- the given parameters are NOT retained by reference.\r\n */\r\n public setOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d): Plane3dByOriginAndVectors {\r\n this.origin.setFrom(origin);\r\n this.vectorU.setFrom(vectorU);\r\n this.vectorV.setFrom(vectorV);\r\n return this;\r\n }\r\n /** Create a new plane from direct numeric parameters */\r\n public static createOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (result)\r\n return result.setOriginAndVectorsXYZ(x0, y0, z0, ux, uy, uz, vx, vy, vz);\r\n return new Plane3dByOriginAndVectors(Point3d.create(x0, y0, z0), Vector3d.create(ux, uy, uz), Vector3d.create(vx, vy, vz));\r\n }\r\n /** Define a plane by three points in the plane.\r\n * @param origin origin for the parameterization.\r\n * @param targetU target point for the vectorU starting at the origin.\r\n * @param targetV target point for the vectorV originating at the origin.\r\n * @param result optional result.\r\n */\r\n public static createOriginAndTargets(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(origin.x, origin.y, origin.z, targetU.x - origin.x, targetU.y - origin.y, targetU.z - origin.z, targetV.x - origin.x, targetV.y - origin.y, targetV.z - origin.z, result);\r\n }\r\n /** Create a plane with origin at 000, unit vectorU in x direction, and unit vectorV in the y direction. */\r\n public static createXYPlane(result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(0, 0, 0, 1, 0, 0, 0, 1, 0, result);\r\n }\r\n /** create a plane from data presented as Float64Arrays.\r\n * @param origin x,y,z of origin.\r\n * @param vectorU x,y,z of vectorU\r\n * @param vectorV x,y,z of vectorV\r\n */\r\n public static createOriginAndVectorsArrays(origin: Float64Array, vectorU: Float64Array, vectorV: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(origin[0], origin[1], origin[2], vectorU[0], vectorU[1], vectorU[2], vectorV[0], vectorV[1], vectorV[2], result);\r\n }\r\n /** create a plane from data presented as Float64Array with weights\r\n * @param origin x,y,z,w of origin.\r\n * @param vectorU x,y,z,w of vectorU\r\n * @param vectorV x,y,z,w of vectorV\r\n */\r\n public static createOriginAndVectorsWeightedArrays(originW: Float64Array, vectorUw: Float64Array, vectorVw: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const w = originW[3];\r\n result = Plane3dByOriginAndVectors.createXYPlane(result);\r\n if (Geometry.isSmallMetricDistance(w))\r\n return result;\r\n const dw = 1.0 / w;\r\n const au = vectorUw[3] * dw * dw;\r\n const av = vectorVw[3] * dw * dw;\r\n // for homogeneous function X, with w its weight:\r\n // (X/w) is the cartesian point.\r\n // (X/w)' = (X' w - X w')/(w*w)\r\n // = X'/w - (X/w)(w'/w)\r\n // = X'/w - X w'/w^2)\r\n // The w parts of the formal xyzw sums are identically 0.\r\n // Here the X' and its w' are taken from each vectorUw and vectorVw\r\n result.origin.set(originW[0] * dw, originW[1] * dw, originW[2] * dw);\r\n Vector3d.createAdd2ScaledXYZ(vectorUw[0], vectorUw[1], vectorUw[2], dw, originW[0], originW[1], originW[2], -au, result.vectorU);\r\n Vector3d.createAdd2ScaledXYZ(vectorVw[0], vectorVw[1], vectorVw[2], dw, originW[0], originW[1], originW[2], -av, result.vectorV);\r\n return result;\r\n }\r\n /**\r\n * Evaluate a point a grid coordinates on the plane.\r\n * * The computed point is `origin + vectorU * u + vectorV * v`\r\n * @param u coordinate along vectorU\r\n * @param v coordinate along vectorV\r\n * @param result optional result destination.\r\n * @returns Return the computed coordinate.\r\n */\r\n public fractionToPoint(u: number, v: number, result?: Point3d): Point3d {\r\n return this.origin.plus2Scaled(this.vectorU, u, this.vectorV, v, result);\r\n }\r\n /** Return the vector from the plane origin to parametric coordinate (u.v) */\r\n public fractionToVector(u: number, v: number, result?: Vector3d): Vector3d {\r\n return Vector3d.createAdd2Scaled(this.vectorU, u, this.vectorV, v, result);\r\n }\r\n /** Set coordinates from a json object such as `{origin: [1,2,3], vectorU:[4,5,6], vectorV[3,2,1]}` */\r\n public setFromJSON(json?: any) {\r\n if (!json || !json.origin || !json.vectorV) {\r\n this.origin.set(0, 0, 0);\r\n this.vectorU.set(1, 0, 0);\r\n this.vectorV.set(0, 1, 0);\r\n } else {\r\n this.origin.setFromJSON(json.origin);\r\n this.vectorU.setFromJSON(json.vectorU);\r\n this.vectorV.setFromJSON(json.vectorV);\r\n }\r\n }\r\n /**\r\n * Convert an Angle to a JSON object.\r\n * @return {*} [origin,normal]\r\n */\r\n public toJSON(): any {\r\n return {\r\n origin: this.origin.toJSON(),\r\n vectorU: this.vectorU.toJSON(),\r\n vectorV: this.vectorV.toJSON(),\r\n };\r\n }\r\n /** create a new plane. See `setFromJSON` for layout example. */\r\n public static fromJSON(json?: any): Plane3dByOriginAndVectors {\r\n const result = Plane3dByOriginAndVectors.createXYPlane();\r\n result.setFromJSON(json);\r\n return result;\r\n }\r\n /** Test origin and vectors for isAlmostEqual with `other` */\r\n public isAlmostEqual(other: Plane3dByOriginAndVectors): boolean {\r\n return this.origin.isAlmostEqual(other.origin)\r\n && this.vectorU.isAlmostEqual(other.vectorU)\r\n && this.vectorV.isAlmostEqual(other.vectorV);\r\n }\r\n /** Normalize both `vectorU` and `vectorV` in place.\r\n * * Return true if both succeeded.\r\n */\r\n public normalizeInPlace(): boolean {\r\n const okU = this.vectorU.normalizeInPlace();\r\n const okV = this.vectorV.normalizeInPlace();\r\n return okU && okV;\r\n }\r\n /**\r\n * Return (if possible) a unit normal to the plane.\r\n */\r\n public unitNormal(result?: Vector3d): Vector3d | undefined {\r\n return this.vectorU.unitCrossProduct(this.vectorV, result);\r\n }\r\n private static _workVector: Vector3d;\r\n /**\r\n * Return (if possible) a ray with origin at plane origin, direction as unit normal to the plane.\r\n */\r\n public unitNormalRay(result?: Ray3d): Ray3d | undefined {\r\n if (!Plane3dByOriginAndVectors._workVector)\r\n Plane3dByOriginAndVectors._workVector = Vector3d.create();\r\n const unitNormal = this.vectorU.unitCrossProduct(this.vectorV, Plane3dByOriginAndVectors._workVector);\r\n if (unitNormal === undefined)\r\n return undefined;\r\n return Ray3d.create(this.origin, unitNormal, result);\r\n }\r\n\r\n /**\r\n * Create a rigid frame (i.e. frenet frame) with\r\n * * origin at the plane origin\r\n * * x axis along the (normalized) vectorU\r\n * * y axis normalized vectorU to vectorV plane, and perpendicular to x axis\r\n * * z axis perpendicular to both.\r\n * @param result optional result\r\n */\r\n public toRigidFrame(result?: Transform): Transform | undefined {\r\n return Transform.createRigidFromOriginAndColumns(this.origin, this.vectorU, this.vectorV, AxisOrder.XYZ, result);\r\n }\r\n\r\n /**\r\n * Apply the transform to the origin and vectors in place.\r\n */\r\n public transformInPlace(transform: Transform) {\r\n transform.multiplyPoint3d(this.origin, this.origin);\r\n transform.multiplyVector (this.vectorU, this.vectorU);\r\n transform.multiplyVector (this.vectorV, this.vectorV);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Plane3dByOriginAndVectors.js","sourceRoot":"","sources":["../../../src/geometry3d/Plane3dByOriginAndVectors.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\r\n/** @packageDocumentation\r\n * @module CartesianGeometry\r\n */\r\nimport { AxisOrder, BeJSONFunctions, Geometry } from \"../Geometry\";\r\nimport { Point3d, Vector3d } from \"./Point3dVector3d\";\r\nimport { Ray3d } from \"./Ray3d\";\r\nimport { Transform } from \"./Transform\";\r\n\r\n/**\r\n * A Plane3dByOriginAndVectors is an origin and a pair of vectors.\r\n * This defines a plane with a (possibly skewed) uv coordinate grid\r\n * * The grid directions (`vectorU` and `vectorV`)\r\n * * are NOT required to be unit vectors.\r\n * * are NOT required to be perpendicular vectors.\r\n * @public\r\n */\r\nexport class Plane3dByOriginAndVectors implements BeJSONFunctions {\r\n /** origin of plane grid */\r\n public origin: Point3d;\r\n /** u direction in plane grid */\r\n public vectorU: Vector3d;\r\n /** v direction in plane grid */\r\n public vectorV: Vector3d;\r\n private constructor(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d) {\r\n this.origin = origin;\r\n this.vectorU = vectorU;\r\n this.vectorV = vectorV;\r\n }\r\n /** create a new plane from origin and vectors. */\r\n public static createOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (result) {\r\n result.origin.setFrom(origin);\r\n result.vectorU.setFrom(vectorU);\r\n result.vectorV.setFrom(vectorV);\r\n return result;\r\n }\r\n return new Plane3dByOriginAndVectors(origin.clone(), vectorU.clone(), vectorV.clone());\r\n }\r\n /** clone to a new plane. */\r\n public clone(): Plane3dByOriginAndVectors {\r\n return new Plane3dByOriginAndVectors(this.origin.clone(), this.vectorU.clone(), this.vectorV.clone());\r\n }\r\n\r\n /**\r\n * Return a Plane3dByOriginAndVectors, with\r\n * * origin is the translation (aka origin) from the Transform\r\n * * vectorU is the X column of the transform\r\n * * vectorV is the Y column of the transform.\r\n * @param transform source transform\r\n * @param xLength optional length to impose on vectorU.\r\n * @param yLength optional length to impose on vectorV.\r\n * @param result optional preexisting result\r\n */\r\n public static createFromTransformColumnsXYAndLengths(transform: Transform,\r\n xLength: number | undefined, yLength: number | undefined,\r\n result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (result) {\r\n result.origin.setFrom(transform.getOrigin());\r\n transform.matrix.columnX(result.vectorU);\r\n transform.matrix.columnY(result.vectorV);\r\n } else {\r\n result = new Plane3dByOriginAndVectors(\r\n transform.getOrigin(),\r\n transform.matrix.columnX(),\r\n transform.matrix.columnY());\r\n }\r\n if (xLength !== undefined)\r\n result.vectorU.scaleToLength(xLength, result.vectorU);\r\n if (yLength !== undefined)\r\n result.vectorV.scaleToLength(yLength, result.vectorV);\r\n return result;\r\n }\r\n /** Capture origin and directions in a new plane. */\r\n public static createCapture(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (!result)\r\n return new Plane3dByOriginAndVectors(origin, vectorU, vectorV);\r\n result.origin = origin;\r\n result.vectorU = vectorU;\r\n result.vectorV = vectorV;\r\n return result;\r\n }\r\n\r\n /** Set all origin and both vectors from direct numeric parameters */\r\n public setOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): Plane3dByOriginAndVectors {\r\n this.origin.set(x0, y0, z0);\r\n this.vectorU.set(ux, uy, uz);\r\n this.vectorV.set(vx, vy, vz);\r\n return this;\r\n }\r\n /** Set all origin and both vectors from coordinates in given origin and vectors.\r\n * * Note that coordinates are copied out of the parameters -- the given parameters are NOT retained by reference.\r\n */\r\n public setOriginAndVectors(origin: Point3d, vectorU: Vector3d, vectorV: Vector3d): Plane3dByOriginAndVectors {\r\n this.origin.setFrom(origin);\r\n this.vectorU.setFrom(vectorU);\r\n this.vectorV.setFrom(vectorV);\r\n return this;\r\n }\r\n /** Create a new plane from direct numeric parameters */\r\n public static createOriginAndVectorsXYZ(x0: number, y0: number, z0: number, ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n if (result)\r\n return result.setOriginAndVectorsXYZ(x0, y0, z0, ux, uy, uz, vx, vy, vz);\r\n return new Plane3dByOriginAndVectors(Point3d.create(x0, y0, z0), Vector3d.create(ux, uy, uz), Vector3d.create(vx, vy, vz));\r\n }\r\n /** Define a plane by three points in the plane.\r\n * @param origin origin for the parameterization.\r\n * @param targetU target point for the vectorU starting at the origin.\r\n * @param targetV target point for the vectorV originating at the origin.\r\n * @param result optional result.\r\n */\r\n public static createOriginAndTargets(origin: Point3d, targetU: Point3d, targetV: Point3d, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(origin.x, origin.y, origin.z, targetU.x - origin.x, targetU.y - origin.y, targetU.z - origin.z, targetV.x - origin.x, targetV.y - origin.y, targetV.z - origin.z, result);\r\n }\r\n /** Create a plane with origin at 000, unit vectorU in x direction, and unit vectorV in the y direction. */\r\n public static createXYPlane(result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(0, 0, 0, 1, 0, 0, 0, 1, 0, result);\r\n }\r\n /** create a plane from data presented as Float64Arrays.\r\n * @param origin x,y,z of origin.\r\n * @param vectorU x,y,z of vectorU\r\n * @param vectorV x,y,z of vectorV\r\n */\r\n public static createOriginAndVectorsArrays(origin: Float64Array, vectorU: Float64Array, vectorV: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(origin[0], origin[1], origin[2], vectorU[0], vectorU[1], vectorU[2], vectorV[0], vectorV[1], vectorV[2], result);\r\n }\r\n /** create a plane from data presented as Float64Array with weights\r\n * @param origin x,y,z,w of origin.\r\n * @param vectorU x,y,z,w of vectorU\r\n * @param vectorV x,y,z,w of vectorV\r\n */\r\n public static createOriginAndVectorsWeightedArrays(originW: Float64Array, vectorUw: Float64Array, vectorVw: Float64Array, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n const w = originW[3];\r\n result = Plane3dByOriginAndVectors.createXYPlane(result);\r\n if (Geometry.isSmallMetricDistance(w))\r\n return result;\r\n const dw = 1.0 / w;\r\n const au = vectorUw[3] * dw * dw;\r\n const av = vectorVw[3] * dw * dw;\r\n // for homogeneous function X, with w its weight:\r\n // (X/w) is the cartesian point.\r\n // (X/w)' = (X' w - X w')/(w*w)\r\n // = X'/w - (X/w)(w'/w)\r\n // = X'/w - X w'/w^2)\r\n // The w parts of the formal xyzw sums are identically 0.\r\n // Here the X' and its w' are taken from each vectorUw and vectorVw\r\n result.origin.set(originW[0] * dw, originW[1] * dw, originW[2] * dw);\r\n Vector3d.createAdd2ScaledXYZ(vectorUw[0], vectorUw[1], vectorUw[2], dw, originW[0], originW[1], originW[2], -au, result.vectorU);\r\n Vector3d.createAdd2ScaledXYZ(vectorVw[0], vectorVw[1], vectorVw[2], dw, originW[0], originW[1], originW[2], -av, result.vectorV);\r\n return result;\r\n }\r\n /**\r\n * Evaluate a point a grid coordinates on the plane.\r\n * * The computed point is `origin + vectorU * u + vectorV * v`\r\n * @param u coordinate along vectorU\r\n * @param v coordinate along vectorV\r\n * @param result optional result destination.\r\n * @returns Return the computed coordinate.\r\n */\r\n public fractionToPoint(u: number, v: number, result?: Point3d): Point3d {\r\n return this.origin.plus2Scaled(this.vectorU, u, this.vectorV, v, result);\r\n }\r\n /** Return the vector from the plane origin to parametric coordinate (u.v) */\r\n public fractionToVector(u: number, v: number, result?: Vector3d): Vector3d {\r\n return Vector3d.createAdd2Scaled(this.vectorU, u, this.vectorV, v, result);\r\n }\r\n /** Set coordinates from a json object such as `{origin: [1,2,3], vectorU:[4,5,6], vectorV[3,2,1]}` */\r\n public setFromJSON(json?: any) {\r\n if (!json || !json.origin || !json.vectorV) {\r\n this.origin.set(0, 0, 0);\r\n this.vectorU.set(1, 0, 0);\r\n this.vectorV.set(0, 1, 0);\r\n } else {\r\n this.origin.setFromJSON(json.origin);\r\n this.vectorU.setFromJSON(json.vectorU);\r\n this.vectorV.setFromJSON(json.vectorV);\r\n }\r\n }\r\n /**\r\n * Convert an Angle to a JSON object.\r\n * @return {*} [origin,normal]\r\n */\r\n public toJSON(): any {\r\n return {\r\n origin: this.origin.toJSON(),\r\n vectorU: this.vectorU.toJSON(),\r\n vectorV: this.vectorV.toJSON(),\r\n };\r\n }\r\n /** create a new plane. See `setFromJSON` for layout example. */\r\n public static fromJSON(json?: any): Plane3dByOriginAndVectors {\r\n const result = Plane3dByOriginAndVectors.createXYPlane();\r\n result.setFromJSON(json);\r\n return result;\r\n }\r\n /** Test origin and vectors for isAlmostEqual with `other` */\r\n public isAlmostEqual(other: Plane3dByOriginAndVectors): boolean {\r\n return this.origin.isAlmostEqual(other.origin)\r\n && this.vectorU.isAlmostEqual(other.vectorU)\r\n && this.vectorV.isAlmostEqual(other.vectorV);\r\n }\r\n /** Normalize both `vectorU` and `vectorV` in place.\r\n * * Return true if both succeeded.\r\n */\r\n public normalizeInPlace(): boolean {\r\n const okU = this.vectorU.normalizeInPlace();\r\n const okV = this.vectorV.normalizeInPlace();\r\n return okU && okV;\r\n }\r\n /**\r\n * Return (if possible) a unit normal to the plane.\r\n */\r\n public unitNormal(result?: Vector3d): Vector3d | undefined {\r\n return this.vectorU.unitCrossProduct(this.vectorV, result);\r\n }\r\n private static _workVector: Vector3d;\r\n /**\r\n * Return (if possible) a ray with origin at plane origin, direction as unit normal to the plane.\r\n */\r\n public unitNormalRay(result?: Ray3d): Ray3d | undefined {\r\n if (!Plane3dByOriginAndVectors._workVector)\r\n Plane3dByOriginAndVectors._workVector = Vector3d.create();\r\n const unitNormal = this.vectorU.unitCrossProduct(this.vectorV, Plane3dByOriginAndVectors._workVector);\r\n if (unitNormal === undefined)\r\n return undefined;\r\n return Ray3d.create(this.origin, unitNormal, result);\r\n }\r\n\r\n /**\r\n * Create a rigid frame (i.e. frenet frame) with\r\n * * origin at the plane origin\r\n * * x axis along the (normalized) vectorU\r\n * * y axis normalized vectorU to vectorV plane, and perpendicular to x axis\r\n * * z axis perpendicular to both.\r\n * @param result optional result\r\n */\r\n public toRigidFrame(result?: Transform): Transform | undefined {\r\n return Transform.createRigidFromOriginAndColumns(this.origin, this.vectorU, this.vectorV, AxisOrder.XYZ, result);\r\n }\r\n\r\n /**\r\n * Apply the transform to the origin and vectors in place.\r\n */\r\n public transformInPlace(transform: Transform) {\r\n transform.multiplyPoint3d(this.origin, this.origin);\r\n transform.multiplyVector (this.vectorU, this.vectorU);\r\n transform.multiplyVector (this.vectorV, this.vectorV);\r\n }\r\n}\r\n"]}