You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.0 KiB
144 lines
4.0 KiB
|
|
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<MarkTagPos, ModelInfo_mark[]> = 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<MarkTagPos, ModelInfo_mark[]>) => { |
|
if (value != null) { |
|
for (let i = 0; i < value.length; i++) { |
|
value[i].dispose(); |
|
} |
|
} |
|
}); |
|
this.markInfos.clear(); |
|
this.currentMarkDataIndex = -1; |
|
} |
|
|
|
} |
|
|
|
|