import { Type } from "class-transformer"; import { TsTool } from "src/app/babylon/tool/ts-tool"; import { ArcRotateCameraData } from "../camera-data"; import { MarkData } from "./mark-data"; /** * 当前单位的所有标绘信息 */ export class AllMarkPlanData { /** * 单位ID */ institutionID: string; /** * 所有方案 */ @Type(() => MarkPlanData) datas: MarkPlanData[]; /** * 创建新方案 * @param name */ createPlanData(name): MarkPlanData { let id = this.getNextPlaneId(); let data = new MarkPlanData(id, name, []); this.datas.push(data); return data; } /** * 删除方案 */ deletePlanData(id: number) { let planeData = this.getMarkPlanById(id); if (planeData != null) { TsTool.arrayRemove(this.datas, planeData); } } /** * 获取下一个方案的id */ getNextPlaneId() { let index = -1; if (this.datas != null && this.datas.length > 0) { index = this.datas[this.datas.length - 1].id; } index++; return index; } /** * 根据id查找标绘方案 * @param markPlanId */ getMarkPlanById(markPlanId: number) { if (this.datas != null) { for (let i = 0; i < this.datas.length; i++) { if (this.datas[i].id == markPlanId) { return this.datas[i]; } } } return null; } } /** * 方案数据 */ export class MarkPlanData { /** * 唯一身份id */ id: number; /** * 显示的名称 */ name: string; /** * 用于UI上排序 */ index: number = 0; /** * 所有的标绘节点 */ @Type(() => MarkNodeData) nodes: MarkNodeData[] = []; constructor(id: number, name: string, nodes: MarkNodeData[] = []) { this.id = id; this.index = id; this.name = name; this.nodes = nodes; this.index = 0; } /** * 获取下一个节点的id */ getNextNodeId() { let index = -1; if (this.nodes != null && this.nodes.length > 0) { index = this.nodes[this.nodes.length - 1].id; } index++; return index; } /** * 创建方案的子节点 * @param name */ createMarkNode(name: string) { let id = this.getNextNodeId(); let result = new MarkNodeData(id, name); this.nodes.push(result); return result; } /** * 删除方案的节点 * @param id */ deleteMarkNode(id: number) { let node = this.getNodeById(id); if (node != null) { TsTool.arrayRemove(this.nodes, node); } } /** * 根据id获取节点 * @param id */ getNodeById(id: number) { if (this.nodes != null) { for (let i = 0; i < this.nodes.length; i++) { if (this.nodes[i].id == id) { return this.nodes[i]; } } } return null; } /** * 设置节点数据 * @param id //要替换的节点id * @param nodeData //新数据 */ setNodeData(id: number, nodeData: MarkNodeData) { if (this.nodes != null) { for (let i = 0; i < this.nodes.length; i++) { if (this.nodes[i].id == id) { this.nodes[i] = nodeData; } } } } } /** * 标绘节点数据 */ export class MarkNodeData { /** * 唯一身份id */ id: number; /** * 显示的名称 */ name: string; /** * 用于UI上排序 */ index: number = 0; /** * 相机数据 */ @Type(() => ArcRotateCameraData) cameraData: ArcRotateCameraData; /** * 展示罩棚 */ showZP: boolean; /** * 所处环境的信息 */ @Type(() => EnvironmentData) environmentData: EnvironmentData[]; /** * 自然信息 */ @Type(() => NatureData) natureData: NatureData; /** * 描述 */ describe: string; /** * 图片地址 */ texture: string; /** * 视频地址 */ video: string; constructor(id: number, name: string) { this.id = id; this.index = id; this.name = name; this.cameraData = new ArcRotateCameraData(); this.environmentData = []; this.natureData = new NatureData(); this.index = 0; } /** * 获取环境信息 * @param id */ getEnvironmentData(id: number) { let result = null; for (let i = 0; i < this.environmentData.length; i++) { if (this.environmentData[i].id == id) { result = this.environmentData[i]; break; } } return result; } /** * 改变当前环境值 * @param id */ changeNowEnvironmentData(id: number) { for (let i = 0; i < this.environmentData.length; i++) { if (this.environmentData[i].id == id) { this.environmentData[i].isNow = true; } else { this.environmentData[i].isNow = false; } } } /** * 根据内容获取 * @param isOutdoor * @param buildingId * @param floorId */ getEnvironmentDataByValue(isOutdoor: boolean, /** * 建筑Id */ buildingId: string, /** * 所处楼层的id(室内的话) */ floorId: string) { let result: EnvironmentData = null; for (let i = 0; i < this.environmentData.length; i++) { if (isOutdoor == true && this.environmentData[i].isOutdoor == true) { result = this.environmentData[i]; break; } else if (this.environmentData[i].isOutdoor == isOutdoor && this.environmentData[i].buildingId == buildingId && this.environmentData[i].floorId == floorId) { result = this.environmentData[i]; break; } } return result; } /** * 获取当前状态的环境数据 */ getCurrentEnvironmentData() { let result = this.environmentData[0]; for (let i = 0; i < this.environmentData.length; i++) { if (this.environmentData[i].isNow) { result = this.environmentData[i]; break; } } result.isNow = true; return result; } addEnvironment(buildingId: string, isOutdoor: boolean, floorId: string) { let index = -1; for (let i = 0; i < this.environmentData.length; i++) { if (this.environmentData[i].id > index) { index = this.environmentData[i].id; } } index++; let newEnvironment = new EnvironmentData(index, buildingId, isOutdoor, floorId); this.environmentData.push(newEnvironment); return newEnvironment; } } /** * 环境信息 */ export class EnvironmentData { id: number; /** * 室外、室内 */ isOutdoor: boolean; /** * 建筑Id */ buildingId: string; /** * 所处楼层的id(室内的话) */ floorId: string; /** * 所有标绘物 */ @Type(() => MarkData) markDatas: MarkData[] = []; /** * 是否是当前节点 */ isNow: boolean; constructor(id: number, buildingId: string, isOutdoor: boolean, floorId: string) { this.id = id; this.buildingId = buildingId; this.isOutdoor = isOutdoor; this.floorId = floorId; this.markDatas = []; } /** * 添加markData * @param markData */ addMarkData(markData: MarkData) { this.markDatas.push(markData); } /** * 移除markData * @param markData */ removeMarkData(markData: MarkData) { TsTool.arrayRemove(this.markDatas, markData); } } /** * 自然信息 */ export class NatureData { /** * 天气 */ weather: WeatherType; /** * 温度 */ temperature: number; /** * 风向 */ windDirection: WindDirectionType; /** * 风力 */ windPower: number; constructor() { this.weather = WeatherType.Sun; this.temperature = 26; this.windDirection = WindDirectionType.East; this.windPower = 3; } } /** * 天气类型 */ export enum WeatherType { /** * 晴 */ Sun = "Sun", /** * 阴 */ Sloudy = "Sloudy", /** * 雨 */ Rain = "Rain", /** * 雪 */ Snow = "Snow" } /** * 方向类型 */ export enum WindDirectionType { /** * 东 */ East = "East", /** * 南 */ South = "South", /** * 西 */ West = "West", /** * 北 */ North = "North", /** * 东南 */ SouthEast = "SouthEast", /** * 西南 */ SouthWest = "SouthWest", /** * 东北 */ NorthEast = "NorthEast", /** * 西北 */ NorthWest = "NorthWest", }