# 地层

# 加载地层

1️⃣ 使用引擎(Engine)的loadStratums接口加载地层。

// 加载地层
engine.loadStratums( 'assets/jsons/地层.json' ).then( ( entities ) => {

    // 遍历地层实体
    for ( let i = 0, il = entities.length; i < il; i++ ) {

        // TODO:

    }

} );
1
2
3
4
5
6
7
8
9
10
11

2️⃣ 使用引擎(Engine)的loadStratumsByData接口加载地层。

// 加载地层数据
const entities = engine.loadStratumsByData( data );

// 遍历地层实体
for ( let i = 0, il = entities.length; i < il; i++ ) {

    // TODO:

}
1
2
3
4
5
6
7
8
9

# 地层纹理平铺间距设置

通过 tilingSpacing 初始属性设置纹理U方向和V方向的平铺间距(单位:米),tilingSpacing 初始属性需要再数据中设置,如下所示:

[{
    "name": "地测0",
    "tilingSpacing": [ 20.0, 20.0 ], // 地层0在U方向和V方向间隔20米平铺一次
    "geometry": [{}, {}]
},{
    "name": "地测1",
    "tilingSpacing": [ 10.0, 10.0 ], // 地层1在U方向和V方向间隔20米平铺一次
    "geometry": [{}, {}]
}]
1
2
3
4
5
6
7
8
9

注意

如果数据中未设置 tilingSpacing 属性,程序会使用默认值,即[ 20.0, 20.0 ]!

提示

纹理平铺次数=平铺长度/平铺间距纹理平铺次数 = 平铺长度 / 平铺间距

# 地层属性

提示

地层使用Stratum组件渲染,更新属性或调用接口时需要先获取地层渲染组件。

import { Stratum } from '@tx3d/core';

// 获取地层渲染组件
const stratum = entity.getComponent( Stratum );
1
2
3
4

🌏 code 地层编码,只读。

// 获取地层编码
const code = stratum.code;
1
2

🌏 parentCode 地层父编码,只读。

// 获取地层父编码
const parentCode = stratum.parentCode;
1
2

🌏 surface 是否是地表层标识,只读。

// 获取是否是地表层
const surface = stratum.surface;
1
2

🌏 wireframe 是否启用线框模式

// 获取是否启用线框模式
const wireframe = stratum.wireframe; 

// 设置是否启用线框模式
stratum.wireframe = true;
1
2
3
4
5

🌏 opacity 透明度

// 获取透明度
const opacity = stratum.opacity;

// 设置透明度
stratum.opacity = 0.5;
1
2
3
4
5

🌏 topVisible 顶面可见性控制

// 获取顶面可见性
const topVisible = stratum.topVisible;

// 设置顶面可见性
stratum.topVisible = false;
1
2
3
4
5

🌏 bottomVisible 底面可见性控制

// 获取底面可见性
const bottomVisible = stratum.bottomVisible;

// 设置底面可见性
stratum.bottomVisible = false;
1
2
3
4
5

🌏 boundaryVisible 侧面可见性控制

// 获取侧面可见性
const boundaryVisible = stratum.boundaryVisible;

// 设置侧面可见性
stratum.boundaryVisible = false;
1
2
3
4
5

🌏 outlineVisible 边框可见性控制

// 获取边框可见性
const outlineVisible = coalSeam.outlineVisible;

// 设置边框可见性
coalSeam.outlineVisible = false;
1
2
3
4
5

🌏 gridVisible 附着网格可见性控制

// 获取附着网格可见性
const gridVisible = stratum.gridVisible;

// 设置附着网格可见性
stratum.gridVisible = true;
1
2
3
4
5

🌏 gridSize 附着网格大小

// 获取附着网格大小
const gridSize = stratum.gridSize;

// 设置附着网格大小
stratum.gridSize = 30;
1
2
3
4
5

🌏 gridRatio 附着网格线宽度比率

// 获取附着网格线宽比率
const gridRatio = stratum.gridRatio;

// 设置附着网格线宽比率
stratum.gridRatio = 0.015;
1
2
3
4
5

注意

gridRatio取值在[ 0.0 ~ 1.0 ]区间

