10 KiB
10 KiB
| outline | ||
|---|---|---|
|
CubePanel
- 源文件:
packages/sdk/src/mesh/CubePanel.ts - 文档位置:
packages/docs/api/mesh/CubePanel.md
枚举:LabelPosition
- 作用:标签位置枚举
| 枚举项 | 值 | 说明 |
|---|---|---|
TOP |
'top' |
枚举值 TOP。 |
BOTTOM |
'bottom' |
枚举值 BOTTOM。 |
LEFT |
'left' |
枚举值 LEFT。 |
RIGHT |
'right' |
枚举值 RIGHT。 |
接口:ISmallTextConfig
- 作用:小字配置接口
字段
| 字段名 | 类型 | 必填 | 作用 |
|---|---|---|---|
text |
string |
是 | 文字内容 |
cubeIndex |
number |
是 | 目标正方体索引(0-4),-1 表示全部 |
rotation |
number |
否 | 旋转角度(度) |
fontSize |
number |
否 | 字体大小(像素) |
color |
string |
否 | 字体颜色 |
fontWeight |
string |
否 | 字体权重 |
offset |
number |
否 | 与面板边缘的距离(3D单位) |
接口:ICubeData
- 作用:小正方体数据接口
字段
| 字段名 | 类型 | 必填 | 作用 |
|---|---|---|---|
color |
THREE.Color |
是 | 颜色 |
text |
string |
是 | 文字 |
接口:ISinglePanelOptions
- 作用:单个面板配置选项
字段
| 字段名 | 类型 | 必填 | 作用 |
|---|---|---|---|
name |
string |
是 | 面板名称 |
size |
number |
否 | 面板大小,three 的单位 |
cubeSize |
number |
否 | 小正方体大小 |
cubeGap |
number |
否 | 小正方体间距 |
position |
THREE.Vector3 |
否 | 面板位置 |
rotation |
THREE.Euler |
否 | 面板旋转 |
initialData |
ICubeData[][] |
否 | 初始数据 |
titleConfig |
{ text: string; position: LabelPosition; rotation?: number; fontSize?: number; color?: string; offset?: number; } |
否 | 标题配置 |
smallTextConfig |
{ position: LabelPosition; smallText1?: ISmallTextConfig[]; smallText2?: ISmallTextConfig[]; rotation?: number; } |
否 | 小字乐配置 |
visibleColumns |
number[] |
否 | 可见列索引数组,只有这些列会显示,其他列显示为白色 |
类:CubePanel
- 作用:单个面板类 表示一个由5*5个小正方体构成的面板
构造函数
new CubePanel(options: ISinglePanelOptions)
-
作用:创建单个面板
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
options |
ISinglePanelOptions |
是 | - 配置选项 |
- 出参:
CubePanel - 返回说明:返回当前类实例。
属性
| 属性名 | 可见性 | 类型 | 作用 |
|---|---|---|---|
name |
public |
string |
面板名称 |
group |
public |
THREE.Group |
面板组对象 |
cubeData |
public |
Map<string, ICubeData> |
小正方体数据映射 |
panelMesh |
public |
THREE.Mesh | null |
面板网格 |
options |
public |
Required<ISinglePanelOptions> |
配置选项 |
titleObject |
public |
THREE.Mesh | null |
标题对象 |
titleConfig |
public |
{ text: string; position: LabelPosition; rotation: number; fontSize: number; color: string; offset?: number } | null |
标题配置 |
fontLoader |
public |
FontLoader |
字体加载器 |
font |
public |
any |
加载的字体 |
smallTextObjects |
public |
THREE.Mesh[] |
小字对象数组 |
smallTextPlanes |
public |
THREE.Mesh[] |
小字平面几何体数组 |
smallTextCanvas |
public |
HTMLCanvasElement | null |
小字生成的 canvas |
visibleColumns |
public |
Set<number> |
可见列索引集合 |
方法
getModelSize(targetModel: THREE.Object3D): THREE.Vector3 | null
-
作用:静态方法:获取场景中指定名称的模型并计算其包围盒大小
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
targetModel |
THREE.Object3D |
是 | 参数 targetModel,类型为 THREE.Object3D。 |
- 出参:
THREE.Vector3 \| null - 返回说明:模型的包围盒大小,如果未找到模型则返回 null
getModelFaceCenters(targetModel: THREE.Object3D): { [key: string]: THREE.Vector3; } | null
-
作用:静态方法:获取场景中指定名称的模型并计算其包围盒六个面的中心点位置
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
targetModel |
THREE.Object3D |
是 | 参数 targetModel,类型为 THREE.Object3D。 |
- 出参:
{ [key: string]: THREE.Vector3; } \| null - 返回说明:模型的包围盒六个面的中心点位置,如果未找到模型则返回 null
createPanel(): void
-
作用:创建面板
-
入参:无
-
出参:
void -
返回说明:无返回值。
initDefaultData(): void
-
作用:初始化默认数据
-
入参:无
-
出参:
void -
返回说明:无返回值。
generatePanelHTML(): string
-
作用:生成面板的 HTML
-
入参:无
-
出参:
string -
返回说明:HTML 字符串
updatePanelTexture(): Promise<void>
-
作用:将 HTML 转换为纹理并更新面板
-
入参:无
-
出参:
Promise<void> -
返回说明:返回 Promise,解析结果类型为
void。
setCubeData(row: number, col: number, data: ICubeData): void
-
作用:设置小正方体数据
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
row |
number |
是 | - 行索引 |
col |
number |
是 | - 列索引 |
data |
ICubeData |
是 | - 小正方体数据 |
- 出参:
void - 返回说明:无返回值。
getCubeData(row: number, col: number): ICubeData | undefined
-
作用:获取小正方体数据
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
row |
number |
是 | - 行索引 |
col |
number |
是 | - 列索引 |
- 出参:
ICubeData \| undefined - 返回说明:小正方体数据
setPanelData(data: ICubeData[][]): void
-
作用:批量设置面板数据
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
data |
ICubeData[][] |
是 | - 面板数据 |
- 出参:
void - 返回说明:无返回值。
setTitle(titleConfig: ISinglePanelOptions['titleConfig']): void
-
作用:设置面板标题
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
titleConfig |
ISinglePanelOptions['titleConfig'] |
是 | - 标题配置 |
- 出参:
void - 返回说明:无返回值。
loadFontAndCreateTitle(): void
-
作用:加载字体并创建标题
-
入参:无
-
出参:
void -
返回说明:无返回值。
createTitleObject(): void
-
作用:创建标题对象
-
入参:无
-
出参:
void -
返回说明:无返回值。
setSmallText(smallTextConfig: ISinglePanelOptions['smallTextConfig']): Promise<void>
-
作用:设置小字
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
smallTextConfig |
ISinglePanelOptions['smallTextConfig'] |
是 | - 小字配置 |
- 出参:
Promise<void> - 返回说明:返回 Promise,解析结果类型为
void。
createSmallTextHTML(smallTextConfig: ISinglePanelOptions['smallTextConfig']): Promise<void>
-
作用:使用 HTML 实现小字,在一个大的 div 中创建所有小字,然后转为 canvas 到一个新的平面几何体
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
smallTextConfig |
ISinglePanelOptions['smallTextConfig'] |
是 | - 小字配置 |
- 出参:
Promise<void> - 返回说明:返回 Promise,解析结果类型为
void。
clearSmallText(): void
-
作用:清理小字
-
入参:无
-
出参:
void -
返回说明:无返回值。
clearTitle(): void
-
作用:清理标题对象
-
入参:无
-
出参:
void -
返回说明:无返回值。
addDebugSpheres(): void
-
作用:添加调试小球,在小字和mountGroup的原点添加不同颜色的小球
-
入参:无
-
出参:
void -
返回说明:无返回值。
clearDebugSpheres(): void
-
作用:清理调试小球
-
入参:无
-
出参:
void -
返回说明:无返回值。
dispose(): void
-
作用:销毁面板
-
入参:无
-
出参:
void -
返回说明:无返回值。
setVisibleColumns(columns: number[]): void
-
作用:设置可见列
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
columns |
number[] |
是 | - 可见列索引数组 |
- 出参:
void - 返回说明:无返回值。
toggleColumnVisibility(column: number): void
-
作用:切换列的可见性
-
入参:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
column |
number |
是 | - 列索引 |
- 出参:
void - 返回说明:无返回值。
构造示例
- 来源:
packages/demo/src/panels/TunnelScene/LoadSurface.vue
text: config.title,
position: LabelPosition.TOP,
rotation: 0,
fontSize: 1,
color: '#000000',
offset: 1
},
smallTextConfig: config.smallTextConfig,
// ZD 面只显示第2列(索引为2)
visibleColumns: key === 'ZD' ? [2] : undefined
};
const panel = new CubePanel(panelOptions);
panel.group.visible = false; // 初始隐藏
viewer.scene.add(panel.group);
panels.set(key, panel);
});
函数示例
CubePanel.getModelFaceCenters
- 来源:
packages/demo/src/panels/TunnelScene/LoadSurface.vue
if (!viewer) return;
// 使用 CubePanel 的静态方法获取模型包围盒六个面的中心点位置
// const faceCenters = CubePanel.getModelFaceCenters(bus.getRockSample());
const faceCenters = {
"YF": {
"x": 0,
"y": 0,
"z": 2.5
},
"BEI": {
"x": 0,
"y": 0,
"z": -2.5
},
"ZUO": {
"x": -2.5,
"y": 0,
"z": 0
},
"YOU": {
"x": 2.5,
Demo 参考
LabelPosition
以下示例文件中可以看到该 API 的实际调用方式:
packages/demo/src/panels/TunnelScene/LoadSurface.vue
ISinglePanelOptions
以下示例文件中可以看到该 API 的实际调用方式:
packages/demo/src/panels/TunnelScene/LoadSurface.vue
CubePanel
以下示例文件中可以看到该 API 的实际调用方式:
packages/demo/src/panels/TunnelScene/LoadSurface.vue