Browse Source

尝试从模型获取消火栓

dev
刘向辉 3 years ago
parent
commit
5016001955
  1. 22
      src/app/babylon/controller/data-manager.ts
  2. 6
      src/app/babylon/controller/info-manager.ts
  3. 22
      src/app/babylon/model/data/institution/facility/property-data/in/property-data-mhq.ts
  4. 31
      src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-fhfq.ts
  5. 26
      src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-sslt.ts
  6. 24
      src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-xfdt.ts
  7. 42
      src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-zdqy.ts
  8. 0
      src/app/babylon/model/data/institution/facility/property-data/out/property-data-dwbz.ts
  9. 0
      src/app/babylon/model/data/institution/facility/property-data/out/property-data-pl.ts
  10. 0
      src/app/babylon/model/data/institution/facility/property-data/out/property-data-q.ts
  11. 103
      src/app/babylon/model/data/model-data/model-data-facility.ts
  12. 6
      src/app/babylon/model/data/model-data/model-edit-data.ts
  13. 1
      src/app/babylon/model/info/building/building-info.ts
  14. 40
      src/app/babylon/view/building-window/building-ui-item.ts
  15. 19
      src/app/babylon/view/building-window/building-window.ts
  16. 139
      src/app/babylon/view/facility-window/facility-window.ts

22
src/app/babylon/controller/data-manager.ts

