Files
bim_engine/docs/ENGINNE_3D/构件位置数据格式.md
2026-03-26 09:34:21 +08:00

225 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 构件位置与视角数据格式规范
## 概述
本文档定义了 BIM 引擎中构件位置查询issueReport返回的数据格式。该数据结构用于问题报告、构件定位、视角恢复等场景。
## 数据格式
### 完整数据结构
```typescript
interface ComponentPositionData {
/** 楼层/标高名称 */
Floor: string;
/** 轴线位置 */
Axis: string;
/** 构件唯一标识符 */
ElementId: number;
/** 构件名称(可能为空) */
ElementName: string;
/** 模型与视角数据 */
modelJson: ModelJson;
}
interface ModelJson {
/** 模型资源的 URL 地址 */
Url: string;
/** 构件 ID 数组 */
ids: number[];
/** 当前相机参数 */
camera: CameraConfig;
/** 相机恢复姿态(包含正交/透视模式) */
cameraRestorePose: CameraRestorePose;
}
```
## 字段详解
### 基础信息
| 字段 | 类型 | 描述 | 示例 |
|------|------|------|------|
| `Floor` | string | 构件所在的楼层或标高名称 | `"标高B1FL"` |
| `Axis` | string | 构件在平面图中的轴线位置 | `"C-D交5-6"` |
| `ElementId` | number | 构件在模型中的唯一标识符 | `465979` |
| `ElementName` | string | 构件名称,可能为空字符串 | `""` |
### modelJson 对象
#### Url
- **类型**: `string`
- **描述**: 模型资源的完整 URL 地址
- **示例**: `"https://lyz-1259524260.cos.ap-guangzhou.myqcloud.com/iflow/models/417664a3-76c8-4d94-9344-1337246a5d4e/"`
#### ids
- **类型**: `number[]`
- **描述**: 关联的构件 ID 数组,通常包含当前查询的构件 ID
- **示例**: `[465979]`
### Camera 配置
当前相机的位置和方向信息:
```typescript
interface CameraConfig {
position: Vector3; // 相机位置
forwardDirection: Vector3; // 相机前向方向(视线方向)
upDirection: Vector3; // 相机的上方向
}
interface Vector3 {
x: number;
y: number;
z: number;
}
```
**示例值**:
- **position**: `{"x": 229.68, "y": 247.98, "z": 233.79}` - 相机在世界坐标系中的位置
- **forwardDirection**: `{"x": -0.577, "y": -0.577, "z": -0.577}` - 相机朝向(单位向量)
- **upDirection**: `{"x": -0.408, "y": 0.816, "z": -0.408}` - 相机的上方向(单位向量)
### Camera Restore Pose相机恢复姿态
用于恢复特定视角的完整配置:
```typescript
interface CameraRestorePose {
type: "orthographic" | "perspective"; // 投影类型
position: Vector3; // 相机位置
rotation: Euler; // 欧拉角旋转
quaternion: Quaternion; // 四元数旋转
target: Vector3; // 目标点(观察中心)
zoom: number; // 缩放级别
orthographicHeight: number; // 正交相机的高度(仅正交模式)
}
interface Euler {
x: number; // 绕X轴旋转弧度
y: number; // 绕Y轴旋转弧度
z: number; // 绕Z轴旋转弧度
}
interface Quaternion {
x: number;
y: number;
z: number;
w: number;
}
```
**字段说明**:
| 字段 | 类型 | 描述 |
|------|------|------|
| `type` | string | 投影模式:`orthographic`(正交)或 `perspective`(透视) |
| `position` | Vector3 | 相机在世界坐标系中的位置 |
| `rotation` | Euler | 相机的欧拉角旋转(弧度) |
| `quaternion` | Quaternion | 相机的四元数旋转(更稳定的旋转表示) |
| `target` | Vector3 | 相机的观察目标点 |
| `zoom` | number | 缩放级别1 为默认 |
| `orthographicHeight` | number | 正交投影下的视口高度(单位:世界坐标) |
## 使用场景
### 1. 问题报告定位
当用户在 BIM 模型中发现问题时,可以记录构件位置和当前视角,生成问题报告:
```typescript
// 获取构件位置数据
const positionData = engine.engine?.getModelPosition({
url: "https://.../model/",
ids: [465979]
});
// 提交到问题系统
issueReport.create({
title: "发现结构问题",
location: positionData
});
```
### 2. 视角恢复
通过 `cameraRestorePose` 数据,可以精确恢复到查看该构件时的视角:
```typescript
function restoreCamera(pose: CameraRestorePose) {
if (pose.type === 'orthographic') {
camera.setOrthographic(pose.orthographicHeight);
} else {
camera.setPerspective(fov);
}
camera.position.set(pose.position.x, pose.position.y, pose.position.z);
camera.lookAt(pose.target.x, pose.target.y, pose.target.z);
camera.zoom = pose.zoom;
}
```
### 3. 构件信息展示
展示构件的基础位置信息:
```typescript
const info = {
楼层: data.Floor,
轴线: data.Axis,
构件ID: data.ElementId,
构件名称: data.ElementName || "未命名构件"
};
```
## 注意事项
1. **坐标系**: 所有坐标数据均采用世界坐标系World Coordinate System
2. **单位**: 角度单位为弧度radians长度单位与模型单位一致通常为毫米
3. **空值处理**: `ElementName` 可能为空字符串,调用方需要做好默认值处理
4. **相机类型**: 根据 `cameraRestorePose.type` 判断当前是透视还是正交投影
5. **数据时效性**: 相机数据反映了查询瞬间的视角状态
## 相关 API
### 获取构件位置
```typescript
engine.engine?.getModelPosition(params: {
url: string;
ids: number[];
}): ComponentPositionData | null
```
**参数说明**:
- `url`: 模型的 URL 地址
- `ids`: 要查询的构件 ID 数组
**返回值**: 构件位置与视角数据,失败返回 `null`
### 示例调用
```typescript
const result = engine.engine?.getModelPosition({
url: "https://lyz-1259524260.cos.ap-guangzhou.myqcloud.com/iflow/models/417664a3-76c8-4d94-9344-1337246a5d4e/",
ids: [465979]
});
console.log('楼层:', result.Floor); // "标高B1FL"
console.log('轴线:', result.Axis); // "C-D交5-6"
console.log('构件ID:', result.ElementId); // 465979
console.log('相机位置:', result.modelJson.camera.position);
```
## 版本历史
| 版本 | 日期 | 说明 |
|------|------|------|
| 1.0.0 | 2026-03-24 | 初始版本,定义 issueReport 数据格式 |