diff --git a/src/app/babylon/controller/serve-manager.ts b/src/app/babylon/controller/serve-manager.ts index 7bb055c..12c7167 100644 --- a/src/app/babylon/controller/serve-manager.ts +++ b/src/app/babylon/controller/serve-manager.ts @@ -152,7 +152,7 @@ export class ServeManager { //队列性,批量上传 uploadFile(index: number, files: File[], resPath_out, onOneSuccess: (name: string, path: string, file: File) => void, onEnd: () => void) { if (index < files.length) { - //console.log("上传文件", files[index].name); + console.log("上传文件", files[index].name); ServeManager.instance.openFileSelect(files[index], resPath_out, (name: string, path: string, file: File) => { onOneSuccess(name, path, file); this.uploadFile(index + 1, files, resPath_out, onOneSuccess, onEnd); diff --git a/src/app/babylon/model/info/model/model-info-building.ts b/src/app/babylon/model/info/model/model-info-building.ts index 5ca3014..c54124b 100644 --- a/src/app/babylon/model/info/model/model-info-building.ts +++ b/src/app/babylon/model/info/model/model-info-building.ts @@ -1,5 +1,6 @@ import { Observer, Scene, TransformNode } from "@babylonjs/core"; import { Button, Rectangle } from "@babylonjs/gui"; +import { ConfigManager } from "src/app/babylon/controller/config-manager"; import { ModelChangeType } from "src/app/babylon/controller/data-manager"; import { Event_ModelInfoChange } from "src/app/babylon/controller/event-manager/events/event-modelinfo-change"; import { InfoManager } from "src/app/babylon/controller/info-manager"; @@ -11,9 +12,11 @@ import { StatusManager } from "src/app/babylon/controller/status/status-manager" import { BabylonUIStyleTool } from "src/app/babylon/tool/babylon-ui-style-tool"; import { GizmoTool } from "src/app/babylon/tool/gizmo-tool"; import { TsTool } from "src/app/babylon/tool/ts-tool"; +import { FacilityWindow } from "src/app/babylon/view/facility-window/facility-window"; import { BuildingType } from "../../data/institution/building/building-data"; +import { FacilityPosType, ModelData_facility } from "../../data/model-data/model-data-facility"; import { ModelInfo_mark } from "../mark/model-info-mark"; import { ModelInfo } from "./model-info"; import { FacilityInfoByType, ModelInfo_facility } from "./model-info-facility"; @@ -152,6 +155,24 @@ export class ModelInfo_building extends ModelInfo { super.dispose(); } + /** + * 用户移除来自模型的设备 + */ + clearFacilityFromMesh() { + let infos = []; + for (let i = 0; i < this.facilityInfos.length; i++) { + if (ConfigManager.getPosType(this.facilityInfos[i].type) == FacilityPosType.In) { + for (let j = 0; j < this.facilityInfos[i].facilityInfo.length; j++) { + infos.push(this.facilityInfos[i].facilityInfo[j]); + } + } + } + for (let i = 0; i < infos.length; i++) { + FacilityWindow.instance.disposeFacility(infos[i]); + } + infos = []; + } + //释放所有设备 disposeAllFacility() { ModeManager.log('释放室内设备' + this.facilityInfos.length); @@ -197,7 +218,10 @@ export class ModelInfo_building extends ModelInfo { InfoManager.removeFacilityInfoToTypeList(modelInfo_facility, this.facilityInfos); } Event_ModelInfoChange.dispatch(modelInfo_facility, ModelChangeType.Remove); - SceneManager.destroyModel(modelInfo_facility); + if ((modelInfo_facility.modelData as ModelData_facility).posType == FacilityPosType.Out) { + SceneManager.destroyModel(modelInfo_facility); + } + } /** diff --git a/src/app/babylon/view/building-window/building-ui-item.ts b/src/app/babylon/view/building-window/building-ui-item.ts index 9b11ff5..a3b5c47 100644 --- a/src/app/babylon/view/building-window/building-ui-item.ts +++ b/src/app/babylon/view/building-window/building-ui-item.ts @@ -233,6 +233,8 @@ export class BuildingUIItem { */ clearFacilityFromMesh() { + this.buildingInfo.ModelInfo.clearFacilityFromMesh(); + } diff --git a/src/app/babylon/view/building-window/building-window.ts b/src/app/babylon/view/building-window/building-window.ts index 4985fcb..26062b7 100644 --- a/src/app/babylon/view/building-window/building-window.ts +++ b/src/app/babylon/view/building-window/building-window.ts @@ -522,12 +522,21 @@ export class BuildingWindow extends UIBase { public clearHomeLessFacilityData() { if (this.currentBuidngItem != null) { - let allNode = this.currentBuidngItem.clearFacilityFromMesh(); + this.currentBuidngItem.clearFacilityFromMesh(); } + } + /** + * 清空所有来自模型的设备 + */ + public clearAllFacilityFromMeshData() { + if (this.currentBuidngItem != null) { + this.currentBuidngItem.clearFacilityFromMesh(); + } } + /** * 获取并创建建筑上的消防设备数据(内部模式制作时,调用一次) */ diff --git a/src/app/babylon/view/facility-window/facility-window.ts b/src/app/babylon/view/facility-window/facility-window.ts index c286c68..727d0c8 100644 --- a/src/app/babylon/view/facility-window/facility-window.ts +++ b/src/app/babylon/view/facility-window/facility-window.ts @@ -381,7 +381,10 @@ export class FacilityWindow extends UIBase { } } - //移除设备(等待UI调用) + /** + * 用户移除设备(等待UI调用) + * @param modelInfo_facility + */ disposeFacility(modelInfo_facility: ModelInfo_facility) { let modelData = modelInfo_facility.modelData; diff --git a/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts b/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts index 9949ae3..d3cf2ed 100644 --- a/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts +++ b/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts @@ -1,6 +1,7 @@ import { EventManager } from "@angular/platform-browser"; import { AbstractMesh, Ray, RayHelper, Vector3 } from "@babylonjs/core"; import { classToClass } from "class-transformer"; +import { PlanComponent } from "src/app/pages/plan/plan.component"; import { ModelChangeType } from "../../controller/data-manager"; import { Event_KeyboardInput } from "../../controller/event-manager/events/event-keyboard-input"; import { Event_ModelInfoChange } from "../../controller/event-manager/events/event-modelinfo-change"; @@ -23,7 +24,7 @@ import { FacilityInfoUIItem } from "./facilityinfo-ui-item"; //所有放在场景中的设备 信息界面 export class FacilityInfoInSceneWindow extends UIBase { static instance: FacilityInfoInSceneWindow; - // three: ThreeDimensionalHomeComponent;//前端组件 + three: PlanComponent;//前端组件 // scrollView: ScrollViewer; // content: StackPanel; @@ -149,31 +150,22 @@ export class FacilityInfoInSceneWindow extends UIBase { //选中,通知前端 selectFacilityItemToThree(facilityInfoUIItem: FacilityInfoUIItem[], isChecked?: boolean) { - // this.three = ThreeDimensionalHomeComponent.instance; - // if (this.isMultiselect) { // 多选 - // if (isChecked) { //选中 - // facilityInfoUIItem.forEach(element => { - // element.isChecked = isChecked - // let isFind = this.three.beforeOnefacilityInfoList.find(item => { return item === element.getID() }) - // isFind == undefined || isFind == null ? this.three.beforeOnefacilityInfoList.push(element.getID()) : null - // }) - // } else { //取消选中 - // this.three.isShowRightNature = false - // facilityInfoUIItem.forEach(element => { - // element.isChecked = isChecked - // let index = this.three.beforeOnefacilityInfoList.findIndex(value => value === element.getID()) - // index != undefined && index != null ? this.three.beforeOnefacilityInfoList.splice(index, 1) : null - // }) - // } - // } else { // 单选 - // if (isChecked) { //选中 - // this.three.beforeOnefacilityInfo = facilityInfoUIItem[0].getID(); - // this.three.getPropertyData(facilityInfoUIItem[0]) - // } else { //取消选中 - // this.three.isShowRightNature = false - // this.three.beforeOnefacilityInfo = null - // } - // } + this.three = PlanComponent.instance; + if (this.isMultiselect) { // 多选 + if (isChecked) { //选中 + + } else { //取消选中 + + } + } else { // 单选 + if (isChecked) { //选中 + this.three.beforeOnefacilityInfo = facilityInfoUIItem[0].getID(); + this.three.getPropertyData(facilityInfoUIItem[0]) + } else { //取消选中 + // this.three.isShowRightNature = false + this.three.beforeOnefacilityInfo = null + } + } } /** @@ -211,7 +203,7 @@ export class FacilityInfoInSceneWindow extends UIBase { } /** - * 根据类型获取数目 + * 根据类型获取设备在UI中的显示状态 * @param facilityType */ getFacilityUIShowType(facilityType: FacilityType): boolean { @@ -221,7 +213,7 @@ export class FacilityInfoInSceneWindow extends UIBase { // return item.isShow; // } // } - return false; + return true; } diff --git a/src/app/babylon/view/toolbar-window/toobar-window.ts b/src/app/babylon/view/toolbar-window/toobar-window.ts index cfbe8f9..0f25a4b 100644 --- a/src/app/babylon/view/toolbar-window/toobar-window.ts +++ b/src/app/babylon/view/toolbar-window/toobar-window.ts @@ -90,12 +90,19 @@ export class ToolbarWindow extends UIBase { //#endregion /** - * 清空找不到具体模型的设备信息 + * 清空找不到具体模型的设备info和data */ clearHomeLessFacilityData() { BuildingWindow.instance.clearHomeLessFacilityData(); } + /** + * 清空所有来自模型的设备info和data + */ + clearAllFacilityDataFromMesh() { + BuildingWindow.instance.clearAllFacilityFromMeshData(); + } + /** * 获取并创建建筑上的消防设备数据 */ diff --git a/src/app/pages/pages.module.ts b/src/app/pages/pages.module.ts index b509d59..ddab50b 100644 --- a/src/app/pages/pages.module.ts +++ b/src/app/pages/pages.module.ts @@ -28,6 +28,7 @@ import { NzModalModule } from 'ng-zorro-antd/modal'; import { NzPaginationModule } from 'ng-zorro-antd/pagination'; import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; import { NzMessageModule } from 'ng-zorro-antd/message'; +import { NzSpinModule } from 'ng-zorro-antd/spin'; import { TodayWarningAdminComponent } from './today-warning-admin/today-warning-admin.component'; import { CriminalRecordsAdminComponent } from './criminal-records-admin/criminal-records-admin.component'; @NgModule({ @@ -56,7 +57,8 @@ import { CriminalRecordsAdminComponent } from './criminal-records-admin/criminal NzModalModule, NzPaginationModule, NzDropDownModule, - NzMessageModule + NzMessageModule, + NzSpinModule ] }) export class PagesModule { } diff --git a/src/app/pages/plan/plan.component.html b/src/app/pages/plan/plan.component.html index f33d257..a79ab12 100644 --- a/src/app/pages/plan/plan.component.html +++ b/src/app/pages/plan/plan.component.html @@ -1,3 +1,4 @@ +