邵佳豪 3 years ago
parent
commit
715536540b
  1. 2
      src/app/babylon/controller/serve-manager.ts
  2. 24
      src/app/babylon/model/info/model/model-info-building.ts
  3. 2
      src/app/babylon/view/building-window/building-ui-item.ts
  4. 11
      src/app/babylon/view/building-window/building-window.ts
  5. 5
      src/app/babylon/view/facility-window/facility-window.ts
  6. 46
      src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts
  7. 9
      src/app/babylon/view/toolbar-window/toobar-window.ts
  8. 4
      src/app/pages/pages.module.ts
  9. 7
      src/app/pages/plan/plan.component.html
  10. 21
      src/app/pages/plan/plan.component.scss
  11. 42
      src/app/pages/plan/plan.component.ts

2
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);

24
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,9 +218,12 @@ export class ModelInfo_building extends ModelInfo {
InfoManager.removeFacilityInfoToTypeList(modelInfo_facility, this.facilityInfos);
}
Event_ModelInfoChange.dispatch(modelInfo_facility, ModelChangeType.Remove);
if ((modelInfo_facility.modelData as ModelData_facility).posType == FacilityPosType.Out) {
SceneManager.destroyModel(modelInfo_facility);
}
}
/**
*
* @param enable true

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

@ -233,6 +233,8 @@ export class BuildingUIItem {
*/
clearFacilityFromMesh() {
this.buildingInfo.ModelInfo.clearFacilityFromMesh();
}

11
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();
}
}
/**
* ()
*/

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

46
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 = 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
// }
// }
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;
}

9
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();
}
/**
*
*/

4
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 { }

7
src/app/pages/plan/plan.component.html

@ -1,3 +1,4 @@
<div class="loading" *ngIf="isShowLoading"><nz-spin nzSimple [nzSize]="'large'"></nz-spin></div>
<div class="content">
<canvas id="center"></canvas>
@ -37,6 +38,10 @@
<!-- 右上角快捷栏 -->
<div class="rightTopFast">
<div class="publicFast leftFunction">
<button title="获取设备" (click)="getDevice()"></button>
<button title="清空设备" (click)="clearDevice()"></button>
</div>
<div class="publicFast leftFast">
<button title="平移" (click)="translation()" [ngClass]="{'selectRightTopFast': selectRightTopFast == 0}"></button>
<button title="旋转" (click)="revolve()" [ngClass]="{'selectRightTopFast': selectRightTopFast == 1}"></button>
@ -44,7 +49,7 @@
<button title="吸附" (click)="adsorb()" [ngClass]="{'leftFastIsTure': selectAdsorb }"></button>
<button title="切换至顶视图" (click)="toggleTopLevelView()" [ngClass]="{'leftFastIsTure': topLevelView }"></button>
</div>
<div style="margin: 0 10px; background-color: #0080FF;" title="保存"><button (click)="preserve()"><i nz-icon nzType="save" nzTheme="outline" style="font-size: 20px;"></i></button></div>
<div style="margin: 0 10px;background-color: #0080FF;" title="保存"><button (click)="preserve()"><i nz-icon nzType="save" nzTheme="outline" style="font-size: 20px;"></i></button></div>
</div>
<!-- 右上角快捷栏 -->

21
src/app/pages/plan/plan.component.scss

