|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|