# 实体热力分析

实体热力分析可以对实体的某些属性进行插值分析最终将热力颜色附着到实体中支持热力分析的渲染组件上。

提示

1.当前巷道热力分析支持'idw'(距离反比)和'kriging'(克里金)两种插值方式;
2.当前执行热力分析的渲染组件包含:LanewayLanewayCrossingModelStratum

# 执行分析

使用引擎(Engine)analyseManager属性的executeHeatAnalysis接口执行分析。

import { MathUtils } from 'three';

// 加载模型
engine.loadGLTF( 'assets/models/vianney_house_2/scene.gltf', { 
    
    transform: { 
        
        rotation: [ -Math.PI * 0.5, 0.0, 0.0 ]

    }

} ).then( ( entity ) => {

    // 构建热力分析参数
    const parameters = {

        // 参与分析的实体
        entity: entity,

        // 特征点数组
        featurePoints: [],

        // 值颜色
        valueColor: [

            { value: 0.0, color: '#000066' },
            { value: 0.1, color: 'blue' },
            { value: 0.2, color: 'cyan' },
            { value: 0.3, color: 'lime' },
            { value: 0.4, color: 'yellow' },
            { value: 0.5, color: 'orange' },
            { value: 0.6, color: 'red' },
            { value: 0.7, color: 'maroon' },
            { value: 0.8, color: '#660066' },
            { value: 0.9, color: '#990099' },
            { value: 1.0, color: '#ff66ff' }

        ],

        // 等值线颜色
        isoplethColor: [

            { value: 0.1, color: 'orange' },
            { value: 0.3, color: 'maroon' },
            { value: 0.5, color: 'blue' },
            { value: 0.7, color: 'cyan' },
            { value: 0.9, color: 'lime' }

        ],

        // 插值参数('idw'或'kriging')
        interpolator: {

            type: 'kriging' // 使用克里金插值

        },

        // 分析完成回调
        onCompleted: ( result ) => {

            // TODO:处理分析结果

        }

    };

    // 根据模型外包盒随机生成特征点
    const bounds = entity.transform.bounds;
    for ( let i = 0; i < 200; i++ ) {

        const x = MathUtils.randFloat( bounds.min.x, bounds.max.x );
        const y = MathUtils.randFloat( bounds.min.y, bounds.max.y );
        const z = MathUtils.randFloat( bounds.min.z, bounds.max.z );
        const v = MathUtils.randFloat( 0.0, 1.0 );

        parameters.featurePoints.push( {

            point: [ x, y, z ],
            value: v

        } );        

    }

    // 执行分析
    engine.analyseManager.executeHeatAnalysis( parameters );

} );
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

注意

特征点的Value值需要归一化到[ 0~1 ]区间。

# 取消分析

使用引擎(Engine)analyseManager属性的cancelHeatAnalysis接口取消分析。

// 取消分析
engine.analyseManager.cancelHeatAnalysis( entity );
1
2

# 设置分析阈值

使用引擎(Engine)analyseManager属性的setHeatAnalysisThreshold接口设置分析阈值。

// 设置分析阈值
engine.analyseManager.setHeatAnalysisThreshold( entity, 0.15, 0.75 );
1
2

注意

设置分析阈值,需要在执行分析完成后调用!

# 设置分析透明度

使用引擎(Engine)analyseManager属性的setHeatAnalysisOpacity接口设置分析透明度。

// 设置分析透明度
engine.analyseManager.setHeatAnalysisOpacity( entity, 0.75 );
1
2

注意

设置分析透明度,需要在执行分析完成后调用!

Last Updated: 8/30/2023, 9:51:49 AM