@ -5,6 +5,18 @@
position: relative;
canvas{ width: 100%; height: 100%; border: none; outline: none; }
}
.loading{ //loading
position: fixed;
left: 0;
top: 0;
z-index: 99999;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.5);
display: flex;
justify-content: center;
align-items: center;
}
.anticon{ font-size: 16px; cursor: pointer; } //字体图标
//文本溢出
.overflowText{
@ -110,11 +122,11 @@
//右上角快捷栏
.rightTopFast{
width: 250px;
width: 340px;
height: 38px;
position: absolute;
right: 1px;
top: 1%;
top: 3%;
overflow: hidden;
box-sizing: border-box;
display: flex;
@ -130,7 +142,7 @@
}
.publicFast {
box-sizing: border-box;
padding: 1px 5px;
padding: 1px 3px;
background-color: rgba(0,0,0,0.5);
}
.leftFast {
@ -141,5 +153,8 @@
:nth-child(5){ background: url(../../../assets/images/verticalView.png) no-repeat center; }
.leftFastIsTure { border: 1px solid #fff; } //吸附样式
}
.leftFunction {
margin: 0 10px;
}
.selectRightTopFast { border: 1px solid #fff; } //选种样式
}

42
src/app/pages/plan/plan.component.ts

@ -14,6 +14,9 @@ import { BuildingType } from 'src/app/babylon/model/data/institution/building/bu
import { BuildingWindow } from 'src/app/babylon/view/building-window/building-window';
import { FacilityUIItem } from 'src/app/babylon/view/facility-window/facility-ui-item';
import { FacilityWindow } from 'src/app/babylon/view/facility-window/facility-window';
import { FacilityInfoUIItem } from 'src/app/babylon/view/facilityinfoinscene-window/facilityinfo-ui-item';
import { EventManager } from '@angular/platform-browser';
import { NzMessageService } from 'ng-zorro-antd/message';
@ -24,18 +27,29 @@ import { FacilityWindow } from 'src/app/babylon/view/facility-window/facility-wi
})
export class PlanComponent implements OnInit {
constructor(private element: ElementRef, private buildingBISrv: BuildingBasicInfosService, private objectsSrv: ObjectsService) { }
constructor(private element: ElementRef, private buildingBISrv: BuildingBasicInfosService, private objectsSrv: ObjectsService, private eventManager: EventManager, private message: NzMessageService) { }
static instance: PlanComponent;
public game: Game = new Game();
public beforeOneSatus; //当前 satus
public canvas: HTMLCanvasElement; //canvas 实例
public isShowLoading: boolean = false; //显隐 loading加载条
ngOnInit(): void {
PlanComponent.instance = this;
ServeManager.Init(this.buildingBISrv, this.objectsSrv);
this.canvas = this.element.nativeElement.querySelector('#center') as HTMLCanvasElement;
this.game.init(this.canvas);
//监听 delete键盘事件
this.eventManager.addGlobalEventListener('window', 'keydown', (event: any) => {
if (event.keyCode == 46) { //delete
if (this.beforeOnePropertyData) {
let isDelete = confirm("是否删除已选择模型?");
if (isDelete) { this.beforeOnePropertyData.askDelete(false) };
}
}
})
//监听 delete键盘事件
}
ngAfterViewInit(): void {
@ -179,10 +193,31 @@ export class PlanComponent implements OnInit {
e == 0 ? bootomDiv.scrollLeft = bootomDiv.scrollLeft + 50 : bootomDiv.scrollLeft = bootomDiv.scrollLeft - 50
}
beforeOnePropertyData: FacilityInfoUIItem = null; //当前选择 设备
beforeOnefacilityInfo: string = null; //当前选择 设备ID
//获取选择设备 属性
getPropertyData(e: FacilityInfoUIItem) {
this.beforeOnePropertyData = e
}
selectRightTopFast: number = 0; //当前选择功能 快捷栏
selectAdsorb: boolean = false; //吸附状态
topLevelView: boolean = false; //顶视图状态
//获取设备
getDevice() {
ToolbarWindow.instance.getModelAndCreateFacilityData()
}
//清空设备
clearDevice() {
let isClear = confirm('您确定要清空吗?')
if (isClear) {
ToolbarWindow.instance.clearHomeLessFacilityData()
}
}
//平移
translation() {
this.selectRightTopFast = 0
@ -222,6 +257,11 @@ export class PlanComponent implements OnInit {
ToolbarWindow.instance.onBtnSave();
}
//通用 消息通知栏
openSnackBar(title: string) {
this.message.info(title);
}
}

Loading…
Cancel
Save