import { DefaultLevelControl } from "./DefaultLevelControl";
import { LevelControlHelper } from "../LevelControlHelper";
/**
* @class FloorLevelControl
* 园区的楼层层级控制类。
* @extends THING.DefaultLevelControl
* @public
*/
class FloorLevelControl extends DefaultLevelControl {
static levelCondition = 'tags:or(Floor)';
static levelName = 'floor';
constructor(options) {
super(options);
}
onSetEffect(param) {
const object = param.current;
if (object) {
LevelControlHelper.traverseByIgnore(object, 'ignoreVisible', (child) => {
if (child.tags.has('RoomRoof') || child.tags.has('Roof')) {
child.setVisible(false, false);
} else {
child.setVisible(true, false);
}
});
const brothers = object.brothers;
brothers.forEach(element => {
LevelControlHelper.traverseByIgnore(element, 'ignoreVisible', (child) => {
child.setVisible(false, false);
});
});;
}
}
filterObject(object) {
if (object.tags.has('Wall')) {
return null;
}
if (object.tags.has('Slab') || object.tags.has('Roof') || object.tags.has('Ceiling')) {
return null;
}
if (object.parents.find('tags:or(Misc,Wall)')) {
return null;
}
return super.filterObject(object);
}
onFlyTo(flyParam) {
const target = flyParam.target;
if (target && target.isObject3D) {
const boundingBox = target.boundingBox;
flyParam.position = LevelControlHelper.getNearestObjectPosition({
target: target,
boundingBox: boundingBox,
camera: this.app.camera,
});
flyParam.target = boundingBox.center;
}
return super.onFlyTo(flyParam);
}
}
export { FloorLevelControl };