import { TsTool } from "src/app/babylon/tool/ts-tool"; import { MarkTagPos, MarkType } from "../../data/mark/mark-data"; import { MarkNodeData, MarkPlanData } from "../../data/mark/mark-plan-data"; import { ModelInfo_mark } from "./model-info-mark"; /** * 标绘方案数据(二级节点) */ export class MarkNodeInfo { /** * 所属的方案数据 */ belongToPlanData: MarkPlanData; /** * 源数据 */ nodeData: MarkNodeData; /** * 运行时的标绘数据 */ markInfos: Map = new Map(); currentMarkDataIndex = -1; constructor(belongToPlanData: MarkPlanData, nodeData: MarkNodeData) { this.belongToPlanData = belongToPlanData; this.nodeData = nodeData; } /** * 获取标绘物 * @param tagPos * @param type * @param id */ getMarkInfo(tagPos: MarkTagPos, type: MarkType, id: string) { let result: ModelInfo_mark = null; if (this.markInfos.has(tagPos)) { let array = this.markInfos.get(tagPos); for (let i = 0; i < array.length; i++) { if (array[i].markData.key == id) { result = array[i]; break; } } } return result; } /** * 新增标绘物 * @param markInfo * @param addToData //新增时,需要添加进数据层 */ addMarkInfo(markInfo: ModelInfo_mark, addToData: boolean) { if (!this.markInfos.has(markInfo.markData.tagPos)) { this.markInfos.set(markInfo.markData.tagPos, []); } this.markInfos.get(markInfo.markData.tagPos).push(markInfo); if (addToData) { this.nodeData.getCurrentEnvironmentData().addMarkData(markInfo.markData);//修改数据层 } } /** * 删除标绘物 * @param markInfo */ removeMarkInfo(markInfo: ModelInfo_mark) { if (this.markInfos.has(markInfo.markData.tagPos)) { TsTool.arrayRemove(this.markInfos.get(markInfo.markData.tagPos), markInfo); } this.nodeData.getCurrentEnvironmentData().removeMarkData(markInfo.markData); markInfo.dispose(); } /** * 获取下一个新建标绘物的id(用于新建) */ getNextMarkDataId() { //console.log(this.currentMarkDataIndex, 1); let environmentData = this.nodeData.getCurrentEnvironmentData(); if (this.currentMarkDataIndex < 0) { if (this.nodeData != null && environmentData.markDatas.length > 0) { this.currentMarkDataIndex = Number(environmentData.markDatas[environmentData.markDatas.length - 1].key); //console.log(this.currentMarkDataIndex, this.nodeData.markDatas[this.nodeData.markDatas.length - 1].key); } } this.currentMarkDataIndex++; //console.log(this.currentMarkDataIndex, "====="); return this.currentMarkDataIndex; } /** * 获取展示此节点所需要完整时间 */ getShowTime() { let textNum = 0; if (this.nodeData.describe != null) { textNum = this.nodeData.describe.length; } let timeScale = 1; return textNum * timeScale; } /** * 清空标绘物(表现层和逻辑层) */ clearAllMarkDataAndInfo() { let currentEnvironmentData = this.nodeData.getCurrentEnvironmentData(); currentEnvironmentData.markDatas.length = 0; this.nodeData.environmentData.length = 0; this.nodeData.environmentData.push(currentEnvironmentData); this.disposeInfo(); } /** * 只释放表现层 */ disposeInfo() { this.markInfos.forEach((value: ModelInfo_mark[], key: MarkTagPos, map: Map) => { if (value != null) { for (let i = 0; i < value.length; i++) { value[i].dispose(); } } }); this.markInfos.clear(); this.currentMarkDataIndex = -1; } }