🌏 gridColor 附着网格颜色

// 获取附着网格颜色
const gridColor = stratum.gridColor;

// 设置附着网格颜色
stratum.gridColor = '#ff00de';
1
2
3
4
5

🌏 gridIntensity 附着网格强度

// 获取附着网格X轴和Y轴方向的强度
const intensity = stratum.gridIntensity;

// 设置附着网格X轴和Y轴方向的强度
stratum.gridIntensity = [ 1.0, 0.0 ]; // 只显示X轴方向的附着网格
1
2
3
4
5

注意

附着网格强度取值在[ 0.0 ~ 1.0 ]区间,可以通过该属性实现只显示单一方向的附着网格。

🌏 maskCenter 遮罩区域的中心点

// 获取遮罩区域中心点坐标
const maskCenter = stratum.maskCenter;

// 设置遮罩区域中心点
stratum.maskCenter = [ 100, 0, 0 ];
1
2
3
4
5

🌏 maskRadius 遮罩区域半径

// 获取遮罩区域半径
const maskRadius = stratum.maskRadius;

// 设置遮罩区域半径
stratum.maskRadius = 100;
1
2
3
4
5

🌏 maskColor 遮罩区域颜色

// 获取遮罩区域颜色
const maskColor = stratum.maskColor;

// 设置遮罩区域颜色
stratum.maskColor = '#ff0000';
1
2
3
4
5

🌏 maskOpacity 遮罩区域透明度

// 获取遮罩区域透明度
const maskOpacity = stratum.maskOpacity;

// 设置遮罩区域透明度
stratum.maskOpacity = 1.0; // 0.0不可见遮罩
1
2
3
4
5

注意

maskOpacity取值在[ 0.0 ~ 1.0 ]区间

# 地层接口

🌏 query 查询地层

import { defined, EventType, Stratum } from '@tx3d/core';

// 鼠标单击查询地层
engine.addEventListener( EventType.ENTITY_CLICK, ( event ) => {

    // 实体
    const entity = event.entity;

    // 相交信息
    const intersection = event.intersection;

    // 获取地层渲染组件
    const stratum = entity.getComponent( Stratum );

    // 判断是否是地层
    if ( defined( stratum ) ) {

        // 使用相交点坐标查询地层
        const result = stratum.query( intersection.point );

        // 与地层顶板交点坐标(世界坐标)
        const topPoint = result.topPoint;

        // 与地层底板交点坐标(世界坐标)
        const bottomPoint = result.bottomPoint;

    }

} );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

🌏 slices 地层切片

// 切线数组
const lines = [

    [
        [ 1000, 0.1, -50 ],
        [ -1000, 0.1, -50 ],
        [ -1000, 0.1, 500 ],
        [ -2000, 0.1, 1000 ]
    ],
    [
        [ 100, 0.1, 2000 ],
        [ -100, 0.1, 2000 ],
        [ -1000, 0.1, -1000 ]
    ],

];

// 切片地层
stratum.slices( lines );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

🌏 sections 剖切地层

// 剖切线数组
const lines = [

    [
        [ 100, 0.1, 0.0 ],
        [ -100, 0.1, 0.0 ]
    ],
    [
        [ 0.0, 0.1, 100 ],
        [ 0.0, 0.1, -100 ]
    ]

]

// 剖切地层
stratum.sections( lines );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

🌏 digs 开挖地层

// 开挖孔洞点坐标数组
const points = [

    [ 400, 0.1, 200 ],
    [ 0, 0.1, 200 ],
    [ 0, 0.1, -200 ],
    [ 400, 0.1, -200 ]

];

// 开挖地层
stratum.digs( points );
1
2
3
4
5
6
7
8
9
10
11
12

主要

当前地层开挖只支持凸多边形孔洞,不支持凹多边形孔洞!

🌏 setHighlight 设置高亮

// 高亮地层
stratum.setHighlight( true, { color: '#00ff00', opacity: 0.5 } );

// 取消地层高亮
stratum.setHighlight( false );
1
2
3
4
5

提示

高亮设置参数,详见HighlightParameters

Last Updated: 2/21/2025, 11:32:31 AM