/**
|
* 分层的楼栋 模型对象
|
*
|
* @class FloorGraphic
|
* @extends {mars3d.graphic.BasePointEntity}
|
*/
|
class FloorGraphic extends mars3d.graphic.BasePointEntity {
|
/**
|
* 对象添加到图层前创建一些对象的钩子方法,
|
* 只会调用一次
|
* @return {void} 无
|
* @private
|
*/
|
_mountedHook() {
|
this._models = [];
|
|
let point = this.point; //楼栋位置
|
let floorHeight = this.style.spacing; //每层层高,单位:米
|
let floorCount = this.style.count; //总层数(不含楼顶)
|
|
//增加楼层
|
for (let i = 0; i < floorCount; i++) {
|
let alt = point.alt + i * floorHeight;
|
let model = new mars3d.graphic.ModelEntity({
|
position: [point.lng, point.lat, alt],
|
style: this.style,
|
attr: {
|
origAlt: alt, //记录原始高度
|
},
|
});
|
this._models.push(model);
|
}
|
|
//增加楼顶
|
let topAlt = point.alt + floorCount * floorHeight;
|
let topModel = new mars3d.graphic.ModelEntity({
|
position: [point.lng, point.lat, topAlt],
|
style: {
|
...this.style,
|
url: this.style.topUrl,
|
},
|
attr: {
|
origAlt: topAlt, //记录原始高度
|
},
|
});
|
this._models.push(topModel);
|
}
|
|
/**
|
* 对象添加到图层上的创建钩子方法,
|
* 每次add时都会调用
|
* @return {void} 无
|
* @private
|
*/
|
_addedHook() {
|
this._models.forEach((model) => {
|
this._layer.addGraphic(model);
|
});
|
}
|
|
/**
|
* 对象从图层上移除的创建钩子方法,
|
* 每次remove时都会调用
|
* @return {void} 无
|
* @private
|
*/
|
_removedHook() {
|
this._models.forEach((model) => {
|
this._layer.removeGraphic(model);
|
});
|
}
|
|
/**
|
* 展开所有楼层
|
*
|
* @param {number} height 展开的每层间隔高度,单位:米
|
* @param {number} [time=4] 完全展开时间,单位:秒
|
* @return {void} 无
|
*/
|
openAll(height, time = 4) {
|
this.reset();
|
|
let point = this.point; //楼栋位置
|
|
for (let i = 0; i < this._models.length; i++) {
|
let model = this._models[i];
|
|
let alt = i * height + model.attr.origAlt;
|
model.moveTo({
|
position: [point.lng, point.lat, alt],
|
time: time, //移动的时长(单位 秒)
|
});
|
}
|
}
|
|
/**
|
* 合并所有楼层
|
*
|
* @param {number} [time=4] 完成合并时间,单位:秒
|
* @memberof FloorGraphic
|
*/
|
mergeAll(time = 4) {
|
let point = this.point; //楼栋位置
|
|
for (let i = 0; i < this._models.length; i++) {
|
let model = this._models[i];
|
|
model.show = true;
|
model.moveTo({
|
position: [point.lng, point.lat, model.attr.origAlt],
|
time: time, //移动的时长(单位 秒)
|
});
|
}
|
}
|
|
/**
|
* 还原重置所有楼层
|
* @return {void} 无
|
*/
|
reset() {
|
let point = this.point; //楼栋位置
|
|
for (let i = 0; i < this._models.length; i++) {
|
let model = this._models[i];
|
|
model.position = new mars3d.LatLngPoint(point.lng, point.lat, model.attr.origAlt);
|
model.show = true;
|
}
|
}
|
|
/**
|
* 显示指定楼层
|
*
|
* @param {Number} floorNum 指定显示的楼层,第1层开始
|
* @param {Number} [time=1] 楼层下落需要时间,单位:秒
|
* @return {void} 无
|
*/
|
showFloor(floorNum, time = 1) {
|
floorNum--;
|
|
let point = this.point; //楼栋位置
|
let maxHeight = 120; //顶部落下的高度
|
|
for (let i = floorNum; i < this._models.length; i++) {
|
let model = this._models[i];
|
model.position = new mars3d.LatLngPoint(point.lng, point.lat, maxHeight);
|
model.show = false;
|
}
|
|
for (let j = 0; j <= floorNum; j++) {
|
let model = this._models[j];
|
|
model.show = true;
|
model.moveTo({
|
position: [point.lng, point.lat, model.attr.origAlt],
|
time: time, //移动的时长(单位 秒)
|
});
|
}
|
}
|
}
|