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;
|
}
|