@ -9,9 +9,11 @@ import {
BuildingType
} from '../model/data/institution/building/building-data';
import { AllFacilityData } from '../model/data/institution/facility/all-facility-data';
import { PropertyData_DWBZ } from '../model/data/institution/facility/property-data/indoor/property-data-dwbz';
import { PropertyData_PL } from '../model/data/institution/facility/property-data/outdoor/property-data-pl';
import { PropertyData_Q } from '../model/data/institution/facility/property-data/outdoor/property-data-q';
import { PropertyData_Base_IMG } from '../model/data/institution/facility/property-data/base/property-data-base-img';
import { PropertyData_MHQ } from '../model/data/institution/facility/property-data/in/property-data-mhq';
import { PropertyData_DWBZ } from '../model/data/institution/facility/property-data/out/property-data-dwbz';
import { PropertyData_PL } from '../model/data/institution/facility/property-data/out/property-data-pl';
import { PropertyData_Q } from '../model/data/institution/facility/property-data/out/property-data-q';
import { PropertyData_Base } from '../model/data/institution/facility/property-data/property-data-base';
import { PropertyData_public } from '../model/data/institution/facility/property-data/property-data-public';
import {
@ -423,12 +425,20 @@ export class DataManager {
static createPropertyData(key: string, facilityType: FacilityType): PropertyData_Base {
let result: PropertyData_Base = null;
switch (facilityType) {
//自定义放置
case FacilityType.PL: result = new PropertyData_PL(key, 0, "", []); break;
case FacilityType.QY: result = new PropertyData_Q(key, "", "", "", null, facilityType); break;
case FacilityType.TPBZ:
case FacilityType.TPBZ: result = new PropertyData_Base_IMG(key, "", "", "", facilityType); break;
case FacilityType.DWBZ: result = new PropertyData_DWBZ(key, "", ""); break;
//其他在表格中显示无
//建筑模型内内置的
case FacilityType.XF_MHQ_PT_4:
case FacilityType.XF_MHQ_PT_8:
case FacilityType.XF_MHQ_PT_35:
case FacilityType.XF_MHQ_GF_4:
case FacilityType.XF_MHQ_GF_8:
case FacilityType.XF_MHQ_GF_35: result = new PropertyData_MHQ(key, facilityType); break;
}
if (result == null) {

6
src/app/babylon/controller/info-manager.ts

@ -2,7 +2,7 @@
import { AbstractMesh } from "@babylonjs/core";
import { MarkData } from "../model/data/mark/mark-data";
import { ModelData } from "../model/data/model-data/model-data";
import { FacilityType, ModelData_facility } from "../model/data/model-data/model-data-facility";
import { FacilityInBuildingType, FacilityType, ModelData_facility } from "../model/data/model-data/model-data-facility";
import { ModelEditData } from "../model/data/model-data/model-edit-data";
import { TransformData } from "../model/data/transform-data";
import { BuildingInfo } from "../model/info/building/building-info";
@ -117,6 +117,8 @@ export class InfoManager {
}
/**
* info
* @param key
@ -174,6 +176,7 @@ export class InfoManager {
buildingInfo,
true,
false,
null,//要根据类型,是不是从场景中查找
(modelInfo: ModelInfo_facility) => {
if (ModeManager.currentMode == ModeType.Look) {
modelInfo.setIconEnable(false);//查看模式下隐藏所有设备ui
@ -199,6 +202,7 @@ export class InfoManager {
facilityInfoByType.facilityInfo.push(facilityInfo);
}
//将某设备info,从相应的列表中移除
static removeFacilityInfoToTypeList(facilityInfo: ModelInfo_facility, facilityInfosByType: FacilityInfoByType[]) {
let facilityType = (facilityInfo.modelData as ModelData_facility).facilityType;

22
src/app/babylon/model/data/institution/facility/property-data/in/property-data-mhq.ts

@ -0,0 +1,22 @@
import { FacilityType } from "../../../../model-data/model-data-facility";
import { PropertyData_Base } from "../property-data-base";
/**
*
*/
export class PropertyData_MHQ extends PropertyData_Base {
constructor(key: string, facilityType: FacilityType) {
super(key, facilityType);
}
clone(key: string) {
let result = new PropertyData_MHQ(key, this.facilityType);
return result;
}
}

31
src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-fhfq.ts

@ -1,31 +0,0 @@
import { Color3, Color4 } from "@babylonjs/core";
import { Type } from "class-transformer";
import { FacilityType } from "../../../../model-data/model-data-facility";
import { PropertyData_Base } from "../property-data-base";
/**
*
*/
export class PropertyData_FHFQ extends PropertyData_Base {
name: string = "";//名称
area: string = "";//面积
@Type(() => Color3)
color: Color3 = Color3.Red();//颜色
constructor(key: string, name: string, area: string, color: Color3 = Color3.Red()) {
super(key, FacilityType.FHFQ);
this.name = name;
this.area = area;
this.color = color;
}
clone(key: string) {
let result = new PropertyData_FHFQ(key, this.name, this.area, this.color);
return result;
}
}

26
src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-sslt.ts

@ -1,26 +0,0 @@
import { FacilityType } from "../../../../model-data/model-data-facility";
import { PropertyData_Base_LT } from "../base/property-data-base-lt";
import { PropertyData_Base } from "../property-data-base";
/**
*
*/
export class PropertyData_SSLT extends PropertyData_Base_LT {
width: string = "";//宽度
constructor(key: string, number: string, channel: string, width: string) {
super(key, number, channel, FacilityType.SSLT);
this.width = width;
}
clone(key: string) {
let result = new PropertyData_SSLT(key, this.number, this.channel, this.width);
return result;
}
}

24
src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-xfdt.ts

@ -1,24 +0,0 @@
import { FacilityType } from "../../../../model-data/model-data-facility";
import { PropertyData_Base_LT } from "../base/property-data-base-lt";
import { PropertyData_Base } from "../property-data-base";
/**
*
*/
export class PropertyData_XFDT extends PropertyData_Base_LT {
weight: string = "";//载重
constructor(key: string, number: string, channel: string, weight: string) {
super(key, number, channel, FacilityType.XFDT);
this.weight = weight;
}
clone(key: string) {
let result = new PropertyData_XFDT(key, this.number, this.channel, this.weight);
return result;
}
}

42
src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-zdqy.ts

@ -1,42 +0,0 @@
import { FacilityType } from "../../../../model-data/model-data-facility";
import { PropertyData_Base } from "../property-data-base";
/**
*
*/
export class PropertyData_ZDQY extends PropertyData_Base {
name: string = "";//名称
pos: string = "";//所在位置
construction: string = "";//建筑结构
character: string = "";//使用性质
danger: string = "";//主要危险性
imgs: string[] = [];//图片
constructor(key: string, name: string, pos: string, construction: string, character: string, danger: string, imgs: string[]) {
super(key, FacilityType.ZDQY);
this.name = name;
this.pos = pos;
this.construction = construction;
this.character = character;
this.danger = danger;
this.imgs = imgs;
}
clone(key: string) {
let newImgs: string[] = [];
for (let i = 0; i < this.imgs.length; i++) {
newImgs.push(this.imgs[i]);
}
let result = new PropertyData_ZDQY(key, this.name, this.pos, this.construction, this.character, this.danger, newImgs);
return result;
}
}

0
src/app/babylon/model/data/institution/facility/property-data/indoor/property-data-dwbz.ts → src/app/babylon/model/data/institution/facility/property-data/out/property-data-dwbz.ts

0
src/app/babylon/model/data/institution/facility/property-data/outdoor/property-data-pl.ts → src/app/babylon/model/data/institution/facility/property-data/out/property-data-pl.ts

0
src/app/babylon/model/data/institution/facility/property-data/outdoor/property-data-q.ts → src/app/babylon/model/data/institution/facility/property-data/out/property-data-q.ts

103
src/app/babylon/model/data/model-data/model-data-facility.ts

@ -119,6 +119,9 @@ export enum FacilityShowType {
*
*/
export enum FacilityType {
//外部自定义
/**
*
*/
@ -138,5 +141,103 @@ export enum FacilityType {
*/
DWBZ = "DWBZ",
//模型内置
/**
* - 4kg
*/
XF_MHQ_PT_4 = "XF_MHQ_PT_4",
/**
* - 8kg
*/
XF_MHQ_PT_8 = "XF_MHQ_PT_8",
/**
* - 35kg ()
*/
XF_MHQ_PT_35 = "XF_MHQ_PT_35",
/**
* - 4kg
*/
XF_MHQ_GF_4 = "XF_MHQ_GF_4",
/**
* - 8kg
*/
XF_MHQ_GF_8 = "XF_MHQ_GF_8",
/**
* - 36kg
*/
XF_MHQ_GF_35 = "XF_MHQ_GF_35",
/**
*
*/
XF_MHT = "XF_MHT",
/**
*
*/
XF_XFQ = "XF_XFQ",
/**
*
*/
XF_XFT = "XF_XFT",
/**
*
*/
XF_XFCM = "XF_XFCM",
/**
*
*/
XF_XFF = "XF_XFF",
/**
*
*/
XF_XFS = "XF_XFS",
/**
*
*/
JY_JYJ = "JY_JYJ",
/**
*
*/
JY_YG = "JY_YG",
/**
*
*/
ZD_YG = "ZD_YG",
}
/**
* 线
*/
JY_SYGX = "JY_SYGX",
/**
* 线
*/
JY_YQHSGX = "JY_YQHSGX",
/**
* 线
*/
XF_TSLX = "XF_TSLX",
/**
*
*/
XF_SSD = "XF_SSD"
}
/**
*
*/
export enum FacilityInBuildingType {
/**
*
*/
Facility,
/**
*
*/
Oilling,
/**
*
*/
Stop,
}

6
src/app/babylon/model/data/model-data/model-edit-data.ts

@ -12,7 +12,7 @@ export class ModelEditData {
@Type(() => ModelData)
modelData: ModelData; //模型信息
@Type(() => FacilityDatasByType)
facilities: FacilityDatasByType[] = []; //含有哪些设备
facilities: FacilityDatasByType[] = []; //含有哪些设备(手动放置)
constructor() {
// this.belongToBuilding = belongToBuilding;
@ -59,6 +59,10 @@ export class ModelEditData {
return result;
}
}
/**

1
src/app/babylon/model/info/building/building-info.ts

@ -115,4 +115,5 @@ export class BuildingInfo {
SceneManager.destroyModel(this.modelInfo);
}
}
}

40
src/app/babylon/view/building-window/building-ui-item.ts

@ -1,14 +1,21 @@
import { AbstractMesh, Mesh, TransformNode } from "@babylonjs/core";
import { ConfigManager } from "../../controller/config-manager";
import { InfoManager } from "../../controller/info-manager";
import { SceneManager } from "../../controller/scene-manager";
import { IndoorStatus } from "../../controller/status/indoor-status";
import { StatusManager } from "../../controller/status/status-manager";
import { BuildingType, BuildingData_Normal } from "../../model/data/institution/building/building-data";
import { FacilityPosType, FacilityType, ModelData_facility } from "../../model/data/model-data/model-data-facility";
import { ModelEditData } from "../../model/data/model-data/model-edit-data";
import { TransformData } from "../../model/data/transform-data";
import { BuildingInfo } from "../../model/info/building/building-info";
import { ModelInfo_building } from "../../model/info/model/model-info-building";
import { BabylonTool } from "../../tool/babylon-tool";
import { GizmoTool } from "../../tool/gizmo-tool";
import { TsTool } from "../../tool/ts-tool";
import { FacilityWindow } from "../facility-window/facility-window";
import { MarkWindow } from "../mark-window/mark-window";
// import { BuildingCreateWindow } from "./building-create-window";
import { BuildingWindow } from "./building-window";
@ -196,6 +203,39 @@ export class BuildingUIItem {
}
/**
*
* @param mesh
*/
createFacilityByMesh(mesh: AbstractMesh) {
FacilityWindow.instance.createFacilityByMesh(mesh, this.buildingInfo);
}
/**
*
* @param mesh
*/
createOilingByMesh(mesh: AbstractMesh) {
FacilityWindow.instance.createOilingByMesh(mesh, this.buildingInfo);
}
/**
*
* @param mesh
*/
createStopByMesh(mesh: AbstractMesh) {
FacilityWindow.instance.createStopByMesh(mesh, this.buildingInfo);
}
/**
* mesh中寻找的设备信息
*/
clearFacilityFromMesh() {
}
//#endregion
//#region 内部私有

19
src/app/babylon/view/building-window/building-window.ts

@ -215,7 +215,7 @@ export class BuildingWindow extends UIBase {
BuildingWindow.instance = this;
this.three = PlanComponent.instance;
this.three.buildingUIItems = this.buildingUIItems
this.buildingUIItems.length? this.three.beforeOneBuildingID = this.three.buildingUIItems[0].getBuildingID() : null
this.buildingUIItems.length ? this.three.beforeOneBuildingID = this.three.buildingUIItems[0].getBuildingID() : null
}
@ -520,35 +520,40 @@ export class BuildingWindow extends UIBase {
*
*/
public clearHomeLessFacilityData() {
if (this.currentBuidngItem != null) {
let allNode = this.currentBuidngItem.clearFacilityFromMesh();
}
}
/**
*
* ()
*/
public getModelAndCreateFacilityData() {
this.clearHomeLessFacilityData();
if (this.currentBuidngItem != null) {
//获取所有transformNodes
let allNode = this.currentBuidngItem.buildingInfo.ModelInfo.modelBox.getChildTransformNodes(false);
let allNode = this.currentBuidngItem.buildingInfo.ModelInfo.modelBox.getChildMeshes(false);
for (let i = 0; i < allNode.length; i++) {
let nodeName = allNode[i].name;
if (TsTool.stringContain(nodeName, this.c_xiaoFang)) //消防
{
this.currentBuidngItem.createFacilityByMesh(allNode[i]);
}
else if (TsTool.stringContain(nodeName, this.c_xiaoFang))//加油站
{
this.currentBuidngItem.createOilingByMesh(allNode[i]);
}
else if (TsTool.stringContain(nodeName, this.c_zheDang))//遮挡
{
this.currentBuidngItem.createStopByMesh(allNode[i]);
}
}
}

139
src/app/babylon/view/facility-window/facility-window.ts

@ -1,4 +1,5 @@
import {
AbstractMesh,
EventState,
Mesh,
MeshBuilder,
@ -21,13 +22,15 @@ import { BuildingStatus } from '../../controller/status/building-status';
import { IndoorStatus } from '../../controller/status/indoor-status';
import { StatusManager } from '../../controller/status/status-manager';
import { UIManager } from '../../controller/ui-manager';
import { FacilityPosType, ModelData_facility, FacilityShowType } from '../../model/data/model-data/model-data-facility';
import { FacilityPosType, ModelData_facility, FacilityShowType, FacilityType } from '../../model/data/model-data/model-data-facility';
import { TransformData } from '../../model/data/transform-data';
import { BuildingInfo } from '../../model/info/building/building-info';
import { AreaInfo } from '../../model/info/model/facilityinfo-tool/facility-area';
import { ModelInfo_facility } from '../../model/info/model/model-info-facility';
import { BabylonTool } from '../../tool/babylon-tool';
import { BabylonUIStyleTool } from '../../tool/babylon-ui-style-tool';
import { GizmoTool } from '../../tool/gizmo-tool';
import { TsTool } from '../../tool/ts-tool';
import { CopyFacilityInfo, FacilityInfoInSceneWindow } from '../facilityinfoinscene-window/facilityinfoinscene-window';
import { ToolbarWindow } from '../toolbar-window/toobar-window';
@ -235,7 +238,7 @@ export class FacilityWindow extends UIBase {
if (eventData.event.button == 0) { //左键正常
if (eventData.pickInfo.hit && !SceneManager.s_isPointerDrag) {
if (FacilityWindow.s_currentFacilityItem != null) {
instance.createNewFacility(eventData.pickInfo.pickedPoint);
instance.createNewFacilityByPos(eventData.pickInfo.pickedPoint);
return;
}
}
@ -294,13 +297,36 @@ export class FacilityWindow extends UIBase {
//创建新的设施(用世界坐标)
createNewFacility(worldPosition: Vector3) {
createNewFacilityByPos(worldPosition: Vector3) {
let facilityData = FacilityWindow.s_currentFacilityItem.facilityData.clone(
this.createIndex.toString()
);
facilityData.transformData.position = worldPosition.clone();
this.createNewFacility(facilityData);
}
/**
* mesh创建设备
* @param mesh
* @param type
*/
createNewFacilityByMesh(mesh: AbstractMesh, type: FacilityType) {
let facilityData = this.createFacilityDataFromMesh(mesh, type);
//let facilityInfo = this.createFacilityInfoFromMesh(facilityData, mesh, buildingInfo);
this.createNewFacility(facilityData, mesh);
}
/**
* (data)
* @param facilityData
* @param mesh null表示利用根据数据加载模型null表示已经准备好了
*/
createNewFacility(facilityData: ModelData_facility, mesh: AbstractMesh = null) {
let currentBuidngItem = StatusManager.getStatus<BuildingStatus>(BuildingStatus)
.buildingWindow.currentBuidngItem;
if (currentBuidngItem == null) {
@ -311,11 +337,10 @@ export class FacilityWindow extends UIBase {
Event_ChangeFacility.dispatch(facilityData, ModelChangeType.Add, null);
this.createFacility(facilityData, true, undefined, false, true, (modelInfo) => {
this.createFacility(facilityData, true, undefined, false, true, mesh, (modelInfo) => {
GizmoTool.onPickMeshInfoObservable.notifyObservers(modelInfo);
});
}
/**
@ -348,7 +373,7 @@ export class FacilityWindow extends UIBase {
}
Event_ChangeFacility.dispatch(facilityData, ModelChangeType.Add, null);
this.createFacility(facilityData, false, undefined, true, true, (modelInfo) => {
this.createFacility(facilityData, false, undefined, true, true, null, (modelInfo) => {
//GizmoTool.onPickMeshInfoObservable.notifyObservers(modelInfo);
modelInfo.onStopLongPress(null, null);
@ -375,6 +400,7 @@ export class FacilityWindow extends UIBase {
buildingInfo: BuildingInfo = null,
isLocalPos = false,
select = false,
mesh: AbstractMesh = null, //null 表示利用根据数据加载模型,不是null表示已经准备好了
onSuccess?: (modelInfo: ModelInfo_facility) => void
): ModelInfo_facility {
@ -508,4 +534,105 @@ export class FacilityWindow extends UIBase {
return buildingInfo;
}
//#region 从已有模型创建设备
/**
*
* @param mesh
*/
createFacilityByMesh(mesh: AbstractMesh, buildingInfo: BuildingInfo) {
if (TsTool.stringContain(mesh.name, FacilityType.XF_MHQ_GF_4)) {
this.createNewFacilityByMesh(mesh, FacilityType.XF_MHQ_GF_4);
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHQ_GF_8)) {
this.createNewFacilityByMesh(mesh, FacilityType.XF_MHQ_GF_8);
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHQ_GF_35)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHQ_PT_4)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHQ_PT_8)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHQ_PT_35)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHT)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_SSD)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_TSLX)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_XFCM)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_XFF)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_XFQ)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_XFS)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.XF_XFT)) {
}
else if (TsTool.stringContain(mesh.name, FacilityType.ZD_YG)) {
}
}
/**
*
* @param mesh
*/
createOilingByMesh(mesh: AbstractMesh, buildingInfo: BuildingInfo) {
}
/**
*
* @param mesh
*/
createStopByMesh(mesh: AbstractMesh, buildingInfo: BuildingInfo) {
}
createFacilityDataFromMesh(mesh: AbstractMesh, type: FacilityType) {
let name = ConfigManager.getFacilityTypeName(type);
let result = new ModelData_facility(mesh.name, type, name, mesh.name, new TransformData(), FacilityPosType.In);
return result;
}
/**
* mesh和设备data创建设备Info()
* @param facilityData
* @param mesh
* @param buildingInfo
*/
createFacilityInfoFromMesh(facilityData: ModelData_facility, mesh: AbstractMesh, buildingInfo: BuildingInfo) {
let facilityInfo = InfoManager.newModelInfo_facility(
facilityData.key,
facilityData,
null,
mesh,
buildingInfo,
true
);
return facilityInfo;
}
//#endregion
}

Loading…
Cancel
Save