s3m-three 0.4.19 → 0.4.21
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/dist/browser/assets/{s3mWorker-4iTAmWIu.js → s3mWorker-DvAUA8NJ.js} +1 -1
- package/dist/browser/s3m-three.iife.ext-three.js +243 -243
- package/dist/browser/s3m-three.iife.js +227 -227
- package/dist/core/Draco.d.ts.map +1 -1
- package/dist/core/Draco.js +0 -1
- package/dist/core/Draco.js.map +1 -1
- package/dist/core/S3MBlockParser.d.ts.map +1 -1
- package/dist/core/S3MBlockParser.js +27 -14
- package/dist/core/S3MBlockParser.js.map +1 -1
- package/dist/core/SplatSort.d.ts +14 -1
- package/dist/core/SplatSort.d.ts.map +1 -1
- package/dist/core/SplatSort.js +51 -4
- package/dist/core/SplatSort.js.map +1 -1
- package/dist/core/TileGeometry.d.ts +10 -0
- package/dist/core/TileGeometry.d.ts.map +1 -1
- package/dist/core/TileGeometry.js +17 -14
- package/dist/core/TileGeometry.js.map +1 -1
- package/dist/render/DatasetManager.d.ts +3 -1
- package/dist/render/DatasetManager.d.ts.map +1 -1
- package/dist/render/DatasetManager.js +2 -1
- package/dist/render/DatasetManager.js.map +1 -1
- package/dist/render/FeatureStyleManager.d.ts.map +1 -1
- package/dist/render/GeometryBuilder.d.ts +8 -0
- package/dist/render/GeometryBuilder.d.ts.map +1 -1
- package/dist/render/GeometryBuilder.js +62 -7
- package/dist/render/GeometryBuilder.js.map +1 -1
- package/dist/render/S3MViewer.d.ts +106 -440
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +297 -1653
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/SplatSorter.d.ts.map +1 -1
- package/dist/render/SplatSorter.js +8 -1
- package/dist/render/SplatSorter.js.map +1 -1
- package/dist/render/viewer/EdgeDecorator.d.ts +206 -0
- package/dist/render/viewer/EdgeDecorator.d.ts.map +1 -0
- package/dist/render/viewer/EdgeDecorator.js +628 -0
- package/dist/render/viewer/EdgeDecorator.js.map +1 -0
- package/dist/render/viewer/HeightIndex.d.ts +36 -0
- package/dist/render/viewer/HeightIndex.d.ts.map +1 -0
- package/dist/render/viewer/HeightIndex.js +98 -0
- package/dist/render/viewer/HeightIndex.js.map +1 -0
- package/dist/render/viewer/LightRig.d.ts +88 -0
- package/dist/render/viewer/LightRig.d.ts.map +1 -0
- package/dist/render/viewer/LightRig.js +229 -0
- package/dist/render/viewer/LightRig.js.map +1 -0
- package/dist/render/viewer/PickService.d.ts +109 -0
- package/dist/render/viewer/PickService.d.ts.map +1 -0
- package/dist/render/viewer/PickService.js +591 -0
- package/dist/render/viewer/PickService.js.map +1 -0
- package/dist/render/viewer/SelectionDecorator.d.ts +84 -0
- package/dist/render/viewer/SelectionDecorator.d.ts.map +1 -0
- package/dist/render/viewer/SelectionDecorator.js +339 -0
- package/dist/render/viewer/SelectionDecorator.js.map +1 -0
- package/dist/render/viewer/SplatLayer.d.ts +26 -0
- package/dist/render/viewer/SplatLayer.d.ts.map +1 -0
- package/dist/render/viewer/SplatLayer.js +44 -0
- package/dist/render/viewer/SplatLayer.js.map +1 -0
- package/dist/render/viewer/types.d.ts +256 -0
- package/dist/render/viewer/types.d.ts.map +1 -0
- package/dist/render/viewer/types.js +3 -0
- package/dist/render/viewer/types.js.map +1 -0
- package/dist/tileset/S3MTileset.d.ts +30 -3
- package/dist/tileset/S3MTileset.d.ts.map +1 -1
- package/dist/tileset/S3MTileset.js +99 -5
- package/dist/tileset/S3MTileset.js.map +1 -1
- package/dist/worker/s3mWorker.js +1 -1
- package/dist/worker/s3mWorker.js.map +1 -1
- package/docs/API.md +9 -28
- package/docs/FORMAT-NOTES.md +38 -14
- package/package.json +1 -1
- package/src/core/Draco.ts +1 -2
- package/src/core/S3MBlockParser.ts +27 -16
- package/src/core/SplatSort.ts +67 -5
- package/src/core/TileGeometry.ts +24 -11
- package/src/render/DatasetManager.ts +5 -1
- package/src/render/FeatureStyleManager.ts +1 -1
- package/src/render/GeometryBuilder.ts +59 -7
- package/src/render/S3MViewer.ts +327 -1916
- package/src/render/SplatSorter.ts +8 -1
- package/src/render/viewer/EdgeDecorator.ts +722 -0
- package/src/render/viewer/HeightIndex.ts +94 -0
- package/src/render/viewer/LightRig.ts +267 -0
- package/src/render/viewer/PickService.ts +651 -0
- package/src/render/viewer/SelectionDecorator.ts +377 -0
- package/src/render/viewer/SplatLayer.ts +44 -0
- package/src/render/viewer/types.ts +264 -0
- package/src/tileset/S3MTileset.ts +106 -6
|
@@ -22,224 +22,31 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import * as THREE from 'three';
|
|
24
24
|
import { S3MTileset } from '../tileset/S3MTileset.js';
|
|
25
|
-
import type {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import type { OutlineMaterial, StyleMode, S3MStyle, EdgesOption, MaterialQuality } from './StyleMaterial.js';
|
|
29
|
-
import type { UnsupportedPolicy } from '../core/degradations.js';
|
|
25
|
+
import type { LightingPreset } from './lightingPreset.js';
|
|
26
|
+
import type { LightOptions, S3MViewerOptions, PickResult, PickableRef, PathFollowOptions } from './viewer/types.js';
|
|
27
|
+
import type { OutlineMaterial, StyleMode, S3MStyle, EdgeModes, EdgesOption, MaterialQuality } from './StyleMaterial.js';
|
|
30
28
|
import { Picker } from './Picker.js';
|
|
29
|
+
import { GpuEdgePass } from './GpuEdgePass.js';
|
|
31
30
|
import { Animator } from '../anim/Animator.js';
|
|
32
31
|
import type { TransitionOptions } from '../anim/Animator.js';
|
|
33
32
|
import { Path } from '../anim/Path.js';
|
|
34
|
-
import type { EasingFn, EasingName } from '../anim/easing.js';
|
|
35
33
|
import type { LineSharedUniforms, ThickLineMaterial } from './EdgeLines.js';
|
|
36
34
|
import { GPUPathManager } from './GPUPathManager.js';
|
|
37
35
|
import type { GPUPathOptions } from './FeatureStyleManager.js';
|
|
36
|
+
import type { InstanceFeature } from '../core/FeatureInfo.js';
|
|
38
37
|
import { AttributeQuery } from '../core/AttributeQuery.js';
|
|
39
38
|
import type { AttributeQueryOptions } from '../core/AttributeQuery.js';
|
|
40
|
-
import type {
|
|
39
|
+
import type { GeoPackageEntry, SegmentBox, Stats, StyleUniforms } from '../core/types.js';
|
|
41
40
|
import { type GeoAdapter } from './GeoAdapter.js';
|
|
42
41
|
import { DatasetManager, type DatasetAlignment, type S3MDatasetOptions, type S3MDatasetEntry } from './DatasetManager.js';
|
|
43
42
|
import { FeatureStyleManager, type FeatureStyle, type ColorByFieldOptions, type ThematicResult, type BatchAudit, type FieldFilterOptions, type FieldFilterResult, type FieldElevationOptions, type FieldElevationResult, type S3MFilter } from './FeatureStyleManager.js';
|
|
44
|
-
import { GroundManager, type GroundMode
|
|
43
|
+
import { GroundManager, type GroundMode } from './GroundManager.js';
|
|
45
44
|
export type { DatasetAlignment, S3MDatasetOptions, S3MDatasetEntry, } from './DatasetManager.js';
|
|
46
45
|
export type { FeatureStyle, ColorByFieldOptions, ThematicLegendEntry, ThematicResult, BatchConflict, BatchAudit, FieldFilterOptions, FieldFilterResult, FieldElevationOptions, FieldElevationResult, S3MFilter, } from './FeatureStyleManager.js';
|
|
47
46
|
export type { GroundMode, GroundOptions, } from './GroundManager.js';
|
|
48
47
|
export { GroundManager, DatasetManager, FeatureStyleManager };
|
|
49
|
-
export
|
|
50
|
-
datasetId: string;
|
|
51
|
-
datasetName: string;
|
|
52
|
-
/** 网格编号 */
|
|
53
|
-
objectId: number;
|
|
54
|
-
/** 单体控制位(顶点区间型 = batchId,实例化型 = 状态纹理下标),-1 表示没有单体化信息 */
|
|
55
|
-
batchId: number;
|
|
56
|
-
/** 实例化几何命中的实例序号;非实例化为 undefined */
|
|
57
|
-
instanceIndex?: number;
|
|
58
|
-
skeletonName: string;
|
|
59
|
-
/** 单体中心经纬度,拿不到时为 null */
|
|
60
|
-
centerLngLat: [number, number] | null;
|
|
61
|
-
/** 命中点三维场景坐标 [x, y, z](米,场景 ENU) */
|
|
62
|
-
point?: [number, number, number] | null;
|
|
63
|
-
/** 命中点经纬度 [lng, lat] */
|
|
64
|
-
lngLat?: [number, number] | null;
|
|
65
|
-
/** 命中点高程(米) */
|
|
66
|
-
altitude?: number | null;
|
|
67
|
-
mesh: THREE.Mesh;
|
|
68
|
-
}
|
|
69
|
-
export interface LightOptions {
|
|
70
|
-
/** 环境光强度,默认 0.4 */
|
|
71
|
-
ambientIntensity?: number;
|
|
72
|
-
/** 环境光颜色,十六进制或 CSS 颜色字符串,默认 0xffffff */
|
|
73
|
-
ambientColor?: number | string;
|
|
74
|
-
/** 半球光天空强度,默认 0.8 */
|
|
75
|
-
hemisphereIntensity?: number;
|
|
76
|
-
/** 半球光天空颜色,默认 0xffffff */
|
|
77
|
-
hemisphereColor?: number | string;
|
|
78
|
-
/** 半球光地面颜色,默认 0xb6c0cb */
|
|
79
|
-
hemisphereGroundColor?: number | string;
|
|
80
|
-
/** 主平行光强度,默认 1.0 */
|
|
81
|
-
keyLightIntensity?: number;
|
|
82
|
-
/** 主平行光强度别名(兼容写法) */
|
|
83
|
-
mainIntensity?: number;
|
|
84
|
-
/** 主平行光颜色,默认 0xffffff */
|
|
85
|
-
keyLightColor?: number | string;
|
|
86
|
-
/** 主平行光颜色别名(兼容写法) */
|
|
87
|
-
mainColor?: number | string;
|
|
88
|
-
/** 补光强度,默认 0.35 */
|
|
89
|
-
fillLightIntensity?: number;
|
|
90
|
-
/** 补光颜色,默认 0xffffff */
|
|
91
|
-
fillLightColor?: number | string;
|
|
92
|
-
/**
|
|
93
|
-
* 光照朝向模式:
|
|
94
|
-
* - 'headlamp': 默认头灯模式(随相机 bearing 旋转,受光面始终面向镜头)
|
|
95
|
-
* - 'fixed': 固定世界坐标方位角(如太阳光模拟)
|
|
96
|
-
*/
|
|
97
|
-
mode?: 'headlamp' | 'fixed';
|
|
98
|
-
/** 方位角(度,0~360),固定模式下以正北为 0 顺时针,头灯模式下为相机相对偏角,默认 150 */
|
|
99
|
-
azimuth?: number;
|
|
100
|
-
/** 太阳/光源仰角(度,0~90),默认 50 */
|
|
101
|
-
altitude?: number;
|
|
102
|
-
}
|
|
103
|
-
export interface S3MViewerOptions {
|
|
104
|
-
/**
|
|
105
|
-
* 光照预设:
|
|
106
|
-
* - `'default'`(默认):现有 PBR 打光,亮部线性总量 ≈ 2.55;
|
|
107
|
-
* - `'supermap'`:对齐 iClient3D 观感(暗部 0.46 / 亮部 2.44),远处不发灰、饱和度更高。
|
|
108
|
-
* 只改光源,不动材质与色调映射;`light` 里的显式字段仍然优先生效。
|
|
109
|
-
*/
|
|
110
|
-
lightingPreset?: LightingPreset;
|
|
111
|
-
/** 光照参数配置(强度、颜色、朝向模式、太阳方位角/仰角等) */
|
|
112
|
-
light?: LightOptions;
|
|
113
|
-
/**
|
|
114
|
-
* 三角面材质深度偏移(共面摩尔纹 / 重合面归属的人工定序)。
|
|
115
|
-
* 例:factor -1 / units -2 把配置材质的片元深度略微拉近。
|
|
116
|
-
* 这是 mesh 粒度开关,见 BuildTileOptions.polygonOffset 的说明。
|
|
117
|
-
*/
|
|
118
|
-
polygonOffset?: {
|
|
119
|
-
factor: number;
|
|
120
|
-
units: number;
|
|
121
|
-
};
|
|
122
|
-
/**
|
|
123
|
-
* 色调映射模式(默认 THREE.NoToneMapping,避免 ACESFilmic 压暗中暗部及导致底图与建筑色彩失真;
|
|
124
|
-
* 可传入 THREE.ACESFilmicToneMapping、THREE.LinearToneMapping、THREE.ReinhardToneMapping 等)
|
|
125
|
-
*/
|
|
126
|
-
toneMapping?: THREE.ToneMapping;
|
|
127
|
-
/** 色调映射曝光度,默认 1.0 */
|
|
128
|
-
toneMappingExposure?: number;
|
|
129
|
-
/** 全局总驻留瓦片上限(多数据集多图层共享预算),在所有可见数据集之间动态均衡分配,彻底防止爆显存 */
|
|
130
|
-
totalMaxTiles?: number;
|
|
131
|
-
/** 单数据集简写 */
|
|
132
|
-
configUrl?: string;
|
|
133
|
-
/** 多数据集 */
|
|
134
|
-
datasets?: S3MDatasetOptions[];
|
|
135
|
-
style?: Partial<S3MStyle>;
|
|
136
|
-
/** 3D 物理地表面 / 基坑开挖配置 */
|
|
137
|
-
ground?: GroundOptions;
|
|
138
|
-
pickable?: boolean;
|
|
139
|
-
/** 每个数据集最多驻留瓦片 */
|
|
140
|
-
maxTiles?: number;
|
|
141
|
-
/** 每个数据集并发请求数 */
|
|
142
|
-
maxConcurrent?: number;
|
|
143
|
-
/**
|
|
144
|
-
* 图层级默认的降级处置策略(默认 `'warn'`),数据集可用 `unsupported` 单独覆盖。
|
|
145
|
-
* 见 `S3MTilesetOptions.unsupported`。
|
|
146
|
-
*/
|
|
147
|
-
unsupported?: UnsupportedPolicy;
|
|
148
|
-
/** 是否用 Web Worker 解析经典 .s3mb 瓦片(默认开,崩溃自动降级主线程),见 S3MTilesetOptions.useWorker */
|
|
149
|
-
useWorker?: boolean;
|
|
150
|
-
/** LOD 切换范围缩放系数(默认 1.0),> 1 更倾向保留粗模,< 1 提前换细模 */
|
|
151
|
-
lodRangeScale?: number;
|
|
152
|
-
/**
|
|
153
|
-
* LOD 判定用屏幕高度时的「设备像素比上限」(默认不限制,行为与旧版一致)。
|
|
154
|
-
*
|
|
155
|
-
* LOD 的屏幕空间误差按 `canvasHeight` 物理像素算(与官方 `calcPixFromCam` 同口径),
|
|
156
|
-
* 于是 3x DPR 的手机上判定高度是 2556 而不是 852,细化层数与瓦片数都会远多于桌面。
|
|
157
|
-
* 传 2 表示「按 CSS 高度 × 2 截断」,砍掉 3x 屏的超采样余量;传 `Infinity` = 不截断。
|
|
158
|
-
*
|
|
159
|
-
* 代价:截断会把每块瓦片的屏幕投影放大同样倍数,几何误差与纹理密度同步变差,
|
|
160
|
-
* 所以默认不启用,由接入方按设备档位自行决定。运行时可用 `setLodPixelRatioCap()` 调整。
|
|
161
|
-
*/
|
|
162
|
-
lodPixelRatioCap?: number;
|
|
163
|
-
/**
|
|
164
|
-
* 每个数据集驻留三角形总数的软上限(默认不限制)。
|
|
165
|
-
* 见 `S3MTilesetOptions.maxTriangles`:瓦片数管不住的场景(精模、大面片)用这条刹车。
|
|
166
|
-
*/
|
|
167
|
-
maxTriangles?: number;
|
|
168
|
-
/**
|
|
169
|
-
* 纹理缓存条数上限(默认 128)。一条对应一张已解码的瓦片纹理,
|
|
170
|
-
* 1024² 的 RGBA 一张约 4MB,128 条就是 512MB 显存 —— 低端设备建议 32~48。
|
|
171
|
-
* 与 `maxTextureSize` 配合使用:后者降单张尺寸,这条降张数。
|
|
172
|
-
*/
|
|
173
|
-
maxImageCache?: number;
|
|
174
|
-
/**
|
|
175
|
-
* 各向异性过滤上限(默认不封顶,取 GPU 报的最大值,通常 16)。
|
|
176
|
-
* 移动端封到 4 或 8 肉眼通常无差,采样成本明显下降。只影响**之后创建**的纹理。
|
|
177
|
-
*/
|
|
178
|
-
anisotropyCap?: number;
|
|
179
|
-
/**
|
|
180
|
-
* 纹理长边像素上限(默认不限制)。
|
|
181
|
-
* 非图集的 RGBA / WebP 纹理会按 2× 盒式滤波逐次减半到上限内;DXT 压缩直传与
|
|
182
|
-
* 图集(UV 已重映射)不受影响。手机上 1024 与 2048 肉眼几乎无差,显存差 4 倍。
|
|
183
|
-
*/
|
|
184
|
-
maxTextureSize?: number;
|
|
185
|
-
/**
|
|
186
|
-
* 光照模型(默认 `'pbr'`)。
|
|
187
|
-
*
|
|
188
|
-
* - `'pbr'`:`MeshStandardMaterial`,GGX + 环境球谐,质感最好也最贵
|
|
189
|
-
* - `'lambert'`:`MeshLambertMaterial`,只保留漫反射 + 平行光,片元开销约省一半;
|
|
190
|
-
* 白模 / 纯色 / 按高度着色这类不需要高光的模式肉眼差别很小
|
|
191
|
-
*
|
|
192
|
-
* 模块级全局状态:同页多个图层会互相覆盖,后创建的那个决定全局。
|
|
193
|
-
* 只影响**之后创建**的材质 —— 已加载的瓦片要重新加载才会换。
|
|
194
|
-
*/
|
|
195
|
-
materialQuality?: 'pbr' | 'lambert';
|
|
196
|
-
/** 自定义瓦片构建器(测试 / 服务端渲染时注入) */
|
|
197
|
-
buildTile?: BuildTileFn | null;
|
|
198
|
-
/**
|
|
199
|
-
* 可选:业务属性查询配置(iServer 数据服务)。
|
|
200
|
-
* 配上之后才能用 `colorByField()` 按业务字段着色 —— 属性值不在 S3M 瓦片里,只能去数据服务查。
|
|
201
|
-
*/
|
|
202
|
-
attributes?: AttributeQueryOptions;
|
|
203
|
-
/** 宿主请求重画的信号。MapLibre 传 `() => map.triggerRepaint()`;纯 three 宿主传自己的渲染循环 */
|
|
204
|
-
onRequestRepaint?: () => void;
|
|
205
|
-
/** 地图朝向(弧度),用于让灯光跟着视角走。不传则灯光方向固定 */
|
|
206
|
-
getBearing?: () => number;
|
|
207
|
-
/**
|
|
208
|
-
* 鉴权适配函数(全局默认,数据集可用自己的 `authenticate` 覆盖)。
|
|
209
|
-
* 内核主线程发出的全部请求(配置 scp / 瓦片 / 子图集 / 棱线缓存 / 属性查询)
|
|
210
|
-
* 发出前都过一遍,可改写 URL(加 `?token=`)或附加请求头。
|
|
211
|
-
* 不传 = 行为与旧版完全一致。见 `AuthenticateFn`。
|
|
212
|
-
*/
|
|
213
|
-
authenticate?: AuthenticateFn;
|
|
214
|
-
onStats?: (stats: Stats) => void;
|
|
215
|
-
onReady?: (entry: S3MDatasetEntry) => void;
|
|
216
|
-
onPick?: (result: PickResult | null) => void;
|
|
217
|
-
onError?: (error: unknown) => void;
|
|
218
|
-
/**
|
|
219
|
-
* 首次出现瓦片后自动预热另一种 `shading` 变体(默认开)。
|
|
220
|
-
*
|
|
221
|
-
* `flat` / `smooth` 是编译期变体,不预热的话第一次 `setStyle({ shading })` 会同步
|
|
222
|
-
* 编译着色器、卡一帧。预热在首帧之后异步做,期间跳一两帧渲染,肉眼不可见。
|
|
223
|
-
*/
|
|
224
|
-
prewarmShading?: boolean;
|
|
225
|
-
}
|
|
48
|
+
export type { PickResult, LightOptions, S3MViewerOptions, PickableRef, PathFollowOptions, } from './viewer/types.js';
|
|
226
49
|
/** 单体沿折线运动的参数 */
|
|
227
|
-
export interface PathFollowOptions {
|
|
228
|
-
/** 走完全程的时长(毫秒)。不传则按 speed 或默认 2000ms 推算 */
|
|
229
|
-
duration?: number;
|
|
230
|
-
/** 线速度(米/秒)。给了 duration 就以 duration 为准 */
|
|
231
|
-
speed?: number;
|
|
232
|
-
/** 是否循环 */
|
|
233
|
-
loop?: boolean;
|
|
234
|
-
/** 是否把折线首尾相连 */
|
|
235
|
-
closed?: boolean;
|
|
236
|
-
/** 缓动曲线:作用在**已走距离**上,默认 linear(恒速) */
|
|
237
|
-
easing?: EasingName | EasingFn;
|
|
238
|
-
/** 路径整体偏移(米),相当于路径原点 */
|
|
239
|
-
offset?: [number, number, number];
|
|
240
|
-
/** 单次走完(非循环)时回调 */
|
|
241
|
-
onComplete?: () => void;
|
|
242
|
-
}
|
|
243
50
|
export declare class S3MViewer {
|
|
244
51
|
readonly options: S3MViewerOptions;
|
|
245
52
|
readonly pickable: boolean;
|
|
@@ -267,12 +74,8 @@ export declare class S3MViewer {
|
|
|
267
74
|
readonly edgeMaterial: ThickLineMaterial;
|
|
268
75
|
/** 选中棱线材质(同上,选中棱线的逐网格材质共享它的对象) */
|
|
269
76
|
readonly selectionEdgeMaterial: ThickLineMaterial;
|
|
270
|
-
/**
|
|
271
|
-
private readonly
|
|
272
|
-
/** 选中棱线的外观 uniform */
|
|
273
|
-
private readonly _selEdgeStyleUniforms;
|
|
274
|
-
/** 全局外扩轮廓的外观 uniform:逐网格轮廓壳共享这些对象 */
|
|
275
|
-
private readonly _hullStyleUniforms;
|
|
77
|
+
/** 棱线装饰(见 viewer/EdgeDecorator.ts) */
|
|
78
|
+
private readonly _edges;
|
|
276
79
|
/** 3D 物理地表面 / 基坑开挖管理器 */
|
|
277
80
|
readonly groundManager: GroundManager;
|
|
278
81
|
/** 多数据集生命周期与锚点管理器 */
|
|
@@ -299,29 +102,15 @@ export declare class S3MViewer {
|
|
|
299
102
|
meterInMercator: number;
|
|
300
103
|
altitude?: number;
|
|
301
104
|
} | null);
|
|
302
|
-
|
|
303
|
-
private
|
|
304
|
-
private readonly _freePickIds;
|
|
105
|
+
/** 拾取表 / pickId 池 / 射线求交(见 viewer/PickService.ts) */
|
|
106
|
+
private readonly _picks;
|
|
305
107
|
/** SMID → 包含它的网格。改单个单体样式时只重算这几块,不用全量扫 */
|
|
306
108
|
private readonly _smidMeshes;
|
|
307
109
|
/** 每块网格的世界高度范围,用来增量维护 uHeightMin / uHeightMax */
|
|
308
|
-
|
|
309
|
-
private
|
|
310
|
-
|
|
311
|
-
private readonly
|
|
312
|
-
private _selection;
|
|
313
|
-
private _selectedMeshes;
|
|
314
|
-
private _outlineMesh;
|
|
315
|
-
private _outlineMeshes;
|
|
316
|
-
private _selectionEdges;
|
|
317
|
-
private _selectionEdgeMeshes;
|
|
318
|
-
private _edgesEnabled;
|
|
319
|
-
/** 当前生效的棱线画法(line / offset / hull / gpu),决定要不要建 / 拆哪种装饰 */
|
|
320
|
-
private _edgeModes;
|
|
321
|
-
/** GPU 描边后处理(深度 + 法线),只在 edges 含 'gpu' 时按帧执行 */
|
|
322
|
-
private _gpuEdge;
|
|
323
|
-
/** 给 GPU 描边传色用的临时 Color,避免每帧 new */
|
|
324
|
-
private readonly _gpuEdgeColor;
|
|
110
|
+
/** 世界高度范围增量维护(见 viewer/HeightIndex.ts) */
|
|
111
|
+
private readonly _heights;
|
|
112
|
+
/** 选中态与装饰(见 viewer/SelectionDecorator.ts) */
|
|
113
|
+
private readonly _sel;
|
|
325
114
|
/** 瓦片淡入通道的自增序号(不用 pickId:pickId 会被回收复用) */
|
|
326
115
|
private _tileFadeSeq;
|
|
327
116
|
/** setMode 编排的代次,用来作废被新调用顶掉的旧编排 */
|
|
@@ -338,15 +127,10 @@ export declare class S3MViewer {
|
|
|
338
127
|
private readonly _pathScratch;
|
|
339
128
|
/** 求切线用的第二个采样点(包围盒换算 GPU 路径朝向时用) */
|
|
340
129
|
private readonly _pathScratch2;
|
|
341
|
-
/** 预制棱线缓存(Crease Cache):从外部 source-creases 载入的全局统一 LineSegments,性能最高、视觉最干净 */
|
|
342
|
-
private _creaseLines;
|
|
343
|
-
/** 数据自带的棱线对象(LineSegments),改棱线颜色时只刷这些,不再全场景 traverse */
|
|
344
|
-
private readonly _nativeEdgeLines;
|
|
345
130
|
/** 点云对象集合:透明度动画时只刷它们,避免每帧遍历全部 pickables */
|
|
346
131
|
private readonly _pointClouds;
|
|
347
|
-
/**
|
|
348
|
-
private readonly
|
|
349
|
-
private _splatsSorted;
|
|
132
|
+
/** 泼溅排序调度(见 viewer/SplatLayer.ts) */
|
|
133
|
+
private readonly _splats;
|
|
350
134
|
/** 当前材质是否处于 transparent 状态,用来避免逐帧重复切换 program */
|
|
351
135
|
private _opacityTransparent;
|
|
352
136
|
/**
|
|
@@ -363,16 +147,10 @@ export declare class S3MViewer {
|
|
|
363
147
|
private readonly _frameMvp;
|
|
364
148
|
/** 颜色换算用的临时对象,避免每帧 new */
|
|
365
149
|
private readonly _colorScratch;
|
|
366
|
-
private _needsRepaint;
|
|
367
150
|
private _frame;
|
|
368
151
|
private readonly _fps;
|
|
369
|
-
|
|
370
|
-
private
|
|
371
|
-
private _keyLight;
|
|
372
|
-
private _fillLight;
|
|
373
|
-
/** 环境贴图的 PMREM 渲染目标(setEnvironment 建的,unmount 时释放) */
|
|
374
|
-
private _envRT;
|
|
375
|
-
private readonly _lightOptions;
|
|
152
|
+
/** 光源 / 色调映射 / 环境贴图(见 viewer/LightRig.ts) */
|
|
153
|
+
private readonly _lights;
|
|
376
154
|
private readonly _datasetQueue;
|
|
377
155
|
/** 宿主重画信号与地图朝向,构造时注入 */
|
|
378
156
|
private _onRequestRepaint;
|
|
@@ -411,45 +189,33 @@ export declare class S3MViewer {
|
|
|
411
189
|
restoreContext(gl: WebGLRenderingContext | WebGL2RenderingContext): void;
|
|
412
190
|
/** 解绑场景并释放全部 GPU 资源。对应 MapLibre 图层的 onRemove()。 */
|
|
413
191
|
unmount(): void;
|
|
414
|
-
private _createLights;
|
|
415
|
-
private _addLights;
|
|
416
|
-
private _applyLightOptions;
|
|
417
192
|
/**
|
|
418
|
-
*
|
|
419
|
-
*
|
|
193
|
+
* @internal 光源实例的转发 —— `lighting.test.ts` 直接读这几个字段。
|
|
194
|
+
* 实现全在 viewer/LightRig.ts。
|
|
420
195
|
*/
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
196
|
+
get _ambientLight(): THREE.AmbientLight | null;
|
|
197
|
+
get _hemiLight(): THREE.HemisphereLight | null;
|
|
198
|
+
get _keyLight(): THREE.DirectionalLight | null;
|
|
199
|
+
get _fillLight(): THREE.DirectionalLight | null;
|
|
200
|
+
/** @internal 光照位置按当前 bearing 重算,见 viewer/LightRig.ts */
|
|
201
|
+
_updateLights(): void;
|
|
202
|
+
private _addLights;
|
|
427
203
|
setLightingPreset(preset: LightingPreset): void;
|
|
428
|
-
/**
|
|
429
|
-
* 动态设置光照配置
|
|
430
|
-
*/
|
|
204
|
+
/** 动态设置光照配置 */
|
|
431
205
|
setLight(options: Partial<LightOptions>): void;
|
|
432
|
-
/**
|
|
433
|
-
* 获取当前光照配置快照
|
|
434
|
-
*/
|
|
206
|
+
/** 获取当前光照配置快照 */
|
|
435
207
|
getLight(): LightOptions;
|
|
436
|
-
/**
|
|
437
|
-
* 动态设置色调映射模式与曝光度
|
|
438
|
-
*/
|
|
208
|
+
/** 动态设置色调映射模式与曝光度 */
|
|
439
209
|
setToneMapping(toneMapping: THREE.ToneMapping, exposure?: number): void;
|
|
440
|
-
/**
|
|
441
|
-
* 获取当前色调映射模式与曝光度
|
|
442
|
-
*/
|
|
210
|
+
/** 获取当前色调映射模式与曝光度 */
|
|
443
211
|
getToneMapping(): {
|
|
444
212
|
toneMapping: THREE.ToneMapping;
|
|
445
213
|
toneMappingExposure: number;
|
|
446
214
|
};
|
|
447
215
|
/**
|
|
448
|
-
*
|
|
449
|
-
* - 'headlamp': 随地图方位角 bearing 旋转,主光始终在镜头上方,受光面面向镜头;
|
|
450
|
-
* - 'fixed': 固定世界方位角(如模拟恒定日光)。
|
|
216
|
+
* 挂 / 摘环境贴图。见 viewer/LightRig.ts(PMREM 预滤波 + 旧 RT 释放)。
|
|
451
217
|
*/
|
|
452
|
-
|
|
218
|
+
setEnvironment(source: string | THREE.Texture | null, intensity?: number): Promise<void>;
|
|
453
219
|
private _normalizeDatasets;
|
|
454
220
|
/** 追加一个数据集。图层 addLayer 之前调用会抛错。 */
|
|
455
221
|
addDataset(ds: S3MDatasetOptions): Promise<S3MDatasetEntry>;
|
|
@@ -663,7 +429,6 @@ export declare class S3MViewer {
|
|
|
663
429
|
private _isFeatureHidden;
|
|
664
430
|
getAllMeshes(): THREE.Mesh[];
|
|
665
431
|
private _meshesOf;
|
|
666
|
-
private _markOverridesDirty;
|
|
667
432
|
flushOverrides(): void;
|
|
668
433
|
/** @internal 内部状态纹理烘焙代理,保留供回归单测与钩子使用 */
|
|
669
434
|
_applyOverridesToMesh(mesh: THREE.Mesh): void;
|
|
@@ -682,26 +447,14 @@ export declare class S3MViewer {
|
|
|
682
447
|
* 通道 key 用自增序号而不是 pickId:pickId 会被回收复用,用它会串到新瓦片上。
|
|
683
448
|
*/
|
|
684
449
|
private _startTileFade;
|
|
685
|
-
/**
|
|
686
|
-
|
|
687
|
-
*
|
|
688
|
-
* 为什么需要:选中高亮是直接写在各 mesh 材质的 uSelBatch / uSelWhole 上的,
|
|
689
|
-
* 而 LOD 细化、瓦片重载、淘汰回补都会换掉 mesh —— 不重放的话,用户点中的那栋楼
|
|
690
|
-
* 一细化就失去高亮(状态还在 _selection.smid 里,只是没人往新 mesh 上刷)。
|
|
691
|
-
*/
|
|
692
|
-
/**
|
|
693
|
-
* 判断一块无 SMID 单体化信息的网格(如倾斜摄影或白模整块)是否空间覆盖当前选中命中点
|
|
694
|
-
*/
|
|
695
|
-
private _isMeshCoveringSelection;
|
|
696
|
-
private _replaySelectionOnto;
|
|
450
|
+
/** @internal 把当前选中重放到新登记的 mesh 上,见 viewer/SelectionDecorator.ts */
|
|
451
|
+
_replaySelectionOnto(mesh: THREE.Mesh): void;
|
|
697
452
|
/** 瓦片被淘汰:从拾取表和场景里摘掉,并深度彻底释放所有几何体与材质显存 */
|
|
698
453
|
private _unregisterTile;
|
|
699
454
|
/**
|
|
700
455
|
* 拾取 ID 只有 2 个字节(RG 两个通道),65535 个网格就到头了,
|
|
701
456
|
* 所以必须回收:瓦片淘汰 / 数据集移除时把 id 还回池子。
|
|
702
457
|
*/
|
|
703
|
-
private _allocPickId;
|
|
704
|
-
private _releasePickId;
|
|
705
458
|
/** 动态设置图层整体透明度 (0.0 ~ 1.0) */
|
|
706
459
|
setOpacity(opacity: number, transition?: TransitionOptions): void;
|
|
707
460
|
/**
|
|
@@ -715,20 +468,6 @@ export declare class S3MViewer {
|
|
|
715
468
|
getStyle(): S3MStyle & {
|
|
716
469
|
modeLabel: string;
|
|
717
470
|
};
|
|
718
|
-
/**
|
|
719
|
-
* 挂 / 摘环境贴图。
|
|
720
|
-
*
|
|
721
|
-
* 金属度(`setStyle({ metalness })`)**必须**有环境图才看得出质感:
|
|
722
|
-
* PBR 的金属几乎没有漫反射,画面全靠 `scene.environment` 里的环境反射,
|
|
723
|
-
* 没有它时 metalness 一高就整片发黑,只剩两盏平行灯打成的小高光点。
|
|
724
|
-
*
|
|
725
|
-
* @param source 等距柱状图(.hdr / .jpg / .png,2:1)地址,或已加载的 `THREE.Texture`;
|
|
726
|
-
* `null` = 关掉环境图
|
|
727
|
-
* @param intensity 环境光强度(`scene.environmentIntensity`,默认 1)
|
|
728
|
-
*
|
|
729
|
-
* 传入 URL 时纹理由内部加载并转成 PMREM(预滤波 mipmap);传 Texture 时不会接管它的生命周期。
|
|
730
|
-
*/
|
|
731
|
-
setEnvironment(source: string | THREE.Texture | null, intensity?: number): Promise<void>;
|
|
732
471
|
/** 把某个样式键的取值转成动画通道能吃的形状(标量 or 线性 RGB 三元组) */
|
|
733
472
|
private _animTargetOf;
|
|
734
473
|
/** 该样式键的动画维度:3 = 颜色,1 = 标量 */
|
|
@@ -792,171 +531,89 @@ export declare class S3MViewer {
|
|
|
792
531
|
* 加载 n 块瓦片就是 O(n²) 次矩阵乘 + n² 个垃圾对象。现在只在网格进出的记一次,
|
|
793
532
|
* 全局值从缓存里滚:只有被移除的那块正好卡在边界上时,才回退到一次 O(n) 重算。
|
|
794
533
|
*/
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
/**
|
|
798
|
-
|
|
799
|
-
private _recomputeHeightRange;
|
|
800
|
-
private _pushHeightRange;
|
|
534
|
+
/** @internal 见 viewer/HeightIndex.ts(regressions.test.ts 直接调) */
|
|
535
|
+
_addMeshHeight(mesh: THREE.Mesh): void;
|
|
536
|
+
/** @internal 见 viewer/HeightIndex.ts */
|
|
537
|
+
_removeMeshHeight(mesh: THREE.Mesh): void;
|
|
801
538
|
/** 建 SMID → 网格 反查表,逐单体改样式时才知道该重算哪几块 */
|
|
802
539
|
private _indexMeshSmids;
|
|
803
540
|
private _unindexMeshSmids;
|
|
804
|
-
/**
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
* (实测 20 个网格 1.9s),所以按 8ms 一帧切片,边建边出。
|
|
817
|
-
*
|
|
818
|
-
* 棱线本身用「屏幕空间等宽线」画(见 EdgeLines.ts):WebGL 的 lineWidth 基本无效,
|
|
819
|
-
* 只有摊成面向屏幕的四边形,`edgeWidth` 才能真正调粗。
|
|
820
|
-
*
|
|
821
|
-
* 带 `transition` 时做「淡入 / 淡出」,**不对几何做插值**(几何没法插值):
|
|
822
|
-
* 开:立刻置位 + 开始分片建线,同时 `uEdgeFade` 0→1 —— 建好一块亮一块,视觉上是渐显;
|
|
823
|
-
* 关:`uEdgeFade` 1→0,淡完才 dispose,避免棱线「啪」一下消失。
|
|
824
|
-
*/
|
|
541
|
+
/** @internal 测试用:棱线是否开启(实现在 EdgeDecorator) */
|
|
542
|
+
get _edgesEnabled(): boolean;
|
|
543
|
+
/** @internal 测试用:当前画法 */
|
|
544
|
+
get _edgeModes(): EdgeModes;
|
|
545
|
+
/** @internal 测试用:GPU 描边实例(可替换) */
|
|
546
|
+
get _gpuEdge(): GpuEdgePass | null;
|
|
547
|
+
set _gpuEdge(v: GpuEdgePass | null);
|
|
548
|
+
/** @internal 测试用:给一块网格补折边线 */
|
|
549
|
+
_ensureEdges(mesh: THREE.Mesh): void;
|
|
550
|
+
/** @internal 测试用:拆掉一块网格的棱线装饰 */
|
|
551
|
+
_removeEdges(mesh: THREE.Mesh): void;
|
|
552
|
+
/** 全局棱线开关,实现在 viewer/EdgeDecorator.ts */
|
|
825
553
|
setEdges(edges: EdgesOption, transition?: TransitionOptions): void;
|
|
826
|
-
/**
|
|
827
|
-
private _setEdgeFade;
|
|
828
|
-
/** 释放所有现算棱线几何 */
|
|
829
|
-
private _disposeEdges;
|
|
830
|
-
/**
|
|
831
|
-
* 挂载预制棱线缓存(Crease Cache)。
|
|
832
|
-
*
|
|
833
|
-
* 直接把 `source-creases.f32` 这类 Float32Array 缓冲载入为一组全局统一的
|
|
834
|
-
* LineSegments —— 相比逐 Mesh 现算 EdgesGeometry,性能高一个量级,视觉也最干净。
|
|
835
|
-
* 坐标按「场景本地坐标」(相对场景锚点的米)处理,与瓦片几何同一坐标系。
|
|
836
|
-
*
|
|
837
|
-
* @param url 棱线缓存地址(二进制 Float32 序列:x,y,z,x,y,z,… 成对成段)
|
|
838
|
-
*/
|
|
554
|
+
/** 挂载预制棱线缓存(Crease Cache),见 viewer/EdgeDecorator.ts */
|
|
839
555
|
loadCreases(url: string): Promise<void>;
|
|
840
556
|
/** 移除并释放预制棱线缓存 */
|
|
841
557
|
clearCreases(): void;
|
|
842
|
-
/**
|
|
843
|
-
* 让全局棱线材质跟上 style.edgeColor / edgeWidth / edgeOpacity / edgeOffset。
|
|
844
|
-
*
|
|
845
|
-
* 全程 O(1):只有一份共享 edgeMaterial(所有逐 mesh 棱线都用它)+ 一份预制缓存
|
|
846
|
-
* + 一批共享外观对象的轮廓壳,所以棱线淡入淡出只要改一个 uniform,
|
|
847
|
-
* 新建瓦片自动继承当前进度。
|
|
848
|
-
*/
|
|
849
|
-
private _syncEdgeStyle;
|
|
850
|
-
/** 让数据自带的棱线跟着 style.edgeColor / opacity 走(这些是 LineBasicMaterial,改不了粗细) */
|
|
851
|
-
private _styleEdgeLine;
|
|
852
|
-
/**
|
|
853
|
-
* 刷新所有棱线外观。
|
|
854
|
-
*
|
|
855
|
-
* 数据自带的棱线是逐对象的 LineBasicMaterial,改颜色只能一个个写;但原来每次都要
|
|
856
|
-
* 遍历整个数据集树(几千个节点),颜色动画逐帧跑就是灾难。改成只刷注册时收集好的
|
|
857
|
-
* 那批 LineSegments,复杂度降到 O(棱线条数)。
|
|
858
|
-
*/
|
|
859
|
-
private _refreshEdgeLines;
|
|
860
|
-
/** 地形 / 绿地 / 道路 / 地面铺装等不参与自动描边(数据自带棱线包另说) */
|
|
861
|
-
private static readonly _EDGE_SKIP_KEYWORDS;
|
|
862
|
-
/** 数据集级别的棱线开关:enableEdges 优先,否则跟随全局 style.edges */
|
|
863
|
-
private _datasetEdgesEnabled;
|
|
864
|
-
/** 该 mesh 是否命中「跳过自动描边」的关键字(skeletonName / 数据集名) */
|
|
865
|
-
private _shouldSkipAutoEdges;
|
|
866
|
-
/**
|
|
867
|
-
* 这块网格还缺哪种棱线装饰(缺就建,齐了就不动)。
|
|
868
|
-
*
|
|
869
|
-
* setEdges 的分片建线靠它筛「还没建完的」,注册新瓦片也靠它决定要不要动手。
|
|
870
|
-
*/
|
|
871
|
-
private _needsEdgeDecoration;
|
|
872
|
-
/** 按当前画法补齐这块网格的棱线装饰 */
|
|
873
|
-
private _ensureEdgeDecoration;
|
|
874
|
-
private _ensureEdges;
|
|
875
|
-
/**
|
|
876
|
-
* 给一块网格挂「背面外扩轮廓」(整场景版)。
|
|
877
|
-
*
|
|
878
|
-
* 复用选中侧那套 `createOutlineMaterial`:顶点沿法线鼓 `edgeHullWidth` 米、只画背面,
|
|
879
|
-
* 于是被本体挡住的部分不显示,露出来的那圈就是描边。与折边线的差别在于——
|
|
880
|
-
* 这里**不建任何新几何**,成本只是把同一块网格多画一遍,折边判定那套 CPU 活全省了。
|
|
881
|
-
*
|
|
882
|
-
* 实例化几何拿不到逐实例变换(轮廓壳是 mesh 的子节点,不吃 instanceMatrix),
|
|
883
|
-
* 直接跳过:宁可这栋没描边,也不要所有实例的壳叠在原点。
|
|
884
|
-
*/
|
|
885
|
-
private _ensureHull;
|
|
886
|
-
/**
|
|
887
|
-
* 给一块网格造专属的棱线材质。
|
|
888
|
-
*
|
|
889
|
-
* 棱线材质必须逐网格一份,因为它要绑定**这个网格**的单体状态纹理;但外观
|
|
890
|
-
* (颜色 / 粗细 / 透明度)必须全局统一——所以外观 uniform 直接复用
|
|
891
|
-
* `_edgeStyleUniforms` 里的对象,`_syncEdgeStyle()` 改一次全部生效,
|
|
892
|
-
* program 也因为着色器相同而只编译一次。
|
|
893
|
-
*/
|
|
894
|
-
private _createEdgeMaterial;
|
|
895
|
-
/** 选中棱线的逐网格材质,道理同上 */
|
|
896
|
-
private _createSelectionEdgeMaterial;
|
|
897
|
-
private _removeEdges;
|
|
898
|
-
/** 获取指定屏幕像素对应的场景射线(用于高精度求交与穿透拾取) */
|
|
558
|
+
/** 屏幕像素 → 场景射线,见 viewer/PickService.ts */
|
|
899
559
|
getRayAt(x: number, y: number): THREE.Ray | null;
|
|
900
|
-
|
|
901
|
-
private _buildPickResult;
|
|
902
|
-
/**
|
|
903
|
-
* 泼溅的拾取结果。
|
|
904
|
-
*
|
|
905
|
-
* 整块泼溅瓦片当一个单体(没有单体级 smid 可报),命中点由 `splatRaycast` 给出 ——
|
|
906
|
-
* 它按每个高斯的 3σ 球求交,比拾取那一趟为了命中率摊开的 4px 方块准得多。
|
|
907
|
-
* 包围盒必须由 `iCenter` 算:geometry 的 position 只是 [-1,1]² 的四边形角点。
|
|
908
|
-
*/
|
|
909
|
-
private _buildSplatPickResult;
|
|
910
|
-
/** 按 canvas 左上角的 CSS 像素坐标拾取。 */
|
|
560
|
+
/** 按 canvas 左上角的 CSS 像素坐标拾取 */
|
|
911
561
|
pick(x: number, y: number): PickResult | null;
|
|
912
|
-
/**
|
|
913
|
-
* 拾取指定屏幕像素对应的世界坐标与场景位置。
|
|
914
|
-
* 优先与命中的建筑网格精确求交;未命中建筑时若视线与地表相交则返回地面交点。
|
|
915
|
-
*/
|
|
562
|
+
/** 拾取并返回经纬度 + 高程 */
|
|
916
563
|
pickPosition(x: number, y: number): {
|
|
917
564
|
lngLat: [number, number];
|
|
918
565
|
altitude: number;
|
|
919
566
|
point: [number, number, number];
|
|
920
567
|
} | null;
|
|
921
|
-
/**
|
|
922
|
-
* 沿视线方向穿透拾取多个单体,按由近至远排序返回。
|
|
923
|
-
*/
|
|
568
|
+
/** 穿透拾取:沿射线返回前 `limit` 个命中 */
|
|
924
569
|
drillPick(x: number, y: number, limit?: number): PickResult[];
|
|
925
|
-
/**
|
|
926
|
-
* 获取指定 SMID 单体的经纬度包围盒 [[minLng, minLat], [maxLng, maxLat]]。
|
|
927
|
-
* 若模型尚未加载到场景中或无此单体则返回 null。
|
|
928
|
-
*/
|
|
570
|
+
/** 单体的经纬度包围盒 */
|
|
929
571
|
getFeatureBounds(smid: number): [[number, number], [number, number]] | null;
|
|
930
|
-
/**
|
|
931
|
-
|
|
932
|
-
/**
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
572
|
+
/** @internal 见 viewer/PickService.ts */
|
|
573
|
+
_intersectMeshAtRay(mesh: THREE.Mesh, ray: THREE.Ray, instanceIndex?: number): THREE.Vector3 | null;
|
|
574
|
+
/** @internal 见 viewer/PickService.ts */
|
|
575
|
+
_buildPickResult(hit: {
|
|
576
|
+
objectId: number;
|
|
577
|
+
batchId: number;
|
|
578
|
+
instanceIndex?: number;
|
|
579
|
+
}, ref: PickableRef, exactPoint?: THREE.Vector3, ray?: THREE.Ray): PickResult | null;
|
|
580
|
+
/** @internal 见 viewer/PickService.ts */
|
|
581
|
+
_buildSplatPickResult(hit: {
|
|
582
|
+
objectId: number;
|
|
583
|
+
batchId: number;
|
|
584
|
+
instanceIndex?: number;
|
|
585
|
+
}, ref: PickableRef, exactPoint?: THREE.Vector3, ray?: THREE.Ray): PickResult | null;
|
|
586
|
+
/** @internal 见 viewer/PickService.ts */
|
|
587
|
+
_instanceFeature(mesh: THREE.Mesh, geoRef: GeoPackageEntry | undefined, instanceIndex: number): InstanceFeature | null;
|
|
588
|
+
/** @internal 见 viewer/PickService.ts */
|
|
589
|
+
_instanceBox(mesh: THREE.Mesh, instanceIndex: number): SegmentBox | null;
|
|
590
|
+
/** @internal 拾取 id 池,见 viewer/PickService.ts */
|
|
591
|
+
_allocPickId(): number;
|
|
592
|
+
/** @internal */
|
|
593
|
+
_releasePickId(id: number): void;
|
|
594
|
+
/** @internal 拾取表(测试直接读写),见 viewer/PickService.ts */
|
|
595
|
+
get _pickables(): Map<number, PickableRef>;
|
|
596
|
+
/**
|
|
597
|
+
* 选中一个单体(或整块网格),高亮与轮廓装饰见 viewer/SelectionDecorator.ts。
|
|
598
|
+
* 传 `null` 清空选中;`silent` 为真时不触发 `onPick`。
|
|
599
|
+
*/
|
|
600
|
+
select(result: PickResult | null, opts?: {
|
|
936
601
|
silent?: boolean;
|
|
937
602
|
}): void;
|
|
938
|
-
/**
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
private _addSelectionHull;
|
|
947
|
-
/** 只改 uniform:颜色 / 粗细 / 拔高,拖着滑块实时生效,不重建几何 */
|
|
948
|
-
private _syncSelectionStyle;
|
|
949
|
-
/** 选中单体的实际拔高 = 全局选中拔高 + 该单体的独立拔高(与着色器口径一致) */
|
|
950
|
-
private _selectionElevation;
|
|
951
|
-
private _clearSelectionDecoration;
|
|
603
|
+
/** @internal 选中外观跟随样式变化,见 viewer/SelectionDecorator.ts */
|
|
604
|
+
_syncSelectionStyle(): void;
|
|
605
|
+
/** @internal 测试用:当前选中 */
|
|
606
|
+
get _selection(): PickResult | null;
|
|
607
|
+
/** @internal 测试用:被高亮的网格 */
|
|
608
|
+
get _selectedMeshes(): THREE.Object3D[];
|
|
609
|
+
/** @internal 测试用:选中棱线的网格列表 */
|
|
610
|
+
get _selectionEdgeMeshes(): THREE.Mesh[];
|
|
952
611
|
/**
|
|
953
612
|
* 执行一帧 GPU 描边(法线 + 深度后处理)。
|
|
954
613
|
*
|
|
955
614
|
* 参数全部来自 style,不缓存:`edgeWidth` 在这里是「采样偏移」,线宽 ≈ 2×它;
|
|
956
615
|
* `edgeThreshold` 是折边敏感度(夹角小于它不描),和 CPU 折边线同一口径。
|
|
957
616
|
*/
|
|
958
|
-
private _renderGpuEdges;
|
|
959
|
-
/** 等宽线要按设备像素换算线宽:uResolution 用绘图缓冲尺寸,uDpr 是缓冲 / CSS 的比值 */
|
|
960
617
|
private _updateLineResolution;
|
|
961
618
|
/** 当前 LOD 切换距离缩放系数 */
|
|
962
619
|
get lodRangeScale(): number;
|
|
@@ -992,6 +649,14 @@ export declare class S3MViewer {
|
|
|
992
649
|
* 实际裁剪发生在下一次 `update()` 末尾,不会当场掉内容。
|
|
993
650
|
*/
|
|
994
651
|
setMaxTriangles(n: number, datasetId?: string): void;
|
|
652
|
+
/** 当前每个数据集的驻留显存/内存字节预算。Infinity = 不限制 */
|
|
653
|
+
get maxMemory(): number;
|
|
654
|
+
/**
|
|
655
|
+
* 调整每个数据集驻留显存字节数的软上限(默认 Infinity = 不限制)。
|
|
656
|
+
* 不传 `datasetId` 时对所有已存在数据集立即生效,并作为之后新增数据集的默认值。
|
|
657
|
+
* 实际裁剪发生在每帧调度末尾(make-before-break),不会当场开洞。
|
|
658
|
+
*/
|
|
659
|
+
setMaxMemory(bytes: number, datasetId?: string): void;
|
|
995
660
|
/** 当前各向异性过滤上限。Infinity = 不封顶 */
|
|
996
661
|
get anisotropyCap(): number;
|
|
997
662
|
/**
|
|
@@ -1018,7 +683,8 @@ export declare class S3MViewer {
|
|
|
1018
683
|
* 乱序混合就是满屏彩色噪点。相机没动且没有新瓦片时整个跳过;
|
|
1019
684
|
* 单个瓦片顺序本来就对时 sortSplatMesh 内部也会跳过重写。
|
|
1020
685
|
*/
|
|
1021
|
-
|
|
686
|
+
/** @internal 泼溅按视深重排,见 viewer/SplatLayer.ts */
|
|
687
|
+
_sortSplats(): void;
|
|
1022
688
|
/**
|
|
1023
689
|
* 渲染一帧。所有宿主相关量都由调用方喂进来,viewer 不碰任何地图 API:
|
|
1024
690
|
*
|