@itwin/core-geometry 4.1.0-dev.12 → 4.1.0-dev.14
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/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +61 -41
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +69 -46
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/Loop.d.ts +7 -5
- package/lib/cjs/curve/Loop.d.ts.map +1 -1
- package/lib/cjs/curve/Loop.js +18 -6
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.d.ts +7 -7
- package/lib/cjs/curve/ParityRegion.d.ts.map +1 -1
- package/lib/cjs/curve/ParityRegion.js +19 -11
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.d.ts +6 -6
- package/lib/cjs/curve/Path.d.ts.map +1 -1
- package/lib/cjs/curve/Path.js +15 -9
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.d.ts +4 -6
- package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js +7 -7
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +70 -43
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +71 -43
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.d.ts +6 -5
- package/lib/cjs/curve/UnionRegion.d.ts.map +1 -1
- package/lib/cjs/curve/UnionRegion.js +17 -8
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts +2 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js +6 -2
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js +4 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +133 -93
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +296 -144
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +61 -41
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +69 -46
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/Loop.d.ts +7 -5
- package/lib/esm/curve/Loop.d.ts.map +1 -1
- package/lib/esm/curve/Loop.js +18 -6
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/ParityRegion.d.ts +7 -7
- package/lib/esm/curve/ParityRegion.d.ts.map +1 -1
- package/lib/esm/curve/ParityRegion.js +19 -11
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.d.ts +6 -6
- package/lib/esm/curve/Path.d.ts.map +1 -1
- package/lib/esm/curve/Path.js +15 -9
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.d.ts +4 -6
- package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/esm/curve/ProxyCurve.js +7 -7
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +70 -43
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +71 -43
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/UnionRegion.d.ts +6 -5
- package/lib/esm/curve/UnionRegion.d.ts.map +1 -1
- package/lib/esm/curve/UnionRegion.js +17 -8
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.d.ts +2 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js +6 -2
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +14 -8
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +14 -8
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js +4 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +133 -93
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +296 -144
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnionRegion.js","sourceRoot":"","sources":["../../../src/curve/UnionRegion.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAO/F,uDAAoD;AAGpD,iCAA8B;AAC9B,iDAA8C;AAG9C;;;;;;GAMG;AACH,MAAa,WAAY,SAAQ,iCAAe;
|
|
1
|
+
{"version":3,"file":"UnionRegion.js","sourceRoot":"","sources":["../../../src/curve/UnionRegion.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAO/F,uDAAoD;AAGpD,iCAA8B;AAC9B,iDAA8C;AAG9C;;;;;;GAMG;AACH,MAAa,WAAY,SAAQ,iCAAe;IAG9C,yCAAyC;IAClC,mBAAmB,CAAC,KAAoB;QAC7C,OAAO,KAAK,YAAY,WAAW,CAAC;IACtC,CAAC;IAGD,kCAAkC;IAClC,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,iDAAiD;IACjD;QACE,KAAK,EAAE,CAAC;QAdV,wCAAwC;QACxB,wBAAmB,GAAG,aAAa,CAAC;QAclD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,wDAAwD;IACjD,MAAM,CAAC,MAAM,CAAC,GAAG,IAAgC;QACtD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;YACxB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC3B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,+EAA+E;IACxE,eAAe;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,2FAA2F;IACpF,wBAAwB,CAAC,SAAkC,EAAE,gBAAwB,CAAC,CAAC;QAC5F,OAAO,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,uDAAuD;IAChD,YAAY,CAAC,OAAuB;QACzC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC;QACV,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;YAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAwB,CAAC;YACxE,IAAI,YAAY;gBACd,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACrC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qCAAqC;IAC9B,cAAc;QACnB,OAAO,IAAI,WAAW,EAAE,CAAC;IAC3B,CAAC;IACD;;;OAGG;IACI,WAAW,CAAC,KAAe;QAChC,IAAI,KAAK,IAAI,KAAK,YAAY,2BAAY,IAAI,KAAK,YAAY,WAAI,EAAE;YACnE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,0CAA0C;IACnC,QAAQ,CAAC,CAAS;QACvB,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;YAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,8EAA8E;IACvE,yBAAyB,CAAC,OAAwB;QACvD,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;AAtED,kCAsEC","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 Curve\r\n */\r\nimport { GeometryHandler } from \"../geometry3d/GeometryHandler\";\r\nimport { AnyCurve } from \"./CurveChain\";\r\nimport { CurveCollection } from \"./CurveCollection\";\r\nimport { RecursiveCurveProcessor } from \"./CurveProcessor\";\r\nimport { GeometryQuery } from \"./GeometryQuery\";\r\nimport { Loop } from \"./Loop\";\r\nimport { ParityRegion } from \"./ParityRegion\";\r\nimport { StrokeOptions } from \"./StrokeOptions\";\r\n\r\n/**\r\n * * A `UnionRegion` is a collection of other planar region types -- `Loop` and `ParityRegion`.\r\n * * The composite is the union of the contained regions.\r\n * * A point is \"in\" the composite if it is \"in\" one or more of the contained regions.\r\n * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.\r\n * @public\r\n */\r\nexport class UnionRegion extends CurveCollection {\r\n /** String name for schema properties */\r\n public readonly curveCollectionType = \"unionRegion\";\r\n /** Test if `other` is a `UnionRegion` */\r\n public isSameGeometryClass(other: GeometryQuery): boolean {\r\n return other instanceof UnionRegion;\r\n }\r\n /** Collection of Loop and ParityRegion children. */\r\n protected _children: Array<ParityRegion | Loop>;\r\n /** Return the array of regions */\r\n public override get children(): Array<ParityRegion | Loop> {\r\n return this._children;\r\n }\r\n /** Constructor -- initialize with no children */\r\n public constructor() {\r\n super();\r\n this._children = [];\r\n }\r\n /** Create a `UnionRegion` with given region children */\r\n public static create(...data: Array<ParityRegion | Loop>): UnionRegion {\r\n const result = new UnionRegion();\r\n for (const child of data) {\r\n result.tryAddChild(child);\r\n }\r\n return result;\r\n }\r\n /** Return the boundary type (5) of a corresponding MicroStation CurveVector */\r\n public dgnBoundaryType(): number {\r\n return 5;\r\n }\r\n /** Dispatch to more strongly typed `processor.announceUnionRegion(this, indexInParent)` */\r\n public announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent: number = -1): void {\r\n return processor.announceUnionRegion(this, indexInParent);\r\n }\r\n /** Return structural clone with stroked primitives. */\r\n public cloneStroked(options?: StrokeOptions): UnionRegion {\r\n const clone = new UnionRegion();\r\n let child;\r\n for (child of this._children) {\r\n const childStrokes = child.cloneStroked(options) as ParityRegion | Loop;\r\n if (childStrokes)\r\n clone.children.push(childStrokes);\r\n }\r\n return clone;\r\n }\r\n /** Return new empty `UnionRegion` */\r\n public cloneEmptyPeer(): UnionRegion {\r\n return new UnionRegion();\r\n }\r\n /**\r\n * Try to add a child.\r\n * * Returns false if the `AnyCurve` child is not a region type.\r\n */\r\n public tryAddChild(child: AnyCurve): boolean {\r\n if (child && child instanceof ParityRegion || child instanceof Loop) {\r\n this._children.push(child);\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Return a child identified by index. */\r\n public getChild(i: number): Loop | ParityRegion | undefined {\r\n if (i < this._children.length)\r\n return this._children[i];\r\n return undefined;\r\n }\r\n /** Second step of double dispatch: call `handler.handleUnionRegion(this)` */\r\n public dispatchToGeometryHandler(handler: GeometryHandler): any {\r\n return handler.handleUnionRegion(this);\r\n }\r\n}\r\n"]}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
import { CurveCollection } from "../CurveCollection";
|
|
5
5
|
import { CurvePrimitive } from "../CurvePrimitive";
|
|
6
6
|
import { RecursiveCurveProcessorWithStack } from "../CurveProcessor";
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Algorithmic class: Accumulate maximum gap between adjacent primitives of CurveChain.
|
|
8
9
|
* @internal
|
|
9
10
|
*/
|
|
10
11
|
export declare class GapSearchContext extends RecursiveCurveProcessorWithStack {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GapSearchContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/GapSearchContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,EAAc,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AAGrE
|
|
1
|
+
{"version":3,"file":"GapSearchContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/GapSearchContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,EAAc,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AAGrE;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,gCAAgC;IAC7D,MAAM,EAAE,MAAM,CAAC;;WAKR,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;IAKrC,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;CAY5F"}
|
|
@@ -11,11 +11,15 @@ exports.GapSearchContext = void 0;
|
|
|
11
11
|
const CurveCollection_1 = require("../CurveCollection");
|
|
12
12
|
const CurveProcessor_1 = require("../CurveProcessor");
|
|
13
13
|
// import { SumLengthsContext, GapSearchContext, CountLinearPartsSearchContext, CloneCurvesContext, TransformInPlaceContext } from "./CurveSearches";
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Algorithmic class: Accumulate maximum gap between adjacent primitives of CurveChain.
|
|
15
16
|
* @internal
|
|
16
17
|
*/
|
|
17
18
|
class GapSearchContext extends CurveProcessor_1.RecursiveCurveProcessorWithStack {
|
|
18
|
-
constructor() {
|
|
19
|
+
constructor() {
|
|
20
|
+
super();
|
|
21
|
+
this.maxGap = 0.0;
|
|
22
|
+
}
|
|
19
23
|
static maxGap(target) {
|
|
20
24
|
const context = new GapSearchContext();
|
|
21
25
|
target.announceToCurveProcessor(context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GapSearchContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/GapSearchContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,wDAAiE;AAEjE,sDAAqE;AAErE,qJAAqJ;AACrJ
|
|
1
|
+
{"version":3,"file":"GapSearchContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/GapSearchContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;GAEG;AACH,wDAAiE;AAEjE,sDAAqE;AAErE,qJAAqJ;AACrJ;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,iDAAgC;IAEpE;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,CAAC;IACM,MAAM,CAAC,MAAM,CAAC,MAAuB;QAC1C,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IACe,sBAAsB,CAAC,KAAqB,EAAE,cAAsB;QAClF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnD,IAAI,MAAM,YAAY,4BAAU,EAAE;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC;gBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBACjE,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;oBAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;iBACxF;aACF;SACF;IACH,CAAC;CACF;AAvBD,4CAuBC","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 Curve\r\n */\r\nimport { CurveChain, CurveCollection } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { RecursiveCurveProcessorWithStack } from \"../CurveProcessor\";\r\n\r\n// import { SumLengthsContext, GapSearchContext, CountLinearPartsSearchContext, CloneCurvesContext, TransformInPlaceContext } from \"./CurveSearches\";\r\n/**\r\n * Algorithmic class: Accumulate maximum gap between adjacent primitives of CurveChain.\r\n * @internal\r\n */\r\nexport class GapSearchContext extends RecursiveCurveProcessorWithStack {\r\n public maxGap: number;\r\n constructor() {\r\n super();\r\n this.maxGap = 0.0;\r\n }\r\n public static maxGap(target: CurveCollection): number {\r\n const context = new GapSearchContext();\r\n target.announceToCurveProcessor(context);\r\n return context.maxGap;\r\n }\r\n public override announceCurvePrimitive(curve: CurvePrimitive, _indexInParent: number): void {\r\n if (this._stack.length > 0) {\r\n const parent = this._stack[this._stack.length - 1];\r\n if (parent instanceof CurveChain) {\r\n const chain = parent;\r\n const nextCurve = chain.cyclicCurvePrimitive(_indexInParent + 1);\r\n if (curve !== undefined && nextCurve !== undefined) {\r\n this.maxGap = Math.max(this.maxGap, curve.endPoint().distance(nextCurve.startPoint()));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -37,23 +37,29 @@ export declare class PlaneAltitudeRangeContext extends RecurseToCurvesGeometryHa
|
|
|
37
37
|
private _workPoint?;
|
|
38
38
|
handleArc3d(g: Arc3d): void;
|
|
39
39
|
private static findExtremesInDirection;
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
40
|
+
/**
|
|
41
|
+
* Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and
|
|
42
|
+
* return points at min and max altitude, packed into a `LineSegment3d`.
|
|
42
43
|
* @param geometry geometry to project
|
|
43
|
-
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
44
|
+
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
45
|
+
* zero origin.
|
|
44
46
|
* @param lowHigh optional receiver for output
|
|
45
47
|
*/
|
|
46
48
|
static findExtremePointsInDirection(geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: LineSegment3d): LineSegment3d | undefined;
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
+
/**
|
|
50
|
+
* Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and return
|
|
51
|
+
* the min and max altitudes, packed into a Range1d.
|
|
49
52
|
* @param geometry geometry to project
|
|
50
|
-
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
53
|
+
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
54
|
+
* zero origin.
|
|
51
55
|
* @param lowHigh optional receiver for output
|
|
52
56
|
*/
|
|
53
57
|
static findExtremeAltitudesInDirection(geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined;
|
|
54
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.
|
|
55
60
|
* @param geometry geometry to project
|
|
56
|
-
* @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with
|
|
61
|
+
* @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with
|
|
62
|
+
* zero origin.
|
|
57
63
|
* @param lowHigh optional receiver for output
|
|
58
64
|
*/
|
|
59
65
|
static findExtremeFractionsAlongDirection(geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaneAltitudeRangeContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAY,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,8BAA8B;IACpE,KAAK,EAAE,sBAAsB,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,OAAO;IAOA,UAAU;IAIV,aAAa,CAAC,KAAK,EAAE,OAAO;IAQ5B,cAAc,CAAC,MAAM,EAAE,gBAAgB;WAUhC,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,yBAAyB;IAKrE,mBAAmB,CAAC,OAAO,EAAE,aAAa;IAK1C,kBAAkB,CAAC,UAAU,EAAE,YAAY;IAI3D,OAAO,CAAC,cAAc,CAAC,CAAgB;
|
|
1
|
+
{"version":3,"file":"PlaneAltitudeRangeContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAY,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,8BAA8B;IACpE,KAAK,EAAE,sBAAsB,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,OAAO;IAOA,UAAU;IAIV,aAAa,CAAC,KAAK,EAAE,OAAO;IAQ5B,cAAc,CAAC,MAAM,EAAE,gBAAgB;WAUhC,aAAa,CAAC,KAAK,EAAE,sBAAsB,GAAG,yBAAyB;IAKrE,mBAAmB,CAAC,OAAO,EAAE,aAAa;IAK1C,kBAAkB,CAAC,UAAU,EAAE,YAAY;IAI3D,OAAO,CAAC,cAAc,CAAC,CAAgB;IAEvC,OAAO,CAAC,iBAAiB;IAQT,oBAAoB,CAAC,MAAM,EAAE,cAAc;IAQ3C,qBAAqB,CAAC,MAAM,EAAE,eAAe;IAQ7D,OAAO,CAAC,qBAAqB,CAAC,CAAuB;IAErD,OAAO,CAAC,UAAU,CAAC,CAAU;IAEb,WAAW,CAAC,CAAC,EAAE,KAAK;IAYpC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAoBtC;;;;;;;MAOE;WACY,4BAA4B,CACxC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,GAAG,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,aAAa,GAC3G,aAAa,GAAG,SAAS;IAO5B;;;;;;;MAOE;WACY,+BAA+B,CAC3C,QAAQ,EAAE,aAAa,GAAG,gBAAgB,GAAG,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,GACrG,OAAO,GAAG,SAAS;IAOtB;;;;;;OAMG;WACW,kCAAkC,CAC9C,QAAQ,EAAE,aAAa,GAAG,gBAAgB,GAAG,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,GACrG,OAAO,GAAG,SAAS;CAavB"}
|
|
@@ -110,10 +110,12 @@ class PlaneAltitudeRangeContext extends GeometryHandler_1.RecurseToCurvesGeometr
|
|
|
110
110
|
}
|
|
111
111
|
return undefined;
|
|
112
112
|
}
|
|
113
|
-
/**
|
|
114
|
-
*
|
|
113
|
+
/**
|
|
114
|
+
* Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and
|
|
115
|
+
* return points at min and max altitude, packed into a `LineSegment3d`.
|
|
115
116
|
* @param geometry geometry to project
|
|
116
|
-
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
117
|
+
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
118
|
+
* zero origin.
|
|
117
119
|
* @param lowHigh optional receiver for output
|
|
118
120
|
*/
|
|
119
121
|
static findExtremePointsInDirection(geometry, direction, lowHigh) {
|
|
@@ -122,10 +124,12 @@ class PlaneAltitudeRangeContext extends GeometryHandler_1.RecurseToCurvesGeometr
|
|
|
122
124
|
return LineSegment3d_1.LineSegment3d.create(context.lowPoint, context.highPoint, lowHigh);
|
|
123
125
|
return undefined;
|
|
124
126
|
}
|
|
125
|
-
/**
|
|
126
|
-
*
|
|
127
|
+
/**
|
|
128
|
+
* Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and return
|
|
129
|
+
* the min and max altitudes, packed into a Range1d.
|
|
127
130
|
* @param geometry geometry to project
|
|
128
|
-
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
131
|
+
* @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with
|
|
132
|
+
* zero origin.
|
|
129
133
|
* @param lowHigh optional receiver for output
|
|
130
134
|
*/
|
|
131
135
|
static findExtremeAltitudesInDirection(geometry, direction, lowHigh) {
|
|
@@ -134,9 +138,11 @@ class PlaneAltitudeRangeContext extends GeometryHandler_1.RecurseToCurvesGeometr
|
|
|
134
138
|
return Range_1.Range1d.createFrom(context.range, lowHigh);
|
|
135
139
|
return undefined;
|
|
136
140
|
}
|
|
137
|
-
/**
|
|
141
|
+
/**
|
|
142
|
+
* Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.
|
|
138
143
|
* @param geometry geometry to project
|
|
139
|
-
* @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with
|
|
144
|
+
* @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with
|
|
145
|
+
* zero origin.
|
|
140
146
|
* @param lowHigh optional receiver for output
|
|
141
147
|
*/
|
|
142
148
|
static findExtremeFractionsAlongDirection(geometry, direction, lowHigh) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaneAltitudeRangeContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.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 Curve\r\n */\r\n\r\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\r\nimport { Geometry, PlaneAltitudeEvaluator } from \"../../Geometry\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { SineCosinePolynomial } from \"../../numerics/Polynomials\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { GeometryQuery } from \"../GeometryQuery\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\n\r\n/**\r\n * Accumulator context for searching for extrema of geometry along a plane.\r\n * @internal\r\n */\r\nexport class PlaneAltitudeRangeContext extends RecurseToCurvesGeometryHandler {\r\n public plane: PlaneAltitudeEvaluator;\r\n public range: Range1d;\r\n public lowPoint: Point3d | undefined;\r\n public highPoint: Point3d | undefined;\r\n private constructor(plane: PlaneAltitudeEvaluator) {\r\n super();\r\n this.plane = plane;\r\n this.range = Range1d.createNull();\r\n this.resetRange();\r\n }\r\n\r\n public resetRange() {\r\n this.range.setNull();\r\n }\r\n\r\n public announcePoint(point: Point3d) {\r\n const h = this.plane.altitude(point);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = point.clone(this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = point.clone(this.highPoint);\r\n }\r\n\r\n public announcePoints(points: GrowableXYZArray) {\r\n for (let i = 0; i < points.length; i++) {\r\n const h = points.evaluateUncheckedIndexPlaneAltitude(i, this.plane);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = points.getPoint3dAtUncheckedPointIndex(i, this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = points.getPoint3dAtUncheckedPointIndex(i, this.highPoint);\r\n }\r\n }\r\n\r\n public static createCapture(plane: PlaneAltitudeEvaluator): PlaneAltitudeRangeContext {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n return context;\r\n }\r\n\r\n public override handleLineSegment3d(segment: LineSegment3d) {\r\n this.announcePoint(segment.point0Ref);\r\n this.announcePoint(segment.point1Ref);\r\n }\r\n\r\n public override handleLineString3d(lineString: LineString3d) {\r\n this.announcePoints(lineString.packedPoints);\r\n }\r\n\r\n private _strokeOptions?: StrokeOptions;\r\n private initStrokeOptions() {\r\n // TODO: compute the exact extrema; until then stroke aggressively\r\n if (undefined === this._strokeOptions) {\r\n this._strokeOptions = new StrokeOptions();\r\n this._strokeOptions.angleTol = Angle.createDegrees(1);\r\n }\r\n }\r\n public override handleBSplineCurve3d(bcurve: BSplineCurve3d) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n public override handleBSplineCurve3dH(bcurve: BSplineCurve3dH) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n\r\n private _sineCosinePolynomial?: SineCosinePolynomial;\r\n private _workPoint?: Point3d;\r\n public override handleArc3d(g: Arc3d) {\r\n this._sineCosinePolynomial = g.getPlaneAltitudeSineCosinePolynomial(this.plane, this._sineCosinePolynomial);\r\n let radians = this._sineCosinePolynomial.referenceMinMaxRadians();\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n radians += Math.PI;\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n this.announcePoint((this._workPoint = g.startPoint(this._workPoint)));\r\n this.announcePoint((this._workPoint = g.endPoint(this._workPoint)));\r\n }\r\n\r\n private static findExtremesInDirection(geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d): PlaneAltitudeRangeContext | undefined {\r\n const origin = direction instanceof Ray3d ? direction.origin : Point3d.createZero();\r\n const vector = direction instanceof Ray3d ? direction.direction : direction;\r\n const plane = Plane3dByOriginAndUnitNormal.create(origin, vector); // vector is normalized, so altitudes are distances\r\n if (plane) {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n if (geometry instanceof GeometryQuery) {\r\n geometry.dispatchToGeometryHandler(context);\r\n } else if (geometry instanceof GrowableXYZArray) {\r\n context.announcePoints(geometry);\r\n } else {\r\n for (const pt of geometry)\r\n context.announcePoint(pt);\r\n }\r\n return context;\r\n }\r\n return undefined;\r\n }\r\n /** Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction,\r\n * and return points at min and max altitude, packed into a `LineSegment3d`.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremePointsInDirection(geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: LineSegment3d): LineSegment3d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && context.highPoint && context.lowPoint)\r\n return LineSegment3d.create(context.lowPoint, context.highPoint, lowHigh);\r\n return undefined;\r\n }\r\n /** Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction,\r\n * and return the min and max altitudes, packed into a Range1d.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeAltitudesInDirection(geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && !context.range.isNull)\r\n return Range1d.createFrom(context.range, lowHigh);\r\n return undefined;\r\n }\r\n /** Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeFractionsAlongDirection(geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\r\n const range = this.findExtremeAltitudesInDirection(geometry, direction, lowHigh);\r\n if (undefined !== range) {\r\n const mag = (direction instanceof Vector3d) ? direction.magnitude() : direction.direction.magnitude();\r\n const scaleToFraction = Geometry.conditionalDivideCoordinate(1.0, mag);\r\n if (undefined !== scaleToFraction) {\r\n range.low *= scaleToFraction;\r\n range.high *= scaleToFraction;\r\n return range;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"PlaneAltitudeRangeContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/PlaneAltitudeRangeContext.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 Curve\r\n */\r\n\r\nimport { BSplineCurve3d } from \"../../bspline/BSplineCurve\";\r\nimport { BSplineCurve3dH } from \"../../bspline/BSplineCurve3dH\";\r\nimport { Geometry, PlaneAltitudeEvaluator } from \"../../Geometry\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\nimport { RecurseToCurvesGeometryHandler } from \"../../geometry3d/GeometryHandler\";\r\nimport { GrowableXYZArray } from \"../../geometry3d/GrowableXYZArray\";\r\nimport { Plane3dByOriginAndUnitNormal } from \"../../geometry3d/Plane3dByOriginAndUnitNormal\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Range1d } from \"../../geometry3d/Range\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { SineCosinePolynomial } from \"../../numerics/Polynomials\";\r\nimport { Arc3d } from \"../Arc3d\";\r\nimport { GeometryQuery } from \"../GeometryQuery\";\r\nimport { LineSegment3d } from \"../LineSegment3d\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { StrokeOptions } from \"../StrokeOptions\";\r\n\r\n/**\r\n * Accumulator context for searching for extrema of geometry along a plane.\r\n * @internal\r\n */\r\nexport class PlaneAltitudeRangeContext extends RecurseToCurvesGeometryHandler {\r\n public plane: PlaneAltitudeEvaluator;\r\n public range: Range1d;\r\n public lowPoint: Point3d | undefined;\r\n public highPoint: Point3d | undefined;\r\n private constructor(plane: PlaneAltitudeEvaluator) {\r\n super();\r\n this.plane = plane;\r\n this.range = Range1d.createNull();\r\n this.resetRange();\r\n }\r\n\r\n public resetRange() {\r\n this.range.setNull();\r\n }\r\n\r\n public announcePoint(point: Point3d) {\r\n const h = this.plane.altitude(point);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = point.clone(this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = point.clone(this.highPoint);\r\n }\r\n\r\n public announcePoints(points: GrowableXYZArray) {\r\n for (let i = 0; i < points.length; i++) {\r\n const h = points.evaluateUncheckedIndexPlaneAltitude(i, this.plane);\r\n if (this.range.extendLow(h))\r\n this.lowPoint = points.getPoint3dAtUncheckedPointIndex(i, this.lowPoint);\r\n if (this.range.extendHigh(h))\r\n this.highPoint = points.getPoint3dAtUncheckedPointIndex(i, this.highPoint);\r\n }\r\n }\r\n\r\n public static createCapture(plane: PlaneAltitudeEvaluator): PlaneAltitudeRangeContext {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n return context;\r\n }\r\n\r\n public override handleLineSegment3d(segment: LineSegment3d) {\r\n this.announcePoint(segment.point0Ref);\r\n this.announcePoint(segment.point1Ref);\r\n }\r\n\r\n public override handleLineString3d(lineString: LineString3d) {\r\n this.announcePoints(lineString.packedPoints);\r\n }\r\n\r\n private _strokeOptions?: StrokeOptions;\r\n\r\n private initStrokeOptions() {\r\n // TODO: compute the exact extrema; until then stroke aggressively\r\n if (undefined === this._strokeOptions) {\r\n this._strokeOptions = new StrokeOptions();\r\n this._strokeOptions.angleTol = Angle.createDegrees(1);\r\n }\r\n }\r\n\r\n public override handleBSplineCurve3d(bcurve: BSplineCurve3d) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n\r\n public override handleBSplineCurve3dH(bcurve: BSplineCurve3dH) {\r\n // ugh. The point MUST be on the curve -- usual excess-range of poles is not ok.\r\n this.initStrokeOptions();\r\n const ls = LineString3d.create();\r\n bcurve.emitStrokes(ls, this._strokeOptions);\r\n this.handleLineString3d(ls);\r\n }\r\n\r\n private _sineCosinePolynomial?: SineCosinePolynomial;\r\n\r\n private _workPoint?: Point3d;\r\n\r\n public override handleArc3d(g: Arc3d) {\r\n this._sineCosinePolynomial = g.getPlaneAltitudeSineCosinePolynomial(this.plane, this._sineCosinePolynomial);\r\n let radians = this._sineCosinePolynomial.referenceMinMaxRadians();\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n radians += Math.PI;\r\n if (g.sweep.isRadiansInSweep(radians))\r\n this.announcePoint((this._workPoint = g.radiansToPoint(radians, this._workPoint)));\r\n this.announcePoint((this._workPoint = g.startPoint(this._workPoint)));\r\n this.announcePoint((this._workPoint = g.endPoint(this._workPoint)));\r\n }\r\n\r\n private static findExtremesInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d\r\n ): PlaneAltitudeRangeContext | undefined {\r\n const origin = direction instanceof Ray3d ? direction.origin : Point3d.createZero();\r\n const vector = direction instanceof Ray3d ? direction.direction : direction;\r\n const plane = Plane3dByOriginAndUnitNormal.create(origin, vector); // vector is normalized, so altitudes are distances\r\n if (plane) {\r\n const context = new PlaneAltitudeRangeContext(plane);\r\n if (geometry instanceof GeometryQuery) {\r\n geometry.dispatchToGeometryHandler(context);\r\n } else if (geometry instanceof GrowableXYZArray) {\r\n context.announcePoints(geometry);\r\n } else {\r\n for (const pt of geometry)\r\n context.announcePoint(pt);\r\n }\r\n return context;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and\r\n * return points at min and max altitude, packed into a `LineSegment3d`.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremePointsInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: LineSegment3d\r\n ): LineSegment3d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && context.highPoint && context.lowPoint)\r\n return LineSegment3d.create(context.lowPoint, context.highPoint, lowHigh);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute altitudes for the geometry (via dispatch) over the plane defined by the given direction, and return\r\n * the min and max altitudes, packed into a Range1d.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray on which to project the instance. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeAltitudesInDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d\r\n ): Range1d | undefined {\r\n const context = this.findExtremesInDirection(geometry, direction);\r\n if (context && !context.range.isNull)\r\n return Range1d.createFrom(context.range, lowHigh);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Project geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\r\n * @param geometry geometry to project\r\n * @param direction vector or ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with\r\n * zero origin.\r\n * @param lowHigh optional receiver for output\r\n */\r\n public static findExtremeFractionsAlongDirection(\r\n geometry: GeometryQuery | GrowableXYZArray | Point3d[], direction: Vector3d | Ray3d, lowHigh?: Range1d\r\n ): Range1d | undefined {\r\n const range = this.findExtremeAltitudesInDirection(geometry, direction, lowHigh);\r\n if (undefined !== range) {\r\n const mag = (direction instanceof Vector3d) ? direction.magnitude() : direction.direction.magnitude();\r\n const scaleToFraction = Geometry.conditionalDivideCoordinate(1.0, mag);\r\n if (undefined !== scaleToFraction) {\r\n range.low *= scaleToFraction;\r\n range.high *= scaleToFraction;\r\n return range;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SumLengthsContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/SumLengthsContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,uBAAuB;IAC5D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO;
|
|
1
|
+
{"version":3,"file":"SumLengthsContext.d.ts","sourceRoot":"","sources":["../../../../src/curve/internalContexts/SumLengthsContext.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,uBAAuB;IAC5D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO;WAIO,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;IAKzC,sBAAsB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;CAGrG"}
|
|
@@ -11,7 +11,10 @@ const CurveProcessor_1 = require("../CurveProcessor");
|
|
|
11
11
|
* @internal
|
|
12
12
|
*/
|
|
13
13
|
class SumLengthsContext extends CurveProcessor_1.RecursiveCurveProcessor {
|
|
14
|
-
constructor() {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this._sum = 0.0;
|
|
17
|
+
}
|
|
15
18
|
static sumLengths(target) {
|
|
16
19
|
const context = new SumLengthsContext();
|
|
17
20
|
target.announceToCurveProcessor(context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SumLengthsContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/SumLengthsContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAO/F,sDAA4D;AAE5D;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,wCAAuB;IAE5D,
|
|
1
|
+
{"version":3,"file":"SumLengthsContext.js","sourceRoot":"","sources":["../../../../src/curve/internalContexts/SumLengthsContext.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAO/F,sDAA4D;AAE5D;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,wCAAuB;IAE5D;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IACM,MAAM,CAAC,UAAU,CAAC,MAAuB;QAC9C,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACxC,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IACe,sBAAsB,CAAC,cAA8B,EAAE,cAAsB;QAC3F,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;CACF;AAdD,8CAcC","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 Curve\r\n */\r\nimport { CurveCollection } from \"../CurveCollection\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { RecursiveCurveProcessor } from \"../CurveProcessor\";\r\n\r\n/**\r\n * Algorithmic class: Sum lengths of curves\r\n * @internal\r\n */\r\nexport class SumLengthsContext extends RecursiveCurveProcessor {\r\n private _sum: number;\r\n private constructor() {\r\n super();\r\n this._sum = 0.0;\r\n }\r\n public static sumLengths(target: CurveCollection): number {\r\n const context = new SumLengthsContext();\r\n target.announceToCurveProcessor(context);\r\n return context._sum;\r\n }\r\n public override announceCurvePrimitive(curvePrimitive: CurvePrimitive, _indexInParent: number): void {\r\n this._sum += curvePrimitive.curveLength();\r\n }\r\n}\r\n"]}
|