|
|
|
import { Quaternion, Vector3 } from '@babylonjs/core';
|
|
|
|
import {
|
|
|
|
BuildingData,
|
|
|
|
BuildingData_ChemicalPlant,
|
|
|
|
BuildingData_Environment,
|
|
|
|
BuildingData_Normal,
|
|
|
|
BuildingType,
|
|
|
|
} from '../model/data/institution/building/building-data';
|
|
|
|
import {
|
|
|
|
FacilityPosType,
|
|
|
|
FacilityType,
|
|
|
|
ModelData_facility,
|
|
|
|
} from '../model/data/model-data/model-data-facility';
|
|
|
|
import {
|
|
|
|
InstitutionData,
|
|
|
|
NormalData,
|
|
|
|
} from '../model/data/institution/institution-data';
|
|
|
|
import {
|
|
|
|
BuildingPosType,
|
|
|
|
ModelData,
|
|
|
|
|
|
|
|
} from '../model/data/model-data/model-data';
|
|
|
|
import { ModelData_building } from '../model/data/model-data/model-data-building';
|
|
|
|
import { TransformData } from '../model/data/transform-data';
|
|
|
|
import { BabylonTool } from '../tool/babylon-tool';
|
|
|
|
import { AllFacilityData } from '../model/data/institution/facility/all-facility-data';
|
|
|
|
import { plainToClass } from 'class-transformer';
|
|
|
|
import { ConfigManager } from './config-manager';
|
|
|
|
import { ModelEditData } from '../model/data/model-data/model-edit-data';
|
|
|
|
import { ServeManager } from './serve-manager';
|
|
|
|
import { InsitutionDataSimple } from '../model/data/institution/institution-data-simple';
|
|
|
|
import { PropertyData_Base } from '../model/data/institution/facility/property-data/property-data-base';
|
|
|
|
import { PropertyData_AQCK } from '../model/data/institution/facility/property-data/outdoor/property-data-aqck';
|
|
|
|
import { PropertyData_public } from '../model/data/institution/facility/property-data/property-data-public';
|
|
|
|
import { TsTool } from '../tool/ts-tool';
|
|
|
|
import { PropertyData_Base_XHS } from '../model/data/institution/facility/property-data/base/property-data-base-xhs';
|
|
|
|
import { PropertyData_Base_SBJHQ } from '../model/data/institution/facility/property-data/base/property-data-base-sbjhq';
|
|
|
|
import { PropertyData_PL } from '../model/data/institution/facility/property-data/outdoor/property-data-pl';
|
|
|
|
import { PropertyData_Base_IMG } from '../model/data/institution/facility/property-data/base/property-data-base-img';
|
|
|
|
import { PropertyData_Base_XFB } from '../model/data/institution/facility/property-data/base/property-data-base-xfb';
|
|
|
|
import { PropertyData_FHFQ } from '../model/data/institution/facility/property-data/indoor/property-data-fhfq';
|
|
|
|
import { PropertyData_SSLT } from '../model/data/institution/facility/property-data/indoor/property-data-sslt';
|
|
|
|
import { PropertyData_XFDT } from '../model/data/institution/facility/property-data/indoor/property-data-xfdt';
|
|
|
|
import { PropertyData_ZDQY } from '../model/data/institution/facility/property-data/indoor/property-data-zdqy';
|
|
|
|
import { PropertyData_DWBZ } from '../model/data/institution/facility/property-data/indoor/property-data-dwbz';
|
|
|
|
import { PropertyData_GD } from '../model/data/institution/facility/property-data/outdoor/property-data-gd';
|
|
|
|
import { ModeManager, ModeType } from './mode-manager';
|
|
|
|
import { AllMarkData } from '../model/data/mark/all-mark-data';
|
|
|
|
import { AllMarkPlanData } from '../model/data/mark/mark-plan-data';
|
|
|
|
import { HttpErrorResponse } from '@angular/common/http';
|
|
|
|
import { PropertyData_Q } from '../model/data/institution/facility/property-data/outdoor/property-data-q';
|
|
|
|
|
|
|
|
class Test {
|
|
|
|
id: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
//数据管理器
|
|
|
|
export class DataManager {
|
|
|
|
|
|
|
|
static institutionData_simple: InsitutionDataSimple;//当前单位简易信息
|
|
|
|
static institutionData: InstitutionData; //当前单位信息
|
|
|
|
|
|
|
|
static allFacilityData: AllFacilityData; //所有可用的设备数据(将来读取自配置表)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 态势标绘的素材库
|
|
|
|
*/
|
|
|
|
static allMarkData: AllMarkData;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 当前单位的标绘方案信息
|
|
|
|
*/
|
|
|
|
static allMarkPlanData: AllMarkPlanData;
|
|
|
|
|
|
|
|
static initDebugData(institutionKey: string, onSuccess?: (key: string) => void, onError?: (key: string, error: string) => void) {
|
|
|
|
|
|
|
|
//本地捏造消防设备列表信息
|
|
|
|
DataManager.initDebugData_facility();
|
|
|
|
if (ModeManager.currentMode == ModeType.Look) {
|
|
|
|
DataManager.initDebugData_mark();
|
|
|
|
}
|
|
|
|
|
|
|
|
let dataFromServe = true;//true-表示数据来自服务器,false-表示来自本地捏造
|
|
|
|
|
|
|
|
if (dataFromServe) {
|
|
|
|
|
|
|
|
ServeManager.instance.getInstitutionData(institutionKey, (key, result) => {
|
|
|
|
if (onSuccess) {
|
|
|
|
DataManager.institutionData = plainToClass(InstitutionData, result);
|
|
|
|
DataManager.institutionData.normalData.name = DataManager.institutionData_simple.name;
|
|
|
|
// console.log(DataManager.institutionData);
|
|
|
|
onSuccess(key);
|
|
|
|
}
|
|
|
|
}, (key, error) => {
|
|
|
|
|
|
|
|
if (onError) {
|
|
|
|
console.error("获取单位信息失败" + key);
|
|
|
|
onError(key, error);
|
|
|
|
}
|
|
|
|
|
|
|
|
console.error("获取单位信息失败,本地捏造数据");
|
|
|
|
DataManager.initDebugData_institution();
|
|
|
|
if (onSuccess) {
|
|
|
|
onSuccess(key);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
//本地捏造测试数据
|
|
|
|
DataManager.initDebugData_institution();
|
|
|
|
onSuccess(DataManager.institutionData.normalData.key);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//初始化单位数据
|
|
|
|
static initDebugData_institution() {
|
|
|
|
DataManager.institutionData = new InstitutionData();
|
|
|
|
|
|
|
|
DataManager.institutionData.normalData = new NormalData();
|
|
|
|
DataManager.institutionData.normalData.key = 'Institution001';
|
|
|
|
DataManager.institutionData.normalData.name = '单位001';
|
|
|
|
|
|
|
|
DataManager.institutionData.environmentDatas = [
|
|
|
|
new BuildingData_Environment(),
|
|
|
|
];
|
|
|
|
DataManager.institutionData.environmentDatas[0].normalData = new NormalData();
|
|
|
|
DataManager.institutionData.environmentDatas[0].normalData.key =
|
|
|
|
'environment001';
|
|
|
|
DataManager.institutionData.environmentDatas[0].normalData.name = '环境001';
|
|
|
|
|
|
|
|
let environmentTransform = new TransformData(); //用于测试建筑的数据还原效果
|
|
|
|
environmentTransform.originalScaling = new Vector3(961.66, 5.17, 962.6);
|
|
|
|
environmentTransform.position = new Vector3(0, -2.939, 0);
|
|
|
|
environmentTransform.scaling = environmentTransform.originalScaling.clone();
|
|
|
|
|
|
|
|
DataManager.institutionData.environmentDatas[0].outdoorData = new ModelEditData();
|
|
|
|
DataManager.institutionData.environmentDatas[0].outdoorData.index = 1;
|
|
|
|
let resPath_en = DataManager.getResPath_building(
|
|
|
|
DataManager.institutionData.normalData.key.toLowerCase(),
|
|
|
|
DataManager.institutionData.environmentDatas[0].normalData.key.toLocaleLowerCase(),
|
|
|
|
BuildingPosType.Environment,
|
|
|
|
);
|
|
|
|
DataManager.institutionData.environmentDatas[0].outdoorData.modelData = new ModelData_building(
|
|
|
|
'modelEn001',
|
|
|
|
'环境001',
|
|
|
|
BuildingPosType.Environment,
|
|
|
|
'Terrain.gltf',
|
|
|
|
environmentTransform,
|
|
|
|
resPath_en
|
|
|
|
);
|
|
|
|
|
|
|
|
DataManager.institutionData.environmentDatas[0].describe = '这是环境';
|
|
|
|
|
|
|
|
let facilityTransform = new TransformData();
|
|
|
|
facilityTransform.position = new Vector3(-137, 3.3, 150);
|
|
|
|
facilityTransform.rotationQuaternion = Quaternion.FromEulerAngles(
|
|
|
|
0,
|
|
|
|
80 / BabylonTool.c_radian1,
|
|
|
|
0
|
|
|
|
);
|
|
|
|
facilityTransform.originalScaling = new Vector3(0.39, 0.7, 0.37);
|
|
|
|
facilityTransform.scaling = facilityTransform.originalScaling.multiplyByFloats(
|
|
|
|
2,
|
|
|
|
2,
|
|
|
|
2
|
|
|
|
);
|
|
|
|
// let facilityData = new ModelData_facility(
|
|
|
|
// 'facility001',
|
|
|
|
// FacilityType.DSXHS,
|
|
|
|
// '地上消火栓',
|
|
|
|
// 'DXXHS.gltf',
|
|
|
|
// facilityTransform,
|
|
|
|
// FacilityPosType.Outdoor
|
|
|
|
// );
|
|
|
|
// DataManager.institutionData.environmentDatas[0].outdoorData.facilities = [
|
|
|
|
// facilityData,
|
|
|
|
// ];
|
|
|
|
|
|
|
|
DataManager.institutionData.normalBuildingDatas = [
|
|
|
|
new BuildingData_Normal(),
|
|
|
|
];
|
|
|
|
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].normalData = new NormalData();
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].buildingType =
|
|
|
|
BuildingType.Normal;
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].normalData.key =
|
|
|
|
'building001';
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].normalData.name =
|
|
|
|
'大楼001';
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].describe =
|
|
|
|
'一个普通大楼';
|
|
|
|
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].outdoorData = new ModelEditData();
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].outdoorData.index = 1;
|
|
|
|
let resPath_out = DataManager.getResPath_building(
|
|
|
|
DataManager.institutionData.normalData.key.toLowerCase(),
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].normalData.key.toLocaleLowerCase(),
|
|
|
|
BuildingPosType.OutDoor,
|
|
|
|
);
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].outdoorData.modelData = new ModelData_building(
|
|
|
|
'modelOut001',
|
|
|
|
'外观模型1',
|
|
|
|
BuildingPosType.OutDoor,
|
|
|
|
'ZhuTi.gltf',
|
|
|
|
new TransformData(),
|
|
|
|
resPath_out
|
|
|
|
);
|
|
|
|
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].indoorsData = [];
|
|
|
|
|
|
|
|
let indoorData1 = new ModelEditData();
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].indoorsData.push(
|
|
|
|
indoorData1
|
|
|
|
);
|
|
|
|
indoorData1.index = 1;
|
|
|
|
let resPath_inDoor1 = DataManager.getResPath_building(
|
|
|
|
DataManager.institutionData.normalData.key.toLowerCase(),
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].normalData.key.toLocaleLowerCase(),
|
|
|
|
'nei1'
|
|
|
|
);
|
|
|
|
indoorData1.modelData = new ModelData_building(
|
|
|
|
'nei1',
|
|
|
|
'室内模型1层',
|
|
|
|
BuildingPosType.Indoor,
|
|
|
|
'nei1.gltf',
|
|
|
|
null,
|
|
|
|
resPath_inDoor1
|
|
|
|
);
|
|
|
|
|
|
|
|
let indoorData2 = new ModelEditData();
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].indoorsData.push(
|
|
|
|
indoorData2
|
|
|
|
);
|
|
|
|
indoorData2.index = 2;
|
|
|
|
let resPath_inDoor2 = DataManager.getResPath_building(
|
|
|
|
DataManager.institutionData.normalData.key.toLowerCase(),
|
|
|
|
DataManager.institutionData.normalBuildingDatas[0].normalData.key.toLocaleLowerCase(),
|
|
|
|
'nei2'
|
|
|
|
);
|
|
|
|
indoorData2.modelData = new ModelData_building(
|
|
|
|
'nei2',
|
|
|
|
'室内模型2层',
|
|
|
|
BuildingPosType.Indoor,
|
|
|
|
'nei2.gltf',
|
|
|
|
null,
|
|
|
|
resPath_inDoor2
|
|
|
|
);
|
|
|
|
indoorData2.facilities = [];
|
|
|
|
|
|
|
|
let indoorData2FacilityTransform = new TransformData();
|
|
|
|
indoorData2FacilityTransform.position = new Vector3(-6, -3.1, 29);
|
|
|
|
indoorData2FacilityTransform.rotationQuaternion = Quaternion.FromEulerAngles(
|
|
|
|
0,
|
|
|
|
30 / BabylonTool.c_radian1,
|
|
|
|
0
|
|
|
|
);
|
|
|
|
// let indoorData2FacilityData = new ModelData_facility(
|
|
|
|
// 'indoor2_facility001',
|
|
|
|
// FacilityType.DSXHS,
|
|
|
|
// '地下消火栓1',
|
|
|
|
// 'DSXHS.gltf',
|
|
|
|
// indoorData2FacilityTransform,
|
|
|
|
// FacilityPosType.Indoor
|
|
|
|
// );
|
|
|
|
// indoorData2.facilities.push(indoorData2FacilityData);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 获取建筑资源路径(不完整,前面需要添加ObjectsService.baseUrl)
|
|
|
|
* @param institutionKey
|
|
|
|
* @param buildingKey
|
|
|
|
* @param key
|
|
|
|
*/
|
|
|
|
static getResPath_building(
|
|
|
|
institutionKey: string,
|
|
|
|
buildingKey: string,
|
|
|
|
key: string
|
|
|
|
): string {
|
|
|
|
let result =
|
|
|
|
institutionKey.toLocaleLowerCase() +
|
|
|
|
'/' +
|
|
|
|
ServeManager.ngAssetsPath +
|
|
|
|
buildingKey.toLocaleLowerCase() +
|
|
|
|
'/' +
|
|
|
|
key +
|
|
|
|
'/';
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
//获取属性所需文件的路径
|
|
|
|
static getResPath_facilityProperty(institutionKey: string,
|
|
|
|
buildingKey: string, facilityType: FacilityType, facilityKey: string, key: string) {
|
|
|
|
|
|
|
|
let result =
|
|
|
|
institutionKey.toLocaleLowerCase() +
|
|
|
|
'/' +
|
|
|
|
ServeManager.ngAssetsPath +
|
|
|
|
buildingKey.toLocaleLowerCase() +
|
|
|
|
'/' +
|
|
|
|
ConfigManager.c_reaPath_facilityProperty +
|
|
|
|
"/" +
|
|
|
|
facilityType.toLocaleLowerCase() +
|
|
|
|
'/' +
|
|
|
|
facilityKey.toLocaleLowerCase() +
|
|
|
|
"/";
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
//获取设备资源完整路径
|
|
|
|
static getResPath_facility(facilityPosType: FacilityPosType, type: FacilityType): string {
|
|
|
|
let result = "facilities/";
|
|
|
|
|
|
|
|
result += facilityPosType.toString() + "/";
|
|
|
|
|
|
|
|
result += DataManager.getResName_facility(type).toLocaleLowerCase();
|
|
|
|
result += "/";
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
//获取设备的资源名(有些是公用的)
|
|
|
|
static getResName_facility(type: FacilityType): string {
|
|
|
|
let result = type.toString();
|
|
|
|
switch (type) {
|
|
|
|
case FacilityType.XKS:
|
|
|
|
case FacilityType.BF:
|
|
|
|
case FacilityType.SX:
|
|
|
|
case FacilityType.FHM:
|
|
|
|
case FacilityType.FHJL:
|
|
|
|
case FacilityType.SSLT:
|
|
|
|
case FacilityType.XFDT:
|
|
|
|
case FacilityType.PTDT:
|
|
|
|
case FacilityType.HT:
|
|
|
|
case FacilityType.WXY: result = "Location"; break;
|
|
|
|
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
//初始化设备信息
|
|
|
|
static initDebugData_facility() {
|
|
|
|
DataManager.allFacilityData = AllFacilityData.CreateAllFacilityData();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 初始化态势标绘的素材库
|
|
|
|
*/
|
|
|
|
static initDebugData_mark() {
|
|
|
|
DataManager.allMarkData = AllMarkData.CreateAllMarkData();
|
|
|
|
console.log(DataManager.allMarkData, "态势标会");
|
|
|
|
}
|
|
|
|
|
|
|
|
static init(simpleData: InsitutionDataSimple, onSuccess?: (key: string) => void) {
|
|
|
|
DataManager.institutionData_simple = simpleData;
|
|
|
|
DataManager.initDebugData(simpleData.key, onSuccess);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 新建当前单位的标绘信息
|
|
|
|
*/
|
|
|
|
static initAllMarkPlaneData() {
|
|
|
|
DataManager.allMarkPlanData = new AllMarkPlanData();
|
|
|
|
DataManager.allMarkPlanData.institutionID = DataManager.institutionData.normalData.key;
|
|
|
|
DataManager.allMarkPlanData.datas = [];
|
|
|
|
return DataManager.allMarkPlanData;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 初始化当前建筑的 态势标绘信息
|
|
|
|
*/
|
|
|
|
static initMarkData(onSuccess?: (data: AllMarkPlanData) => void) {
|
|
|
|
ServeManager.instance.getMarkData(DataManager.institutionData.normalData.key, (institutionID: string, data: string) => {
|
|
|
|
if (data == null) //新建单位的标绘信息
|
|
|
|
{
|
|
|
|
DataManager.initAllMarkPlaneData();
|
|
|
|
}
|
|
|
|
else //读取已有的标绘信息
|
|
|
|
{
|
|
|
|
DataManager.allMarkPlanData = plainToClass(AllMarkPlanData, data);
|
|
|
|
}
|
|
|
|
if (onSuccess != null) {
|
|
|
|
onSuccess(DataManager.allMarkPlanData);
|
|
|
|
}
|
|
|
|
}, (institutionID: string, data: any) => {
|
|
|
|
if (data instanceof HttpErrorResponse && data.status == 404) {
|
|
|
|
//404,新增单位标绘数据,不算错误
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ModeManager.log("获取态势标会失败" + institutionID, data);
|
|
|
|
}
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#region 创建类方法
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 新建建筑
|
|
|
|
* @param key
|
|
|
|
* @param name
|
|
|
|
* @param buildingType
|
|
|
|
*/
|
|
|
|
static createBuilding(key: string, name: string, buildingType: BuildingType): BuildingData {
|
|
|
|
let result = false;
|
|
|
|
if (buildingType == null) {
|
|
|
|
throw new Error('create building buildingType is null');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (key == null) {
|
|
|
|
throw new Error('create building key is null');
|
|
|
|
}
|
|
|
|
|
|
|
|
if (name == null || name == "") {
|
|
|
|
throw new Error('create building name is null');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let normalData = new NormalData(key, name);
|
|
|
|
|
|
|
|
let newBuilding: BuildingData_Normal | BuildingData_Environment | BuildingData_ChemicalPlant;
|
|
|
|
switch (buildingType) {
|
|
|
|
case BuildingType.Normal:
|
|
|
|
newBuilding = new BuildingData_Normal();
|
|
|
|
|
|
|
|
DataManager.institutionData.normalBuildingDatas.push(newBuilding as BuildingData_Normal);
|
|
|
|
break;
|
|
|
|
case BuildingType.Environment:
|
|
|
|
newBuilding = new BuildingData_Environment();
|
|
|
|
DataManager.institutionData.environmentDatas.push(newBuilding as BuildingData_Environment);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case BuildingType.ChemicalPlant:
|
|
|
|
newBuilding = new BuildingData_ChemicalPlant();
|
|
|
|
DataManager.institutionData.chemicalPlantData.push(newBuilding as BuildingData_ChemicalPlant);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
newBuilding.normalData = normalData;
|
|
|
|
|
|
|
|
return newBuilding;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建属性
|
|
|
|
* @param key
|
|
|
|
* @param facilityType
|
|
|
|
*/
|
|
|
|
static createPropertyData(key: string, facilityType: FacilityType): PropertyData_Base {
|
|
|
|
let result: PropertyData_Base = null;
|
|
|
|
switch (facilityType) {
|
|
|
|
case FacilityType.AQCK: result = new PropertyData_AQCK(key, "", false, "安全出口", ""); break; //安全出口
|
|
|
|
case FacilityType.DSXHS:
|
|
|
|
case FacilityType.DXXHS:
|
|
|
|
case FacilityType.SZDSXHS:
|
|
|
|
case FacilityType.SZDXXHS: result = new PropertyData_Base_XHS(key, "", false, "", "", "", facilityType); break;
|
|
|
|
case FacilityType.DSSBJHQ:
|
|
|
|
case FacilityType.DXSBJHQ:
|
|
|
|
case FacilityType.QBSBJHQ:
|
|
|
|
case FacilityType.DGNSBJHQ: result = new PropertyData_Base_SBJHQ(key, "", "", "", "", facilityType); break;
|
|
|
|
case FacilityType.GD: result = new PropertyData_GD(key, "-"); break;
|
|
|
|
case FacilityType.PL: result = new PropertyData_PL(key, 0, "", []); break;
|
|
|
|
case FacilityType.JTQ:
|
|
|
|
case FacilityType.JJQ: result = new PropertyData_Q(key, "", "", "", null, facilityType); break;
|
|
|
|
case FacilityType.TPBZ:
|
|
|
|
case FacilityType.XKS:
|
|
|
|
case FacilityType.BF:
|
|
|
|
case FacilityType.SX: result = new PropertyData_Base_IMG(key, "", "", "", facilityType); break;
|
|
|
|
case FacilityType.LSXFB:
|
|
|
|
case FacilityType.WSXFB:
|
|
|
|
case FacilityType.CYXFB: result = new PropertyData_Base_XFB(key, "", "", "", "", "", "", facilityType); break;
|
|
|
|
case FacilityType.FHFQ: result = new PropertyData_FHFQ(key, "", ""); break;
|
|
|
|
case FacilityType.SSLT: result = new PropertyData_SSLT(key, "", "", ""); break;
|
|
|
|
case FacilityType.XFDT: result = new PropertyData_XFDT(key, "", "", ""); break;
|
|
|
|
case FacilityType.WXY: result = new PropertyData_Base_IMG(key, "", "", "", facilityType); break;
|
|
|
|
case FacilityType.ZDQY: result = new PropertyData_ZDQY(key, "", "", "", "", "", []); break;
|
|
|
|
case FacilityType.DWBZ: result = new PropertyData_DWBZ(key, "", ""); break;
|
|
|
|
//其他在表格中显示无
|
|
|
|
}
|
|
|
|
|
|
|
|
if (result == null) {
|
|
|
|
result = new PropertyData_public(key, facilityType);
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 新建标绘方案
|
|
|
|
* @param name
|
|
|
|
*/
|
|
|
|
static createMarkPlane(name: string) {
|
|
|
|
if (DataManager.allMarkPlanData == null) {
|
|
|
|
console.error("当前单位没有标绘方案,无法新建");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let index = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region 查询类方法
|
|
|
|
/**
|
|
|
|
* 根据类型查询建筑列表
|
|
|
|
* @param buildingType 建筑类型
|
|
|
|
*/
|
|
|
|
static getBuildingDataListByType(buildingType: BuildingType): BuildingData_Normal[] | BuildingData_Environment[] | BuildingData_ChemicalPlant[] {
|
|
|
|
let buildingDatas: BuildingData_Normal[] | BuildingData_Environment[] | BuildingData_ChemicalPlant[];
|
|
|
|
|
|
|
|
switch (buildingType) {
|
|
|
|
case BuildingType.Normal:
|
|
|
|
buildingDatas = DataManager.institutionData.normalBuildingDatas;
|
|
|
|
break;
|
|
|
|
case BuildingType.Environment:
|
|
|
|
buildingDatas = DataManager.institutionData.environmentDatas;
|
|
|
|
break;
|
|
|
|
case BuildingType.ChemicalPlant:
|
|
|
|
buildingDatas = DataManager.institutionData.chemicalPlantData;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return buildingDatas;
|
|
|
|
|
|
|
|
}
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region 修改和删除类方法
|
|
|
|
|
|
|
|
//删除一个当前单位的buildingData
|
|
|
|
static deleteOneBuildingData(buildingType: BuildingType, key: string) {
|
|
|
|
let buildingDatas = DataManager.getBuildingDataListByType(buildingType);
|
|
|
|
|
|
|
|
for (let i = 0; i < buildingDatas.length; i++) {
|
|
|
|
if (buildingDatas[i].normalData.key == key) {
|
|
|
|
TsTool.arrayRemove(buildingDatas, buildingDatas[i]);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 保存当前的标绘信息
|
|
|
|
*/
|
|
|
|
static saveallMarkPlanData() {
|
|
|
|
console.log("当前标绘", DataManager.allMarkPlanData);
|
|
|
|
ServeManager.instance.saveMarkData(DataManager.allMarkPlanData);
|
|
|
|
}
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
//#region 文件修改类
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建manifest 类文件
|
|
|
|
* @param fileName //资源文件名,例如 zhuti.gltf
|
|
|
|
* @param version //版本号
|
|
|
|
*/
|
|
|
|
static createFile_manifest(fileName: string, version: number): File {
|
|
|
|
let file;
|
|
|
|
let data = [];
|
|
|
|
|
|
|
|
let info = {
|
|
|
|
"version": version,
|
|
|
|
"enableSceneOffline": true,
|
|
|
|
"enableTexturesOffline": true
|
|
|
|
};
|
|
|
|
|
|
|
|
data.push(JSON.stringify(info));
|
|
|
|
|
|
|
|
|
|
|
|
let properties = { type: 'text/cache-manifest' }; // 设置文件的 mime-type.
|
|
|
|
try {
|
|
|
|
// 使用文件构造函数指定文件名,如果 ...
|
|
|
|
file = new File(data, fileName + ".manifest", properties);
|
|
|
|
} catch (e) {
|
|
|
|
// ... 如果不支持Blob构造函数,请退回到Blob构造函数。
|
|
|
|
file = new Blob(data, properties);
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log("创建版本号" + version);
|
|
|
|
|
|
|
|
return file;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建版本文件(版本号+1)
|
|
|
|
* @param indoorData
|
|
|
|
*/
|
|
|
|
static createManifestFile(modelData: ModelData): File {
|
|
|
|
modelData.version += 1;
|
|
|
|
let manifestFile = DataManager.createFile_manifest(modelData.resName, modelData.version);
|
|
|
|
|
|
|
|
return manifestFile;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 读取版本文件中的版本号
|
|
|
|
* @param file
|
|
|
|
*/
|
|
|
|
static readFile_manifest(file: File, onLoad: (result) => void): number {
|
|
|
|
let version = 1;
|
|
|
|
|
|
|
|
var reader = new FileReader();
|
|
|
|
reader.onload = function (evt) { // 指定异步读写后触发的函数
|
|
|
|
ModeManager.log(evt.target.result);
|
|
|
|
let object = JSON.parse(evt.target.result as string);
|
|
|
|
onLoad(object.version);
|
|
|
|
};
|
|
|
|
reader.readAsText(file);
|
|
|
|
|
|
|
|
return version;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//模型信息变化类型
|
|
|
|
export enum ModelChangeType {
|
|
|
|
Add,
|
|
|
|
Remove,
|
|
|
|
Update,
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|