cesium-to-three 0.1.0
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/README.md +226 -0
- package/dist/arrow.js +523 -0
- package/dist/arrow.js.map +1 -0
- package/dist/ground.js +34 -0
- package/dist/ground.js.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/text-primitive-Ci0sbuh1.js +60066 -0
- package/dist/text-primitive-Ci0sbuh1.js.map +1 -0
- package/dist/types/cesium-three-ground.d.ts +2 -0
- package/dist/types/cesium-three-ground.d.ts.map +1 -0
- package/dist/types/lib/arrow/arrow-curves.d.ts +73 -0
- package/dist/types/lib/arrow/arrow-curves.d.ts.map +1 -0
- package/dist/types/lib/arrow/arrow-geometry.d.ts +140 -0
- package/dist/types/lib/arrow/arrow-geometry.d.ts.map +1 -0
- package/dist/types/lib/arrow/arrow-polygon.d.ts +87 -0
- package/dist/types/lib/arrow/arrow-polygon.d.ts.map +1 -0
- package/dist/types/lib/arrow/arrow-types.d.ts +152 -0
- package/dist/types/lib/arrow/arrow-types.d.ts.map +1 -0
- package/dist/types/lib/arrow/index.d.ts +8 -0
- package/dist/types/lib/arrow/index.d.ts.map +1 -0
- package/dist/types/lib/arrow/shapes/assault-direction-arrow.d.ts +20 -0
- package/dist/types/lib/arrow/shapes/assault-direction-arrow.d.ts.map +1 -0
- package/dist/types/lib/arrow/shapes/attack-arrow.d.ts +56 -0
- package/dist/types/lib/arrow/shapes/attack-arrow.d.ts.map +1 -0
- package/dist/types/lib/arrow/shapes/curved-arrow.d.ts +10 -0
- package/dist/types/lib/arrow/shapes/curved-arrow.d.ts.map +1 -0
- package/dist/types/lib/arrow/shapes/fine-arrow.d.ts +23 -0
- package/dist/types/lib/arrow/shapes/fine-arrow.d.ts.map +1 -0
- package/dist/types/lib/arrow/shapes/swallowtail-attack-arrow.d.ts +12 -0
- package/dist/types/lib/arrow/shapes/swallowtail-attack-arrow.d.ts.map +1 -0
- package/dist/types/lib/ground/cesium-ground-adapter.d.ts +9 -0
- package/dist/types/lib/ground/cesium-ground-adapter.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-construct-extruded.d.ts +62 -0
- package/dist/types/lib/ground/circle/circle-construct-extruded.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-extents.d.ts +23 -0
- package/dist/types/lib/ground/circle/circle-extents.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-options.d.ts +59 -0
- package/dist/types/lib/ground/circle/circle-options.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-positions.d.ts +56 -0
- package/dist/types/lib/ground/circle/circle-positions.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-shadow-volume.d.ts +24 -0
- package/dist/types/lib/ground/circle/circle-shadow-volume.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-top-bottom.d.ts +70 -0
- package/dist/types/lib/ground/circle/circle-top-bottom.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-top-indices.d.ts +28 -0
- package/dist/types/lib/ground/circle/circle-top-indices.d.ts.map +1 -0
- package/dist/types/lib/ground/circle/circle-wall-construction.d.ts +75 -0
- package/dist/types/lib/ground/circle/circle-wall-construction.d.ts.map +1 -0
- package/dist/types/lib/ground/classification.d.ts +124 -0
- package/dist/types/lib/ground/classification.d.ts.map +1 -0
- package/dist/types/lib/ground/constants.d.ts +26 -0
- package/dist/types/lib/ground/constants.d.ts.map +1 -0
- package/dist/types/lib/ground/depth.d.ts +63 -0
- package/dist/types/lib/ground/depth.d.ts.map +1 -0
- package/dist/types/lib/ground/geometry.d.ts +12 -0
- package/dist/types/lib/ground/geometry.d.ts.map +1 -0
- package/dist/types/lib/ground/index.d.ts +6 -0
- package/dist/types/lib/ground/index.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-arrowhead.d.ts +67 -0
- package/dist/types/lib/ground/line/line-arrowhead.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-densify.d.ts +35 -0
- package/dist/types/lib/ground/line/line-densify.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-geometry-normals.d.ts +49 -0
- package/dist/types/lib/ground/line/line-geometry-normals.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-options.d.ts +54 -0
- package/dist/types/lib/ground/line/line-options.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-preprocess.d.ts +12 -0
- package/dist/types/lib/ground/line/line-preprocess.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-segment-attributes.d.ts +24 -0
- package/dist/types/lib/ground/line/line-segment-attributes.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-shadow-volume.d.ts +25 -0
- package/dist/types/lib/ground/line/line-shadow-volume.d.ts.map +1 -0
- package/dist/types/lib/ground/line/line-types.d.ts +74 -0
- package/dist/types/lib/ground/line/line-types.d.ts.map +1 -0
- package/dist/types/lib/ground/materials.d.ts +69 -0
- package/dist/types/lib/ground/materials.d.ts.map +1 -0
- package/dist/types/lib/ground/math/cartographic.d.ts +27 -0
- package/dist/types/lib/ground/math/cartographic.d.ts.map +1 -0
- package/dist/types/lib/ground/math/constants.d.ts +20 -0
- package/dist/types/lib/ground/math/constants.d.ts.map +1 -0
- package/dist/types/lib/ground/math/ellipsoid-geodesic.d.ts +93 -0
- package/dist/types/lib/ground/math/ellipsoid-geodesic.d.ts.map +1 -0
- package/dist/types/lib/ground/math/ellipsoid-rhumb-line.d.ts +45 -0
- package/dist/types/lib/ground/math/ellipsoid-rhumb-line.d.ts.map +1 -0
- package/dist/types/lib/ground/math/ellipsoid.d.ts +94 -0
- package/dist/types/lib/ground/math/ellipsoid.d.ts.map +1 -0
- package/dist/types/lib/ground/math/enu-frame.d.ts +27 -0
- package/dist/types/lib/ground/math/enu-frame.d.ts.map +1 -0
- package/dist/types/lib/ground/math/matrix4-helpers.d.ts +20 -0
- package/dist/types/lib/ground/math/matrix4-helpers.d.ts.map +1 -0
- package/dist/types/lib/ground/math/rte-encoding.d.ts +51 -0
- package/dist/types/lib/ground/math/rte-encoding.d.ts.map +1 -0
- package/dist/types/lib/ground/math/vec3-helpers.d.ts +50 -0
- package/dist/types/lib/ground/math/vec3-helpers.d.ts.map +1 -0
- package/dist/types/lib/ground/math/wgs84-helpers.d.ts +22 -0
- package/dist/types/lib/ground/math/wgs84-helpers.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/ellipsoid-tangent-plane.d.ts +71 -0
- package/dist/types/lib/ground/polygon/ellipsoid-tangent-plane.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-cap-construction.d.ts +59 -0
- package/dist/types/lib/ground/polygon/polygon-cap-construction.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-construct-extruded.d.ts +44 -0
- package/dist/types/lib/ground/polygon/polygon-construct-extruded.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-extents.d.ts +24 -0
- package/dist/types/lib/ground/polygon/polygon-extents.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-helpers.d.ts +76 -0
- package/dist/types/lib/ground/polygon/polygon-helpers.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-hierarchy.d.ts +60 -0
- package/dist/types/lib/ground/polygon/polygon-hierarchy.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-offset.d.ts +15 -0
- package/dist/types/lib/ground/polygon/polygon-offset.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-options.d.ts +41 -0
- package/dist/types/lib/ground/polygon/polygon-options.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-rectangle.d.ts +30 -0
- package/dist/types/lib/ground/polygon/polygon-rectangle.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-rings.d.ts +64 -0
- package/dist/types/lib/ground/polygon/polygon-rings.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-shadow-volume.d.ts +39 -0
- package/dist/types/lib/ground/polygon/polygon-shadow-volume.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-style-points.d.ts +29 -0
- package/dist/types/lib/ground/polygon/polygon-style-points.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-subdivide-line.d.ts +93 -0
- package/dist/types/lib/ground/polygon/polygon-subdivide-line.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-subdivide-triangle.d.ts +53 -0
- package/dist/types/lib/ground/polygon/polygon-subdivide-triangle.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/polygon-wall-construction.d.ts +77 -0
- package/dist/types/lib/ground/polygon/polygon-wall-construction.d.ts.map +1 -0
- package/dist/types/lib/ground/polygon/triangulation.d.ts +40 -0
- package/dist/types/lib/ground/polygon/triangulation.d.ts.map +1 -0
- package/dist/types/lib/ground/primitives.d.ts +262 -0
- package/dist/types/lib/ground/primitives.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-attributes.d.ts +29 -0
- package/dist/types/lib/ground/rectangle/rectangle-attributes.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-construct-cap.d.ts +53 -0
- package/dist/types/lib/ground/rectangle/rectangle-construct-cap.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-construct-extruded.d.ts +35 -0
- package/dist/types/lib/ground/rectangle/rectangle-construct-extruded.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-debug.d.ts +22 -0
- package/dist/types/lib/ground/rectangle/rectangle-debug.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-extents.d.ts +33 -0
- package/dist/types/lib/ground/rectangle/rectangle-extents.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-grid.d.ts +76 -0
- package/dist/types/lib/ground/rectangle/rectangle-grid.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-helpers.d.ts +103 -0
- package/dist/types/lib/ground/rectangle/rectangle-helpers.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-options.d.ts +21 -0
- package/dist/types/lib/ground/rectangle/rectangle-options.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-radians.d.ts +51 -0
- package/dist/types/lib/ground/rectangle/rectangle-radians.d.ts.map +1 -0
- package/dist/types/lib/ground/rectangle/rectangle-shadow-volume.d.ts +28 -0
- package/dist/types/lib/ground/rectangle/rectangle-shadow-volume.d.ts.map +1 -0
- package/dist/types/lib/ground/terrain-heights.d.ts +65 -0
- package/dist/types/lib/ground/terrain-heights.d.ts.map +1 -0
- package/dist/types/lib/ground/terrain-log-depth.d.ts +32 -0
- package/dist/types/lib/ground/terrain-log-depth.d.ts.map +1 -0
- package/dist/types/lib/ground/text/index.d.ts +7 -0
- package/dist/types/lib/ground/text/index.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-canvas.d.ts +22 -0
- package/dist/types/lib/ground/text/text-canvas.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-color.d.ts +28 -0
- package/dist/types/lib/ground/text/text-color.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-construct-extruded.d.ts +27 -0
- package/dist/types/lib/ground/text/text-construct-extruded.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-defaults.d.ts +12 -0
- package/dist/types/lib/ground/text/text-defaults.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-extents.d.ts +19 -0
- package/dist/types/lib/ground/text/text-extents.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-layout.d.ts +18 -0
- package/dist/types/lib/ground/text/text-layout.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-options.d.ts +26 -0
- package/dist/types/lib/ground/text/text-options.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-placement.d.ts +34 -0
- package/dist/types/lib/ground/text/text-placement.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-primitive.d.ts +74 -0
- package/dist/types/lib/ground/text/text-primitive.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-shadow-volume.d.ts +21 -0
- package/dist/types/lib/ground/text/text-shadow-volume.d.ts.map +1 -0
- package/dist/types/lib/ground/text/text-types.d.ts +156 -0
- package/dist/types/lib/ground/text/text-types.d.ts.map +1 -0
- package/dist/types/lib/ground/types.d.ts +484 -0
- package/dist/types/lib/ground/types.d.ts.map +1 -0
- package/dist/types/lib/ground/validation.d.ts +8 -0
- package/dist/types/lib/ground/validation.d.ts.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { validateCesiumGroundRenderer } from './validation';
|
|
2
|
+
export { CesiumGlobeDepth, createCesiumEllipsoidDepthMeshes } from './depth';
|
|
3
|
+
export { CesiumClassificationPrimitive } from './classification';
|
|
4
|
+
export { CesiumGroundCirclePrimitive, CesiumGroundPointPrimitive, CesiumGroundPolygonPrimitive, CesiumGroundPolylinePrimitive, CesiumGroundRectanglePrimitive, } from './primitives';
|
|
5
|
+
export { longitudeLatitudeFromCenterOffsetsMeters, rectangleDegreesFromCenterSizeMeters, rectangleDegreesFromLonLatPoints, rectangleMeterSizeFromDegrees, } from './rectangle/rectangle-helpers';
|
|
6
|
+
export { wgs84NormalFromDegrees, wgs84PositionFromDegrees, } from './math/wgs84-helpers';
|
|
7
|
+
export { initializeApproximateTerrainHeights, isApproximateTerrainHeightsReady, getTerrainMinMaxHeightsForRectangle, } from './terrain-heights';
|
|
8
|
+
export { applyCesiumLogDepthToMaterial, terrainLogDepthUniforms, updateTerrainLogDepthUniforms, } from './terrain-log-depth';
|
|
9
|
+
//# sourceMappingURL=cesium-ground-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cesium-ground-adapter.d.ts","sourceRoot":"","sources":["../../../../src/lib/ground/cesium-ground-adapter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,gCAAgC,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EACN,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,GAC9B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACN,wCAAwC,EACxC,oCAAoC,EACpC,gCAAgC,EAChC,6BAA6B,GAC7B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACN,sBAAsB,EACtB,wBAAwB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,mCAAmC,EACnC,gCAAgC,EAChC,mCAAmC,GACnC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,GAC7B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Vector3 } from 'three';
|
|
2
|
+
/**
|
|
3
|
+
* Circle 挤出 prism 装配结果。
|
|
4
|
+
*
|
|
5
|
+
* 排列约定(与 polygon/rectangle 阶段同形):
|
|
6
|
+
* positions = [
|
|
7
|
+
* <topBottom: top 半 + bot 半 segregated> (高度 max/min,fill 网格)
|
|
8
|
+
* <wall: top 半 + bot 半 segregated> (高度 max/min,outer 圈)
|
|
9
|
+
* ]
|
|
10
|
+
* extrudeDirection 同序,Float32,与 positions 同长。
|
|
11
|
+
*
|
|
12
|
+
* indices = [
|
|
13
|
+
* <topBottom 索引> (top + bottom,bottom 加 posLength 偏移)
|
|
14
|
+
* <wall 索引 + topBottomVertexCount> (wall 偏移到合并后 vertex 空间)
|
|
15
|
+
* ]
|
|
16
|
+
*
|
|
17
|
+
* 默认 demo 场景(centerLon=86.99°, lat=27.99°, radius=1115m, granularity=π/180):
|
|
18
|
+
* - numPts(if-branch 后)= 12
|
|
19
|
+
* - fill 顶点 = 2 × 12 × 14 = 336;outer 顶点 = 12 × 4 = 48
|
|
20
|
+
* - topBottomVertexCount = 672(2 × 336)
|
|
21
|
+
* - wallVertexCount = 96(2 × 48)
|
|
22
|
+
* - totalVertexCount = 768
|
|
23
|
+
* - topBottomIndices 长度 = 2 × (12 × 12 × 13 - 6) = 2 × 1866 = 3732
|
|
24
|
+
* - wallIndices 长度 = 48 × 6 = 288
|
|
25
|
+
* - 总索引 = 3732 + 288 = 4020
|
|
26
|
+
*/
|
|
27
|
+
export interface ExtrudedCircleResult {
|
|
28
|
+
/** ECEF 顶点 Float64,长度 = totalVertexCount × 3 */
|
|
29
|
+
positions: Float64Array;
|
|
30
|
+
/** 顶点 extrudeDirection Float32,与 positions 同长 */
|
|
31
|
+
extrudeDirection: Float32Array;
|
|
32
|
+
/** 三角形索引 Uint16/Uint32(根据顶点数自动选择) */
|
|
33
|
+
indices: Uint16Array | Uint32Array;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 装配 Circle 挤出 prism。
|
|
37
|
+
*
|
|
38
|
+
* 7 步算法(逐字对齐 Cesium computeExtrudedEllipse L746-839,
|
|
39
|
+
* 跳过 BoundingSphere 因为本期 BufferGeometry 不消费):
|
|
40
|
+
*
|
|
41
|
+
* 步骤 1 · computeEllipsePositions(addFill=true, addEdge=true)
|
|
42
|
+
* 步骤 2 · computeTopBottomAttributes(fill.positions, options, extrude=true)
|
|
43
|
+
* 步骤 3 · topIndices(numPts) ← top 索引模板
|
|
44
|
+
* 步骤 4 · 镜像 bottom 索引:winding 反转 (i, i+1, i+2 → i+2, i+1, i)
|
|
45
|
+
* + 偏移 posLength(= fill.positions.length / 3)
|
|
46
|
+
* → topBottomIndices = createTypedArray((posLength × 2) / 3, indices)
|
|
47
|
+
* 步骤 5 · computeWallAttributes(fill.outerPositions, options)
|
|
48
|
+
* 步骤 6 · computeWallIndices(fill.outerPositions) ← 墙索引模板
|
|
49
|
+
* → wallIndices = createTypedArray((outer.length × 2) / 3, wallIdx)
|
|
50
|
+
* 步骤 7 · combineInstances:positions / extrudeDirection 数组拼接;
|
|
51
|
+
* wall 索引 += topBottomVertexCount
|
|
52
|
+
*
|
|
53
|
+
* @param centerECEF 已 scaleToGeodeticSurface 的 center(由 caller 保证)。
|
|
54
|
+
* @param radius 圆半径,米。
|
|
55
|
+
* @param granularity caller 原始 granularity(未 × 8)。
|
|
56
|
+
* @param rotation stRotation 弧度。
|
|
57
|
+
* @param minimumHeight 底面高度,米。
|
|
58
|
+
* @param maximumHeight 顶面高度,米。
|
|
59
|
+
* @returns positions + extrudeDirection + indices 三元组。
|
|
60
|
+
*/
|
|
61
|
+
export declare function constructExtrudedCircleShadowVolume(centerECEF: Vector3, radius: number, granularity: number, rotation: number, minimumHeight: number, maximumHeight: number): ExtrudedCircleResult;
|
|
62
|
+
//# sourceMappingURL=circle-construct-extruded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-construct-extruded.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-construct-extruded.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAYrC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,oBAAoB;IACpC,gDAAgD;IAChD,SAAS,EAAE,YAAY,CAAC;IAExB,iDAAiD;IACjD,gBAAgB,EAAE,YAAY,CAAC;IAE/B,qCAAqC;IACrC,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mCAAmC,CAClD,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACnB,oBAAoB,CAsItB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Vector2 } from 'three';
|
|
2
|
+
import type { PlanarExtents } from '../types';
|
|
3
|
+
export interface CirclePlanarExtents {
|
|
4
|
+
extents: PlanarExtents;
|
|
5
|
+
centerMeters: Vector2;
|
|
6
|
+
fillRadiusMeters: number;
|
|
7
|
+
renderRadiusMeters: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 计算 Cesium ShadowVolumeAppearance 使用的平面米制坐标框架。
|
|
11
|
+
*
|
|
12
|
+
* 圆形 mesh 本身仍由 Cesium CircleGeometry 生成。这个辅助函数只提供共享
|
|
13
|
+
* classification shader 所需的 Three 侧 batch-table uniform。局部坐标框架以
|
|
14
|
+
* WGS84 圆心为中心,并覆盖渲染半径,包含可选描边带。
|
|
15
|
+
*
|
|
16
|
+
* @param centerLongitudeDegrees 圆心经度,单位度。
|
|
17
|
+
* @param centerLatitudeDegrees 圆心纬度,单位度。
|
|
18
|
+
* @param fillRadiusMeters 公开 Cesium 圆半径,单位米。
|
|
19
|
+
* @param renderRadiusMeters shadow volume 使用的半径,包含描边。
|
|
20
|
+
* @returns 平面 extents,以及同一米制框架中的圆形样式 uniform。
|
|
21
|
+
*/
|
|
22
|
+
export declare function computeCirclePlanarExtents(centerLongitudeDegrees: number, centerLatitudeDegrees: number, fillRadiusMeters: number, renderRadiusMeters: number): CirclePlanarExtents;
|
|
23
|
+
//# sourceMappingURL=circle-extents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-extents.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-extents.ts"],"names":[],"mappings":"AASA,OAAO,EAAW,OAAO,EAAoB,MAAM,OAAO,CAAC;AAO3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC3B;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACzC,sBAAsB,EAAE,MAAM,EAC9B,qBAAqB,EAAE,MAAM,EAC7B,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,GACxB,mBAAmB,CAgDrB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circle shadow volume 几何构造选项。
|
|
3
|
+
*
|
|
4
|
+
* 与矩形 / 多边形对应类型同形:核心字段(centerLongitudeDegrees、
|
|
5
|
+
* centerLatitudeDegrees、radiusMeters)必填,其它字段可选(由 caller 留空
|
|
6
|
+
* 时使用本文件下方的默认值常量)。
|
|
7
|
+
*
|
|
8
|
+
* 注意:plot-spec 层(primitives.ts:CesiumGroundCirclePrimitiveOptions)
|
|
9
|
+
* 已对 `granularityRadians` 做 MIN/MAX 范围 clamp、对 radius 做下限 1.0 处理;
|
|
10
|
+
* 本几何模块只做防御性"> 0 / 有限性"校验,不重复 clamp 逻辑。
|
|
11
|
+
*/
|
|
12
|
+
export interface CircleShadowVolumeOptions {
|
|
13
|
+
/** Circle 中心经度(度,范围 [-180, 180]) */
|
|
14
|
+
centerLongitudeDegrees: number;
|
|
15
|
+
/** Circle 中心纬度(度,范围 [-90, 90]) */
|
|
16
|
+
centerLatitudeDegrees: number;
|
|
17
|
+
/** 圆半径,米(必须 > 0;含 stroke 外扩部分由 caller 在传入前算好) */
|
|
18
|
+
radiusMeters: number;
|
|
19
|
+
/**
|
|
20
|
+
* 网格精度,弧度。决定 numPts(第一象限内的"环"数)。
|
|
21
|
+
* 默认 CIRCLE_DEFAULT_GRANULARITY = π/180(1°)。
|
|
22
|
+
*
|
|
23
|
+
* 重要:Cesium 在 EllipseGeometryLibrary.computeEllipsePositions 内部
|
|
24
|
+
* 对此值 × 8(R4 缩放因子,见 refactor-plan/circle/05-quadrant-traversal.md)。
|
|
25
|
+
* 本期严格保留 ×8 行为,所以 caller 传入"原始"granularity,内部自动放大。
|
|
26
|
+
*/
|
|
27
|
+
granularityRadians?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Cesium 的 stRotation(弧度)。在 POSITION_ONLY 路径下不影响纹理输出,
|
|
30
|
+
* 但**影响 pointOnEllipsoid 的 azimuth = theta + rotation 计算**,
|
|
31
|
+
* 顶点 ECEF 位置因此随 rotation 旋转(R3)。默认 0。
|
|
32
|
+
*/
|
|
33
|
+
stRotationRadians?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Shadow volume 底面高度,米。默认 -CESIUM_GLOBE_MINIMUM_ALTITUDE = -55000。
|
|
36
|
+
* 选择 ±55km 是为了让 shadow volume 完整包围地形(Cesium 同名常量)。
|
|
37
|
+
*/
|
|
38
|
+
minimumHeight?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Shadow volume 顶面高度,米。默认 +CESIUM_GLOBE_MINIMUM_ALTITUDE = +55000。
|
|
41
|
+
*/
|
|
42
|
+
maximumHeight?: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Circle 默认网格精度,弧度。
|
|
46
|
+
*
|
|
47
|
+
* 数值 = π/180 ≈ 0.01745329 rad(1°)。
|
|
48
|
+
*
|
|
49
|
+
* 这是 caller 传入的"原始值",Cesium / 本期复刻路径在
|
|
50
|
+
* `computeCircleFillPositions` 内部对它 × 8.0(R4 因子)以匹配椭圆弧长
|
|
51
|
+
* 而非球面弧长 — 因此实际生效粒度约 8°,默认 demo 在赤道半径下
|
|
52
|
+
* `numPts = 1 + ceil(π/2 / 8°) = 12`,fill 网格 ≈ 336 顶点。
|
|
53
|
+
*
|
|
54
|
+
* 与矩形 / 多边形默认值(π/180/32 ≈ 0.0312°)不同 — circle 默认值故意
|
|
55
|
+
* 偏粗,匹配 Cesium CircleGeometry 历史默认行为。caller 若需要更细网格,
|
|
56
|
+
* 应在 plot-spec 层显式传入 granularityRadians = π/180/8 之类。
|
|
57
|
+
*/
|
|
58
|
+
export declare const CIRCLE_DEFAULT_GRANULARITY: number;
|
|
59
|
+
//# sourceMappingURL=circle-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-options.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-options.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAAyB;IACzC,oCAAoC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,kCAAkC;IAClC,qBAAqB,EAAE,MAAM,CAAC;IAE9B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,QAAkB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Vector3 } from 'three';
|
|
2
|
+
/**
|
|
3
|
+
* Circle fill 网格 + 外圈点的返回结构。
|
|
4
|
+
*
|
|
5
|
+
* 注意 Cesium 原版 `computeEllipsePositions` 返回 `new Array(...)` 的
|
|
6
|
+
* 标量数组,本期改用 Float64Array 以提升 V8 优化与内存效率。
|
|
7
|
+
* **数值上完全一致**:JS Array<number> 与 Float64Array 都用 IEEE-754
|
|
8
|
+
* Float64 存储,写入读取无差异。
|
|
9
|
+
*/
|
|
10
|
+
export interface CircleFillResult {
|
|
11
|
+
/**
|
|
12
|
+
* Fill 网格扁平 ECEF 顶点数组,长度 = numPts × (numPts + 2) × 2 × 3。
|
|
13
|
+
*
|
|
14
|
+
* 排列:4 region 顺序(北顶点 → 东半 → 西半 → 南顶点),每个 region
|
|
15
|
+
* 内按 ring 0..numPts 顺序写入 (position, interior×(2i), reflected)。
|
|
16
|
+
*/
|
|
17
|
+
positions: Float64Array;
|
|
18
|
+
/**
|
|
19
|
+
* 外圈点扁平 ECEF 数组,长度 = numPts × 4 × 3。
|
|
20
|
+
*
|
|
21
|
+
* 写入策略:左半数组(outerLeftIndex 递增)= 反射点(西半,北→南),
|
|
22
|
+
* 右半数组(outerRightIndex 递减,所以每点先写 z 后 y 后 x)= 原点
|
|
23
|
+
*(东半,南→北)。最终整数组绕圆一圈(西半北→西半南→东半南→东半北)。
|
|
24
|
+
*/
|
|
25
|
+
outerPositions: Float64Array;
|
|
26
|
+
/** 校正后的第一象限环数(可能因 if-branch 比初始 numPts 小)。 */
|
|
27
|
+
numPts: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 计算 Circle fill 网格 + 外圈点。
|
|
31
|
+
*
|
|
32
|
+
* 复刻 Cesium `EllipseGeometryLibrary.computeEllipsePositions(options, true, true)`,
|
|
33
|
+
* 圆形特化 `semiMajorAxis = semiMinorAxis = radius`。
|
|
34
|
+
*
|
|
35
|
+
* 4 region 遍历:
|
|
36
|
+
* - Region 1:最北顶点(theta = π/2),写 1 个 fill + 1 个 outer
|
|
37
|
+
* - Region 2:东半象限主循环(i = 1..numPts),每 i 写 (2i+2) 个 fill +
|
|
38
|
+
* 2 个 outer(原点 + 反射点)
|
|
39
|
+
* - Region 3:西半象限主循环(i = numPts..2,反向),每 i 写 (2(i-1)+2)
|
|
40
|
+
* 个 fill + 2 个 outer
|
|
41
|
+
* - Region 4:最南顶点(theta = -π/2),写 1 个 fill + 1 个 outer
|
|
42
|
+
*
|
|
43
|
+
* 字节级关键(R2/R4):
|
|
44
|
+
* - `granularity × 8.0` 因子在函数内部应用(Cesium L127)
|
|
45
|
+
* - if (theta < 0) numPts 减少分支必须保留(Cesium L145-147)
|
|
46
|
+
* - lerp 路径必须用 `start + (end − start) · t`(R5,见 _cartesianLerp 注释)
|
|
47
|
+
* - outerPositions 写入顺序:左半递增、右半递减(Cesium L171-176)
|
|
48
|
+
*
|
|
49
|
+
* @param center 已 scaleToGeodeticSurface 的 center ECEF。
|
|
50
|
+
* @param radius 圆半径,米(> 0)。
|
|
51
|
+
* @param granularity caller 原始 granularity 弧度(未 × 8;函数内部自动放大)。
|
|
52
|
+
* @param rotation stRotation 弧度(默认 0)。
|
|
53
|
+
* @returns fill + outer + numPts 三元组。
|
|
54
|
+
*/
|
|
55
|
+
export declare function computeCircleFillPositions(center: Vector3, radius: number, granularity: number, rotation: number): CircleFillResult;
|
|
56
|
+
//# sourceMappingURL=circle-positions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-positions.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-positions.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAc,OAAO,EAAE,MAAM,OAAO,CAAC;AAuX5C;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAChC;;;;;OAKG;IACH,SAAS,EAAE,YAAY,CAAC;IAExB;;;;;;OAMG;IACH,cAAc,EAAE,YAAY,CAAC;IAE7B,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACd,gBAAgB,CA8MlB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BufferGeometry } from 'three';
|
|
2
|
+
import { type CircleShadowVolumeOptions } from './circle-options';
|
|
3
|
+
/**
|
|
4
|
+
* 从 CircleShadowVolumeOptions 构造 Three.js BufferGeometry。
|
|
5
|
+
*
|
|
6
|
+
* 7 步流程(逐字匹配 doc 11 节算法):
|
|
7
|
+
* 1. 应用默认值(granularity、stRotation、min/maxHeight)
|
|
8
|
+
* 2. 参数校验(center / radius / granularity / rotation / heights)
|
|
9
|
+
* 3. center degrees → cartographic → ECEF → scaleToGeodeticSurface
|
|
10
|
+
* 4. 调用 constructExtrudedCircleShadowVolume 构 prism:
|
|
11
|
+
* Float64 positions / Float32 extrudeDirection / Uint16-32 indices
|
|
12
|
+
* 5. RTE 编码:Float64 ECEF → 两个 Float32 (high, low) 数组
|
|
13
|
+
* 6. 装配 BufferGeometry:
|
|
14
|
+
* position3DHigh / position3DLow / extrudeDirection / batchId / index
|
|
15
|
+
* 7. computeBoundingSphere(no-op — 没有 'position' attribute,与
|
|
16
|
+
* 矩形 / polygon 阶段行为一致;classification.ts 自己处理 frustum culling)
|
|
17
|
+
*
|
|
18
|
+
* @param options CircleShadowVolumeOptions(center + radius + 可选 granularity/rotation/heights)。
|
|
19
|
+
* @returns BufferGeometry,可直接喂给 classification 或 Three.js Mesh。
|
|
20
|
+
* @throws center 非有限 / radius ≤ 0 / granularity ≤ 0 /
|
|
21
|
+
* maximumHeight ≤ minimumHeight 等参数校验失败。
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildCircleShadowVolumeGeometry(options: CircleShadowVolumeOptions): BufferGeometry;
|
|
24
|
+
//# sourceMappingURL=circle-shadow-volume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-shadow-volume.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-shadow-volume.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAmB,cAAc,EAAW,MAAM,OAAO,CAAC;AAWjE,OAAO,EAEN,KAAK,yBAAyB,EAC9B,MAAM,kBAAkB,CAAC;AAU1B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,+BAA+B,CAC9C,OAAO,EAAE,yBAAyB,GAChC,cAAc,CAyJhB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circle 顶/底面顶点构造结果。
|
|
3
|
+
*
|
|
4
|
+
* Layout:`[top 半 N 个顶点, bot 半 N 个顶点]`(segregated),
|
|
5
|
+
* N = fillPositions.length / 3。
|
|
6
|
+
*
|
|
7
|
+
* 与 polygon 的 interleaved `[top_0, bot_0, top_1, bot_1, ...]` 不同 —
|
|
8
|
+
* Cesium ellipse / circle 路径固有 convention,本期严格保留。
|
|
9
|
+
*/
|
|
10
|
+
export interface CircleTopBottomResult {
|
|
11
|
+
/** ECEF 顶点 Float64,长度 = (fillPositions.length / 3) × 2 × 3 */
|
|
12
|
+
positions: Float64Array;
|
|
13
|
+
/**
|
|
14
|
+
* 顶点 extrudeDirection,Float32,与 positions 同长。
|
|
15
|
+
* - 索引 [0, length):top 半,全 0(顶面不需挤出方向)
|
|
16
|
+
* - 索引 [length, 2·length):bot 半,= -geodeticSurfaceNormal(fillPoint 投影)
|
|
17
|
+
*/
|
|
18
|
+
extrudeDirection: Float32Array;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 把 circle fill 网格扩展为 segregated 顶/底面顶点 + extrudeDirection。
|
|
22
|
+
*
|
|
23
|
+
* 复刻 Cesium `computeTopBottomAttributes(positions, options, extrude=true)`
|
|
24
|
+
* 的 POSITION_ONLY + shadowVolume 子集(裁掉 st / normal / tangent /
|
|
25
|
+
* bitangent / offsetAttribute 分支)。
|
|
26
|
+
*
|
|
27
|
+
* 算法(每个 fillPoint 8 步):
|
|
28
|
+
* 1. position = (fillPositions[i], fillPositions[i+1], fillPositions[i+2])
|
|
29
|
+
* 2. position = scaleToGeodeticSurface(position) ← 原地投到椭球面
|
|
30
|
+
* 3. extrudedPosition = clone(position) ← bot 顶点起点
|
|
31
|
+
* 4. normal = geodeticSurfaceNormal(position)
|
|
32
|
+
* 5. 写入 bot 半 extrudeDirection = -normal(top 半默认 0)
|
|
33
|
+
* 6. scaledNormal = normal × maximumHeight
|
|
34
|
+
* position = position + scaledNormal ← top 顶点
|
|
35
|
+
* 7. scaledNormal = normal × minimumHeight ← 覆盖 scratch
|
|
36
|
+
* extrudedPosition = extrudedPosition + scaledNormal ← bot 顶点
|
|
37
|
+
* 8. 写入 positions:top 半 [i, i+1, i+2] 与 bot 半 [i+length, ...]
|
|
38
|
+
*
|
|
39
|
+
* 字节级关键(V5):
|
|
40
|
+
* - scratch 复用顺序与 Cesium 一致(scratchCartesian3 在 top/bot 处分别
|
|
41
|
+
* 被 multiplyByScalar 覆盖一次)
|
|
42
|
+
* - position 与 extrudedPosition 用各自独立 scratch,确保 top 的
|
|
43
|
+
* `position += maximumHeight·normal` 不影响 bot 的 extrudedPosition
|
|
44
|
+
* - Cesium 中 vertexFormat.position = true 时才走 raisePositionsToHeight 分支;
|
|
45
|
+
* 本期固定 POSITION_ONLY → vertexFormat.position 必为 true,直接展开
|
|
46
|
+
*
|
|
47
|
+
* **注意 Cesium 路径细节**:Cesium `computeTopBottomAttributes` 先在主循环
|
|
48
|
+
* 里跑一遍 shadowVolume 的 extrudeNormals 写入(用 `position = fromArray(...)`
|
|
49
|
+
* 后 `geodeticSurfaceNormal(position, normal)`,**未** scaleToGeodeticSurface),
|
|
50
|
+
* 然后**单独**再走 `raisePositionsToHeight`(在 `raisePositions` 里才 scaleToGeodeticSurface)。
|
|
51
|
+
*
|
|
52
|
+
* 但本期合并为一个循环,在 normal 计算前先 scaleToGeodeticSurface — 这与
|
|
53
|
+
* Cesium 的 `raisePositionsToHeight` 子路径一致(L77),且因 fillPositions 来自
|
|
54
|
+
* `computeEllipsePositions` 的 pointOnEllipsoid 输出(已通过 `normalize · mag`
|
|
55
|
+
* 投到椭球面),`scaleToGeodeticSurface` Newton 1 次迭代即收敛,数值上
|
|
56
|
+
* **几乎不变**。两条路径(合并版 vs 分开版)在 V5 字节级测试上**等价**,
|
|
57
|
+
* 因为最后的 normal 都用 surface-projected position 算 — 这与 Cesium
|
|
58
|
+
* computeTopBottomAttributes 调用 raisePositionsToHeight 后的状态一致。
|
|
59
|
+
*
|
|
60
|
+
* **重要**:如果 V5 字节级测试失败,需把这个函数拆成两遍循环 —
|
|
61
|
+
* 第 1 遍写 extrudeDirection(用 raw position 的 normal),第 2 遍走
|
|
62
|
+
* raisePositionsToHeight(scaleToGeodeticSurface 后的 normal)。
|
|
63
|
+
*
|
|
64
|
+
* @param fillPositions 由 computeCircleFillPositions 产出的扁平 ECEF 顶点。
|
|
65
|
+
* @param maximumHeight 顶面高度,米。
|
|
66
|
+
* @param minimumHeight 底面高度,米。
|
|
67
|
+
* @returns positions + extrudeDirection 二元组。
|
|
68
|
+
*/
|
|
69
|
+
export declare function computeTopBottomAttributes(fillPositions: Float64Array, maximumHeight: number, minimumHeight: number): CircleTopBottomResult;
|
|
70
|
+
//# sourceMappingURL=circle-top-bottom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-top-bottom.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-top-bottom.ts"],"names":[],"mappings":"AAkCA;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACrC,8DAA8D;IAC9D,SAAS,EAAE,YAAY,CAAC;IAExB;;;;OAIG;IACH,gBAAgB,EAAE,YAAY,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,0BAA0B,CACzC,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACnB,qBAAqB,CAuEvB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 计算 Circle 顶面三角形索引数组。
|
|
3
|
+
*
|
|
4
|
+
* 按 4 region 顺序构造索引:
|
|
5
|
+
* - Region 1:东半象限(初始 fan 3 个三角形 + i = 2..numPts 主循环)
|
|
6
|
+
* - Region 2:中心列(numInterior = numPts × 2 的水平带 + 末尾两个三角形)
|
|
7
|
+
* - Region 3:西半象限(i = numPts-1 .. 2 反向循环)
|
|
8
|
+
* - Region 4:南帽(3 个三角形,连接最南顶点与西半最后一环)
|
|
9
|
+
*
|
|
10
|
+
* 索引数组长度 = 12 × numPts × (numPts + 1) − 6(Cesium 注释推导)。
|
|
11
|
+
*
|
|
12
|
+
* 字节级关键(V5):
|
|
13
|
+
* - 变量名 `positionIndex / prevIndex / numInterior / indicesIndex` 严格保留
|
|
14
|
+
* - 后置 ++ vs 前置 ++ 模式每行都对齐 Cesium 源
|
|
15
|
+
* - Region 边界处的 `++positionIndex` / `++prevIndex` 不能漏
|
|
16
|
+
* - Region 3 末尾用 `prevIndex++` 两次 + `positionIndex++` 一次,与
|
|
17
|
+
* Region 1 末尾的 `positionIndex++` 一次不同 — 这是 Cesium 算法特性,
|
|
18
|
+
* 非笔误,必须复刻
|
|
19
|
+
*
|
|
20
|
+
* 输出类型为 plain number[](Cesium 也用 Array<number>),由上层
|
|
21
|
+
* `circle-construct-extruded.ts` 通过 `createIndexTypedArray` 转 Uint16/32。
|
|
22
|
+
*
|
|
23
|
+
* @param numPts 第一象限内的环数(由 computeCircleFillPositions 输出决定,
|
|
24
|
+
* 经 if-branch 兜底后的最终值)。
|
|
25
|
+
* @returns 三角形索引数组,长度 = 12 × numPts × (numPts + 1) − 6。
|
|
26
|
+
*/
|
|
27
|
+
export declare function computeTopIndices(numPts: number): number[];
|
|
28
|
+
//# sourceMappingURL=circle-top-indices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-top-indices.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-top-indices.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,MAAM,GAAI,MAAM,EAAE,CAiJ5D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circle 墙顶点构造结果。
|
|
3
|
+
*
|
|
4
|
+
* Segregated layout:`[top 半 N 顶点, bot 半 N 顶点]`,
|
|
5
|
+
* N = outerPositions.length / 3。
|
|
6
|
+
*/
|
|
7
|
+
export interface CircleWallResult {
|
|
8
|
+
/** ECEF 顶点 Float64,长度 = (outerPositions.length / 3) × 2 × 3 */
|
|
9
|
+
positions: Float64Array;
|
|
10
|
+
/**
|
|
11
|
+
* 顶点 extrudeDirection,Float32,与 positions 同长。
|
|
12
|
+
* - 索引 [0, length):top 半,全 0
|
|
13
|
+
* - 索引 [length, 2·length):bot 半,= -geodeticSurfaceNormal(outer 投影)
|
|
14
|
+
*
|
|
15
|
+
* `length` = outerPositions.length(注意是 floats 长度,不是顶点数,
|
|
16
|
+
* 与 Cesium 写法一致)。
|
|
17
|
+
*/
|
|
18
|
+
extrudeDirection: Float32Array;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 计算 Circle 墙顶点 + extrudeDirection。
|
|
22
|
+
*
|
|
23
|
+
* 复刻 Cesium `computeWallAttributes(outerPositions, options)` 的
|
|
24
|
+
* POSITION_ONLY + shadowVolume 子集(裁掉 st / normal / tangent / bitangent /
|
|
25
|
+
* offsetAttribute 分支)。
|
|
26
|
+
*
|
|
27
|
+
* 算法逐字对齐 Cesium L515-585 的主循环:
|
|
28
|
+
* 1. position = (outerPositions[i, i+1, i+2])
|
|
29
|
+
* 2. position = scaleToGeodeticSurface(position) ← 原地
|
|
30
|
+
* 3. extrudedPosition = clone(position) ← scratchCartesian2
|
|
31
|
+
* 4. normal = geodeticSurfaceNormal(position) ← scratchNormal
|
|
32
|
+
* 5. 写 extrudeNormals[i + length] = -normal(top 半默认 0)
|
|
33
|
+
* 6. scaledNormal = normal × maximumHeight ← scratchCartesian4
|
|
34
|
+
* position = position + scaledNormal ← top 顶点
|
|
35
|
+
* 7. scaledNormal = normal × minimumHeight ← 覆盖 scratch
|
|
36
|
+
* extrudedPosition = extrudedPosition + scaledNormal ← bot 顶点
|
|
37
|
+
* 8. 写 finalPositions:[i] = position(top 半),[i+length] = extruded(bot 半)
|
|
38
|
+
*
|
|
39
|
+
* 与 `circle-top-bottom.ts` 几乎完全相同,唯一差异是输入数组(outerPositions
|
|
40
|
+
* vs fillPositions)与 layout 内 `length` 的含义略不同(此处 length =
|
|
41
|
+
* outerPositions.length floats 数,Cesium L513 同名)。
|
|
42
|
+
*
|
|
43
|
+
* @param outerPositions 由 computeCircleFillPositions 产出的外圈点扁平 ECEF。
|
|
44
|
+
* @param maximumHeight 顶面高度,米。
|
|
45
|
+
* @param minimumHeight 底面高度,米。
|
|
46
|
+
* @returns positions + extrudeDirection 二元组。
|
|
47
|
+
*/
|
|
48
|
+
export declare function computeWallAttributes(outerPositions: Float64Array, maximumHeight: number, minimumHeight: number): CircleWallResult;
|
|
49
|
+
/**
|
|
50
|
+
* 计算 Circle 墙 quad 索引。
|
|
51
|
+
*
|
|
52
|
+
* 复刻 Cesium `computeWallIndices`(L723-741)逐字。
|
|
53
|
+
*
|
|
54
|
+
* 算法:
|
|
55
|
+
* length = outerPositionsFloatLength / 3 ← 位置数 N
|
|
56
|
+
* for i in [0, length):
|
|
57
|
+
* UL = i ← 当前位置 top
|
|
58
|
+
* LL = i + length ← 当前位置 bot
|
|
59
|
+
* UR = (i + 1) % length ← 下一位置 top(wrap 闭环)
|
|
60
|
+
* LR = UR + length ← 下一位置 bot
|
|
61
|
+
* 写三角形 (UL, LL, UR), (UR, LL, LR)
|
|
62
|
+
*
|
|
63
|
+
* 索引数组长度 = N × 6(每位置 1 quad = 2 三角形 × 3 索引)。
|
|
64
|
+
*
|
|
65
|
+
* 字节级关键:Cesium `createTypedArray(length, length * 6)` 第 1 参传的是
|
|
66
|
+
* **位置数 N**(不是 wall 总顶点数 2N)— 这是 Cesium 简化(实际索引值
|
|
67
|
+
* 最大 2N-1,严格应传 2N 才正确选 Uint16/Uint32 阈值)。但 N × 6 < 65535
|
|
68
|
+
* 时 N 一般也 ≤ 32767 < 65535/2,Uint16 仍够 — 实际无影响。
|
|
69
|
+
* 本期为字节级一致,**逐字复刻 Cesium 行为**(传 length 而非 length × 2)。
|
|
70
|
+
*
|
|
71
|
+
* @param outerPositionsFloatLength outerPositions 数组的 floats 数(= N × 3)。
|
|
72
|
+
* @returns 索引数组(Uint16Array 或 Uint32Array,长度 N × 6)。
|
|
73
|
+
*/
|
|
74
|
+
export declare function computeWallIndices(outerPositionsFloatLength: number): Uint16Array | Uint32Array;
|
|
75
|
+
//# sourceMappingURL=circle-wall-construction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-wall-construction.d.ts","sourceRoot":"","sources":["../../../../../src/lib/ground/circle/circle-wall-construction.ts"],"names":[],"mappings":"AAuCA;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAChC,+DAA+D;IAC/D,SAAS,EAAE,YAAY,CAAC;IAExB;;;;;;;OAOG;IACH,gBAAgB,EAAE,YAAY,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,CACpC,cAAc,EAAE,YAAY,EAC5B,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACnB,gBAAgB,CA8DlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CACjC,yBAAyB,EAAE,MAAM,GAC/B,WAAW,GAAG,WAAW,CAyB3B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { BufferGeometry, Color, Group, Vector2, type RawShaderMaterial } from 'three';
|
|
2
|
+
import type { CesiumClassificationCommandVisibility, CesiumGroundFrameState, PlanarExtents, SharedUniforms } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* 更新本帧 Cesium automatic uniform,包括 shadow-volume 顶点/片元着色器需要的
|
|
5
|
+
* LOG_DEPTH uniform。
|
|
6
|
+
*
|
|
7
|
+
* 导出该函数是为了让位于 stencil 命令组之外的贴地折线图元复用同一套逐帧 uniform 管线。
|
|
8
|
+
* 折线通过在自己的 uniform map 中声明额外字段(`czm_projection`、`czm_pixelRatio`)
|
|
9
|
+
* 来 opt-in;下面的守卫式写入不会影响 stencil/color/text 材质。
|
|
10
|
+
*
|
|
11
|
+
* @param frameState 当前 Three 侧帧状态。
|
|
12
|
+
* @param uniforms 原地更新的共享材质 uniform。
|
|
13
|
+
*/
|
|
14
|
+
export declare function updateFrameStateUniforms(frameState: CesiumGroundFrameState, uniforms: SharedUniforms): void;
|
|
15
|
+
/**
|
|
16
|
+
* 可选注入点,供需要非默认 color material 的调用方使用。
|
|
17
|
+
* 例如贴地文字需要用纹理 sampler 替代 per-instance 填充色。
|
|
18
|
+
* 其它调用方省略该参数时,图元回退到 `createColorMaterial`,
|
|
19
|
+
* 圆形/矩形/多边形行为保持不变。
|
|
20
|
+
*/
|
|
21
|
+
export interface ClassificationColorInjection {
|
|
22
|
+
/** 自定义 color material 工厂。未设置时使用默认 `createColorMaterial`。 */
|
|
23
|
+
colorMaterialFactory?: (uniforms: SharedUniforms, fragmentCull: boolean) => RawShaderMaterial;
|
|
24
|
+
/** 材质构建前合并到共享 uniform map 的额外 uniform。 */
|
|
25
|
+
extraUniforms?: Record<string, {
|
|
26
|
+
value: unknown;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 在 Three 中执行 Cesium ClassificationPrimitive 的两个 stencil 命令和一个 color 命令。
|
|
31
|
+
*/
|
|
32
|
+
export declare class CesiumClassificationPrimitive {
|
|
33
|
+
readonly group: Group;
|
|
34
|
+
private readonly stencilMesh;
|
|
35
|
+
private readonly backStencilMesh;
|
|
36
|
+
private readonly colorMesh;
|
|
37
|
+
private readonly uniforms;
|
|
38
|
+
private readonly cameraHigh;
|
|
39
|
+
private readonly cameraLow;
|
|
40
|
+
private readonly colorMaterialFactory;
|
|
41
|
+
private colorFragmentCull;
|
|
42
|
+
constructor(geometry: BufferGeometry, extents: PlanarExtents, color: Color, alpha: number, renderOrder: number, fragmentCull: boolean, injection?: ClassificationColorInjection);
|
|
43
|
+
/**
|
|
44
|
+
* 更新该图元连续命令块的基础渲染顺序。
|
|
45
|
+
*
|
|
46
|
+
* @param renderOrder 分配给 front-stencil 命令的基础顺序。
|
|
47
|
+
*/
|
|
48
|
+
setRenderOrder(renderOrder: number): void;
|
|
49
|
+
/**
|
|
50
|
+
* 切换单个绘制命令的可见性,不将其从场景图中分离。
|
|
51
|
+
*
|
|
52
|
+
* @param visibility 可选的逐命令可见性标志。
|
|
53
|
+
*/
|
|
54
|
+
setCommandVisibility(visibility: CesiumClassificationCommandVisibility): void;
|
|
55
|
+
/**
|
|
56
|
+
* 更新 Cesium shader 消费的 per-instance color uniform。
|
|
57
|
+
*
|
|
58
|
+
* @param color Three 线性颜色。
|
|
59
|
+
* @param alpha 预乘输出 alpha 因子。
|
|
60
|
+
*/
|
|
61
|
+
setColor(color: Color, alpha: number): void;
|
|
62
|
+
/**
|
|
63
|
+
* 更新现有 Cesium color 命令中的边框样式。
|
|
64
|
+
*
|
|
65
|
+
* @param enabled shader 是否混入边框颜色。
|
|
66
|
+
* @param color Three 线性颜色表示的边框颜色。
|
|
67
|
+
* @param opacity classification blend pass 之前使用的 straight alpha。
|
|
68
|
+
* @param widthMeters 局部米制坐标中的边框宽度。
|
|
69
|
+
*/
|
|
70
|
+
setBorderStyle(enabled: boolean, color: Color, opacity: number, widthMeters: number): void;
|
|
71
|
+
/**
|
|
72
|
+
* 以平面米制坐标提供原始多边形填充环,使 color fragment 能为描边样式执行
|
|
73
|
+
* point-in-polygon 测试。
|
|
74
|
+
*
|
|
75
|
+
* shader 仅在 `u_polygonBorderMode` 开启时使用这些值;调用方通过传入 3 个及以上
|
|
76
|
+
* 点启用该模式。少于 3 个点时禁用 polygon-border 模式,并回退到已有的矩形
|
|
77
|
+
* `u_innerMetersRect` 轴对齐边框。
|
|
78
|
+
*
|
|
79
|
+
* @param points 填充多边形顶点,相对于顶点着色器从 `u_southWest_HIGH/LOW`
|
|
80
|
+
* 推导出的同一 SW 米制原点。
|
|
81
|
+
*/
|
|
82
|
+
setPolygonBorderPoints(points: readonly Vector2[]): void;
|
|
83
|
+
/**
|
|
84
|
+
* 选择 fragment shader 使用的多边形描边分类器。
|
|
85
|
+
*
|
|
86
|
+
* round 模式按到填充环的距离裁剪描边,对通用多边形更鲁棒。
|
|
87
|
+
* miter 模式信任已扩张的渲染几何,只测试 fill-vs-border,
|
|
88
|
+
* 可在米级尺度保留尖锐箭头头部和凹口。
|
|
89
|
+
*
|
|
90
|
+
* @param enabled render ring 是真实 miter 偏移外壳时为 true。
|
|
91
|
+
*/
|
|
92
|
+
setPolygonMiterStrokeMode(enabled: boolean): void;
|
|
93
|
+
/**
|
|
94
|
+
* 以平面米制坐标提供圆形样式值,使 color fragment 能为圆盘添加同心环、
|
|
95
|
+
* 扇区裁切和外侧描边带。两个半径都为 0 时禁用 circle 分支,
|
|
96
|
+
* 由 rectangle / polygon 路径接管。
|
|
97
|
+
*
|
|
98
|
+
* @param centerMeters 相对于 shader SW 米制原点的圆心。
|
|
99
|
+
* @param fillRadiusMeters 公开填充半径,单位米。
|
|
100
|
+
* @param renderRadiusMeters shadow-volume 渲染半径,单位米。
|
|
101
|
+
* @param ringCount 填充同心带数量,默认 1。
|
|
102
|
+
* @param ringGapMeters 填充带之间的透明间隔宽度,单位米。
|
|
103
|
+
* @param sectorStartRadians 圆局部 ENU 平面中的起始角。
|
|
104
|
+
* @param sectorAngleRadians 正向角度扫掠;±2π 表示完整圆。
|
|
105
|
+
*/
|
|
106
|
+
setCircleBorderStyle(centerMeters: Vector2, fillRadiusMeters: number, renderRadiusMeters: number, ringCount?: number, ringGapMeters?: number, sectorStartRadians?: number, sectorAngleRadians?: number): void;
|
|
107
|
+
/**
|
|
108
|
+
* fragment culling 开关变化时重建 color material。
|
|
109
|
+
*
|
|
110
|
+
* @param enabled Cesium 的 CULL_FRAGMENTS define 是否启用。
|
|
111
|
+
*/
|
|
112
|
+
setFragmentCulling(enabled: boolean): void;
|
|
113
|
+
/**
|
|
114
|
+
* 更新本帧 Cesium automatic uniform。
|
|
115
|
+
*
|
|
116
|
+
* @param frameState Cesium frame state 的 Three 侧等价结构。
|
|
117
|
+
*/
|
|
118
|
+
update(frameState: CesiumGroundFrameState): void;
|
|
119
|
+
/**
|
|
120
|
+
* 释放几何和材质 GPU 资源。
|
|
121
|
+
*/
|
|
122
|
+
dispose(): void;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=classification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classification.d.ts","sourceRoot":"","sources":["../../../../src/lib/ground/classification.ts"],"names":[],"mappings":"AASA,OAAO,EAEN,cAAc,EACd,KAAK,EAGL,KAAK,EAKL,OAAO,EAIP,KAAK,iBAAiB,EACtB,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EACX,qCAAqC,EACrC,sBAAsB,EACtB,aAAa,EACb,cAAc,EACd,MAAM,SAAS,CAAC;AAySjB;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAE,UAAU,EAAE,sBAAsB,EAAE,QAAQ,EAAE,cAAc,GAAI,IAAI,CAwE7G;AAED;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC5C,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,CAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,KAAM,iBAAiB,CAAC;IAChG,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,qBAAa,6BAA6B;IACzC,SAAgB,KAAK,EAAE,KAAK,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CACqC;IAC1E,OAAO,CAAC,iBAAiB,CAAU;gBAGlC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,4BAA4B;IAqIzC;;;;OAIG;IACI,cAAc,CAAE,WAAW,EAAE,MAAM,GAAI,IAAI;IAOlD;;;;OAIG;IACI,oBAAoB,CAAE,UAAU,EAAE,qCAAqC,GAAI,IAAI;IAYtF;;;;;OAKG;IACI,QAAQ,CAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAI,IAAI;IAIpD;;;;;;;OAOG;IACI,cAAc,CAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAI,IAAI;IASnG;;;;;;;;;;OAUG;IACI,sBAAsB,CAAE,MAAM,EAAE,SAAS,OAAO,EAAE,GAAI,IAAI;IAejE;;;;;;;;OAQG;IACI,yBAAyB,CAAE,OAAO,EAAE,OAAO,GAAI,IAAI;IAI1D;;;;;;;;;;;;OAYG;IACI,oBAAoB,CAC1B,YAAY,EAAE,OAAO,EACrB,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,SAAM,EACf,aAAa,SAAM,EACnB,kBAAkB,SAAM,EACxB,kBAAkB,SAAgB,GAChC,IAAI;IA4BP;;;;OAIG;IACI,kBAAkB,CAAE,OAAO,EAAE,OAAO,GAAI,IAAI;IAWnD;;;;OAIG;IACI,MAAM,CAAE,UAAU,EAAE,sBAAsB,GAAI,IAAI;IAKzD;;OAEG;IACI,OAAO,IAAI,IAAI;CAMtB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const WGS84_X_RADIUS = 6378137;
|
|
2
|
+
export declare const WGS84_Y_RADIUS = 6378137;
|
|
3
|
+
export declare const WGS84_Z_RADIUS = 6356752.314245179;
|
|
4
|
+
export declare const CLASSIFICATION_MASK = 15;
|
|
5
|
+
export declare const SCENE_MODE_3D = 3;
|
|
6
|
+
export declare const CESIUM_GLOBE_MINIMUM_ALTITUDE = 55000;
|
|
7
|
+
export declare const BORDER_GEOMETRY_EXPANSION_SCALE = 1;
|
|
8
|
+
export declare const MAX_POLYGON_STYLE_VERTICES = 128;
|
|
9
|
+
export declare const MIN_CIRCLE_GRANULARITY_RADIANS = 0.0025;
|
|
10
|
+
export declare const MAX_CIRCLE_GRANULARITY_RADIANS = 0.2;
|
|
11
|
+
export declare const CESIUM_MAXIMUM_SCREEN_SPACE_ERROR = 2;
|
|
12
|
+
export declare const APPROXIMATE_TERRAIN_DEFAULT_MIN_HEIGHT = -100000;
|
|
13
|
+
export declare const APPROXIMATE_TERRAIN_DEFAULT_MAX_HEIGHT = 9000;
|
|
14
|
+
export declare const WALL_INITIAL_MIN_HEIGHT = 0;
|
|
15
|
+
export declare const WALL_INITIAL_MAX_HEIGHT = 1000;
|
|
16
|
+
export declare const MITER_BREAK_SMALL: number;
|
|
17
|
+
export declare const MITER_BREAK_LARGE: number;
|
|
18
|
+
export declare const LINE_NORMAL_NUDGE = 0.00001;
|
|
19
|
+
export declare const LINE_NUDGE_XZ = 0.01;
|
|
20
|
+
export declare const LINE_SPLIT_EPSILON = 1e-7;
|
|
21
|
+
export declare const LINE_DEDUP_EPSILON = 1e-12;
|
|
22
|
+
export declare const LINE_DEFAULT_GRANULARITY = 9999;
|
|
23
|
+
export declare const LINE_DEFAULT_WIDTH_PIXELS = 3;
|
|
24
|
+
export declare const LINE_DEFAULT_RENDER_ORDER = 40;
|
|
25
|
+
export declare const CESIUM_GROUND_NON_PICKABLE_LAYER = 1;
|
|
26
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/lib/ground/constants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc,UAAY,CAAC;AAGxC,eAAO,MAAM,cAAc,UAAY,CAAC;AAGxC,eAAO,MAAM,cAAc,oBAAqB,CAAC;AAGjD,eAAO,MAAM,mBAAmB,KAAO,CAAC;AAGxC,eAAO,MAAM,aAAa,IAAM,CAAC;AAKjC,eAAO,MAAM,6BAA6B,QAAU,CAAC;AAGrD,eAAO,MAAM,+BAA+B,IAAM,CAAC;AAKnD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAI9C,eAAO,MAAM,8BAA8B,SAAS,CAAC;AAGrD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAKlD,eAAO,MAAM,iCAAiC,IAAM,CAAC;AAIrD,eAAO,MAAM,sCAAsC,UAAa,CAAC;AACjE,eAAO,MAAM,sCAAsC,OAAS,CAAC;AAK7D,eAAO,MAAM,uBAAuB,IAAM,CAAC;AAC3C,eAAO,MAAM,uBAAuB,OAAS,CAAC;AAI9C,eAAO,MAAM,iBAAiB,QAA4B,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAkC,CAAC;AAOjE,eAAO,MAAM,iBAAiB,UAAS,CAAC;AACxC,eAAO,MAAM,aAAa,OAAS,CAAC;AAGpC,eAAO,MAAM,kBAAkB,OAAS,CAAC;AAGzC,eAAO,MAAM,kBAAkB,QAAU,CAAC;AAS1C,eAAO,MAAM,wBAAwB,OAAS,CAAC;AAG/C,eAAO,MAAM,yBAAyB,IAAM,CAAC;AAG7C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAY5C,eAAO,MAAM,gCAAgC,IAAI,CAAC"}
|