Work[], LooseWorkWithExtrinsics, FiveLoadOptions.five.load() 参数配置。Definition: FiveLoadOptions, LooseWorkWithExtrinsics
// 输入数据类型
type FiveLoadInput =
| Work[]
| LooseWorkWithExtrinsics[]
| string[]; // JSON Strings
// 带位姿信息的 LooseWork (用于调整模型在场景中的位置)
interface LooseWorkWithExtrinsics {
work: LooseWork; // Work 数据内容
transform?: number[]; // 4x4 变换矩阵 (数组格式), 用于整体偏移/旋转该 Work
workCode?: string; // 强制指定 WorkCode (覆盖数据中的默认值)
}
// 加载选项
interface FiveLoadOptions {
mode?: "replace" | "add"; // 替换当前场景 vs 追加到当前场景
// ... 其他常规选项
}
当 Five 加载多个 Work 时,它们被存储在 five.works 集合中。
five.works 是一个增强的只读数组 (ReadonlyArray<Work>)。getWork(workCode) 和 getObserver(panoId) 等辅助方法。在多 Work 场景中,workCode 是区分不同 Work 的关键。
workCode。如果数据中重复,建议在加载时通过 ParseOptions 重写。five.state 和 five.setState 中需要通过 workCode 来指定目标 Work。不同 Work 的原始模型可能位于其各自的坐标系原点。为了在沙盘中正确排列它们(避免重叠),需要使用 transform 矩阵对每个 Work 进行空间变换(平移、旋转)。
five.load(input, state, options) 是入口方法。
| 参数 | 类型 | 说明 |
|---|---|---|
input |
FiveLoadInput |
Work 数据数组。 |
options.mode |
"replace" | "add" |
默认为 "replace" (清空当前场景)。设为 "add" 可保留现有场景并追加新 Work。 |
一次性加载两个 Work。
const works = [workDataA, workDataB];
five.load(works).then(() => {
console.log("所有 Work 加载完成");
console.log("当前 Works:", five.works);
});
使用 transform 将两个户型并排摆放。
import * as THREE from "three";
// 创建变换矩阵:向 X 轴正方向平移 20 米
const matrixB = new THREE.Matrix4().makeTranslation(20, 0, 0);
const input = [
// Work A: 保持在原点
{ work: workDataA },
// Work B: 偏移位置
{
work: workDataB,
transform: matrixB.toArray()
}
];
five.load(input);
在不销毁当前场景的情况下,追加一个新的 Work。
// 假设当前已经加载了 Work A
// 追加 Work C
five.load(workDataC, undefined, {
mode: "add" // 关键参数
}).then(() => {
console.log("Work C 已加入场景");
});
跳转到指定 Work 的特定点位。
const targetWorkCode = "work-id-b";
// 方式一:指定点位索引
five.setState({
workCode: targetWorkCode,
panoIndex: 0, // 目标 Work 的第 0 个点位
mode: "Panorama"
});
// 方式二:查找特定 Work
const targetWork = five.works.getWork(targetWorkCode);
if (targetWork) {
// 你的业务逻辑
}
workCode,SDK 行为可能不可预期。务必确保唯一性。
LooseWorkWithExtrinsics 时传入 workCode 字段强制覆盖。transform 仅影响 3D 模型的渲染位置。Work 内部的点位坐标 (observer.position) 也会自动应用此变换,但开发者在进行手动射线检测或计算时,需注意区分原始坐标和世界坐标。tags: [多场景, 沙盘, 多户型, 拼接, 追加, 切换场景, 多楼盘, multi-work, sandbox, works, load, transform, workCode]