ansel0926
2022-05-14 cc021a0544a8c0b2a056cec3168da119515a8e38
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
function addGltf(url, lng, lat, height, heading , pitch , roll, scale , id) {
 
    // var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(lng, lat, height));
    var model = viewer.scene.primitives.add(Cesium.Model.fromGltf({
        url: url,        //如果为bgltf则为.bgltf
        // modelMatrix: modelMatrix,
        scale: scale,  //放大倍数
        heightReference:Cesium.HeightReference.CLAMP_TO_GROUND,
        id : id,
        shadows : Cesium.ShadowMode.ENABLED,
        distanceDisplayCondition:new Cesium.DistanceDisplayCondition(0.0, 5000.0),
        color:Cesium.Color.fromAlpha(Cesium.Color.WHITE, 1),
        colorBlendMode:Cesium.ColorBlendMode.HIGHLIGHT
        
    }));
 
    var params= {
        tx: lng,  //模型中心X轴坐标(经度,单位:十进制度)
        ty: lat,    //模型中心Y轴坐标(纬度,单位:十进制度)
        tz: height,    //模型中心Z轴坐标(高程,单位:米)
        rx: heading,    //X轴(经度)方向旋转角度(单位:度)
        ry: pitch,    //Y轴(纬度)方向旋转角度(单位:度)
        rz: roll ,     //Z轴(高程)方向旋转角度(单位:度)
        scale: scale
    };
 
    model.type = "model"; 
    model.tx = lng;
    model.ty = lat;
    model.tz = height;
    model.rx = heading;
    model.ry = pitch;
    model.rz = roll;
    update3dtilesMaxtrix(model,params);
 
}
 
//根据id获取 对象
function getprimitiveModel(id){
    var primitives = viewer.scene.primitives;
    for (var i = 0; i < primitives.length; i++) {
        var primitive = primitives.get(i);
        if (typeof(primitive._id)!=='undefiend' && primitive._id == id) {
                return primitive;
        }
    }
}
function delprimitiveModel(id){
    var primitives = viewer.scene.primitives;
    for (var i = 0; i < primitives.length; i++) {
        var primitive = primitives.get(i);
        if (typeof(primitive._id)!=='undefiend' && primitive._id == id) {
            viewer.scene.primitives.remove(primitive);
        }
    }
}
function getentityModel(id){
    var entities = viewer.entities;
    return entities.getById(id);
}
function delentityModel(id){
    var entities = viewer.entities;
    return entities.removeById(id);
}
function get3DTile(tilesetid,title){
    if(base3dtilesPrimitives.length==0){
        return undefined;
    }else{
        var primitive = undefined;
        for(let i in base3dtilesPrimitives){
            if(tilesetid==base3dtilesPrimitives[i]._id){
                primitive = base3dtilesPrimitives[i];
            }
        }
        var objs = undefined;
        for(let i in primitive.root.children){
            // if(primitive.root.children[i].children[0]._content.batchTable._properties.名称 == title){
            if(primitive.root.children[i]._header.content.url == title){
                objs = primitive.root.children[i];
            }
        }
        return objs instanceof Cesium.Cesium3DTile?objs:undefined;
    }
}
function get3DTileSet(id){
    if(base3dtilesPrimitives.length==0){
        return undefined;
    }else{
        var primitive = undefined;
        for(let i in base3dtilesPrimitives){
            if(id==base3dtilesPrimitives[i]._id){
                primitive = base3dtilesPrimitives[i];
            }
        }
        return primitive instanceof Cesium.Cesium3DTileset?primitive:undefined;
    }
}
//更新模型
function update3dtilesMaxtrix(model,params) {
    model.scale=params.scale;
    //旋转
    var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx));
    var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry));
    var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz));
    var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
    var rotationY = Cesium.Matrix4.fromRotationTranslation(my);
    var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
    //平移
    var position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz);
    var m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
    //旋转、平移矩阵相乘
    Cesium.Matrix4.multiply(m, rotationX, m);
    Cesium.Matrix4.multiply(m, rotationY, m);
    Cesium.Matrix4.multiply(m, rotationZ, m);
    //赋值给model
    model.modelMatrix = m;
}
 
 
function update3dtilesMaxtrix2(model,params) {
    //平移
    var position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz);
    var m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
 
    //赋值给model
    model.modelMatrix = m;
}