From 6bbbc3d29b4672cc5a9335c959998091a904147c Mon Sep 17 00:00:00 2001
From: cpf <1105965053@qq.com>
Date: Thu, 25 Nov 2021 15:49:12 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=E5=BC=B9=E7=AA=97=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../babylon/view/mark-window/mark-window.ts | 2 +-
src/app/pages/plan/plan.component.html | 29 ++++++
src/app/pages/plan/plan.component.ts | 90 ++++++++++++++++++-
src/styles.scss | 10 +++
4 files changed, 129 insertions(+), 2 deletions(-)
diff --git a/src/app/babylon/view/mark-window/mark-window.ts b/src/app/babylon/view/mark-window/mark-window.ts
index a63925d..b115025 100644
--- a/src/app/babylon/view/mark-window/mark-window.ts
+++ b/src/app/babylon/view/mark-window/mark-window.ts
@@ -527,7 +527,7 @@ export class MarkWindow extends UIBase {
*/
openProperty(markInfo: ModelInfo_mark) {
if (markInfo != null) {
- //ThreeDimensionalHomeComponent.instance.getSandTableNature(markInfo.markData);
+ PlanComponent.instance.getSandTableNature(markInfo.markData);
}
}
diff --git a/src/app/pages/plan/plan.component.html b/src/app/pages/plan/plan.component.html
index 4e0838b..5ed645a 100644
--- a/src/app/pages/plan/plan.component.html
+++ b/src/app/pages/plan/plan.component.html
@@ -204,6 +204,35 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/pages/plan/plan.component.ts b/src/app/pages/plan/plan.component.ts
index c033142..5633852 100644
--- a/src/app/pages/plan/plan.component.ts
+++ b/src/app/pages/plan/plan.component.ts
@@ -20,7 +20,7 @@ import { NzMessageService } from 'ng-zorro-antd/message';
import { LeftDomainComponent } from '../left-domain/left-domain.component';
import { JYZInfoMoudleType } from 'src/app/babylon/model/data/institution/jyz-show-data';
import { AllMarkData } from 'src/app/babylon/model/data/mark/all-mark-data';
-import { MarkData } from 'src/app/babylon/model/data/mark/mark-data';
+import { MarkData, MarkTask } from 'src/app/babylon/model/data/mark/mark-data';
import { MarkWindow } from 'src/app/babylon/view/mark-window/mark-window';
import { AllMarkPlanData, MarkNodeData, MarkPlanData } from 'src/app/babylon/model/data/mark/mark-plan-data';
@@ -534,11 +534,41 @@ export class PlanComponent implements OnInit {
return `${percentage * 100}%`
}
+ contingencyPlanTask: MarkData = null; //应急预案选中 设备
+ taskDialog: taskDialog = new taskDialog("", "", ""); //设备任务 深拷贝数据
+ allTaskList: any[] = []; //所有任务 List
+
//选中应急预案 设备
selectSandTableMark(markData: MarkData, select: boolean) {
MarkWindow.instance.selectMarkData(markData, select)
}
+ //选中应急预案 设备任务窗口
+ getSandTableNature(markData: MarkData) {
+ if (markData.property.taskType != MarkTask.None) {
+ this.contingencyPlanTask = markData
+ this.taskDialog.institution = JSON.parse(JSON.stringify(markData.property.institution || ""))
+ this.taskDialog.description = JSON.parse(JSON.stringify(markData.property.description || ""))
+ this.taskDialog.task = JSON.parse(JSON.stringify(markData.property.task || ""))
+ if (markData.property.taskType === MarkTask.Person) {
+ this.allTaskList = (new taskList()).character
+ } else if (markData.property.taskType === MarkTask.Car) {
+ this.allTaskList = (new taskList()).car
+ } else {
+ this.allTaskList = []
+ }
+ }
+ }
+
+ //提交 设备任务窗口表单
+ submitTaskForm(e) {
+ this.contingencyPlanTask.property.institution = e.companyName
+ this.contingencyPlanTask.property.description = e.description
+ this.contingencyPlanTask.property.task = e.taskName
+ MarkWindow.instance.updateProperty()
+ this.contingencyPlanTask = null //关闭弹窗
+ }
+
selectRightTopFast: number = 0; //当前选择功能 快捷栏
selectAdsorb: boolean = false; //吸附状态
topLevelView: boolean = false; //顶视图状态
@@ -614,6 +644,64 @@ export class PlanComponent implements OnInit {
}
+//设备任务窗口 数据类型
+export class taskDialog {
+ institution: string; //单位
+ task: string; //任务
+ description: string; //备注
+ constructor(institution: string, task: string, description: string) {
+ this.institution = institution
+ this.task = task
+ this.description = description
+ }
+}
+//设备任务list
+export class taskList {
+ character: any[] = [
+ { taskName: "外部控火" },
+ { taskName: "内部控火" },
+ { taskName: "外部侦察" },
+ { taskName: "内部侦察" },
+ { taskName: "外部观察" },
+ { taskName: "外部疏散救生" },
+ { taskName: "询问知情人" },
+ { taskName: "占领消控室" },
+ { taskName: "水源引导" },
+ { taskName: "断电气" },
+ { taskName: "灭火" },
+ { taskName: "掩护" },
+ { taskName: "警戒" },
+ { taskName: "破拆" },
+ { taskName: "排烟" },
+ { taskName: "照明" },
+ { taskName: "通信" },
+ { taskName: "待命" },
+ ];
+ car: any[] = [
+ { taskName: "内攻" },
+ { taskName: "出枪掩护" },
+ { taskName: "出枪冷却" },
+ { taskName: "出枪灭火" },
+ { taskName: "供水" },
+ { taskName: "供泡沫" },
+ { taskName: "连接消火栓" },
+ { taskName: "遥控水炮冷却" },
+ { taskName: "遥控水炮灭火" },
+ { taskName: "抢险救援" },
+ { taskName: "救人" },
+ { taskName: "指挥" },
+ { taskName: "排烟" },
+ { taskName: "提供器材" },
+ { taskName: "照明" },
+ { taskName: "供电" },
+ { taskName: "待命" },
+ ]
+ firemonitor: any[] = [
+ { taskName: "遥控水炮冷却" },
+ { taskName: "遥控水炮灭火" },
+ { taskName: "待命" },
+ ]
+}
//属性栏 定位
export class naturePosition {
top: string = "1%"
diff --git a/src/styles.scss b/src/styles.scss
index 500789c..2b3311d 100644
--- a/src/styles.scss
+++ b/src/styles.scss
@@ -115,6 +115,16 @@ h1 {
box-shadow: 0px 0px 6px #2399FF;
li { color: #fff; }
}
+//任务弹窗
+.taskDialog{
+ .ant-modal-header,.ant-modal-content { background: radial-gradient(circle, #004988 0%, #00122D 100%); }
+ .ant-modal-header,.ant-modal-footer { border: none; }
+ .ant-modal-title,.ant-form-item-label > label,.ant-input { color: #C4E2FC; }
+ .ant-modal-footer .ant-btn:first-child { color: #C4E2FC; background: #000D21; border: 1px solid #C4E2FC; }
+ .ant-modal-footer .ant-btn:last-child { color: #C4E2FC; background: rgba(0, 129, 255, 0.6); border: 1px solid #36A2FF; }
+ .ant-input { background: rgba(145, 204, 255, 0.41); border: 1px solid #91CCFF; }
+ textarea { resize: none; outline: none; }
+}
#threeDimensional {
.ant-tree{ color: #C4E2FC; } //tree
.ant-tree,.ant-tree-node-content-wrapper:hover,.ant-tree-node-content-wrapper.ant-tree-node-selected { background-color: transparent; } //tree
From c56087ab39d84d117a7d2aebcd537b146d82537c Mon Sep 17 00:00:00 2001
From: cpf <1105965053@qq.com>
Date: Thu, 25 Nov 2021 16:18:36 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E5=AE=8C=E5=96=84index?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/pages/left-domain/left-domain.component.html | 2 +-
src/app/pages/left-domain/left-domain.component.ts | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/app/pages/left-domain/left-domain.component.html b/src/app/pages/left-domain/left-domain.component.html
index e822903..e98e9ae 100644
--- a/src/app/pages/left-domain/left-domain.component.html
+++ b/src/app/pages/left-domain/left-domain.component.html
@@ -149,7 +149,7 @@
-
- {{items.name}}
+ {{items.name}}
diff --git a/src/app/pages/left-domain/left-domain.component.ts b/src/app/pages/left-domain/left-domain.component.ts
index febcea8..03245d4 100644
--- a/src/app/pages/left-domain/left-domain.component.ts
+++ b/src/app/pages/left-domain/left-domain.component.ts
@@ -208,9 +208,9 @@ export class LeftDomainComponent implements OnInit {
}
//选中 数据节点
- selectNode(item: MarkPlanData, e: MarkNodeData) {
+ selectNode(item: MarkPlanData, e: MarkNodeData, index: number) {
if (this.selectPlanId != item.id || this.selectNodeId != e.id) { //选中
- this.updateFatherData() //更新/初始化父组件 数据
+ this.updateFatherData(index) //更新/初始化父组件 数据
this.selectPlanId = item.id
this.selectNodeId = e.id
MarkWindow.instance.selectMarkNode(item.id, e.id)
@@ -219,7 +219,7 @@ export class LeftDomainComponent implements OnInit {
} else if (this.selectPlanId === item.id && this.selectNodeId === e.id) { //取消选中
PlanComponent.instance.beforeEmergencyPlan = new MarkPlanData(-99, "请选择节点")
PlanComponent.instance.beforePlanNode = new MarkNodeData(-99, "请选择节点")
- this.updateFatherData() //更新/初始化父组件 数据
+ this.updateFatherData(index) //更新/初始化父组件 数据
this.selectPlanId = null
this.selectNodeId = null
MarkWindow.instance.selectMarkNode(null, null)
@@ -227,8 +227,8 @@ export class LeftDomainComponent implements OnInit {
}
//更新/初始化父组件 数据
- updateFatherData() {
- PlanComponent.instance.nzCurrent = -1
+ updateFatherData(index) {
+ PlanComponent.instance.nzCurrent = index
PlanComponent.instance.isSuspend = true //暂停
PlanComponent.instance.timer? window.clearTimeout(PlanComponent.instance.timer) : null //清除定时器
PlanComponent.instance.updateTimer? window.clearTimeout(PlanComponent.instance.updateTimer) : null //清除定时器
From 12a60d0389bf3515e29273ba3a331c0e6b648d98 Mon Sep 17 00:00:00 2001
From: liuxianghui <519646741@qq.com>
Date: Thu, 25 Nov 2021 16:29:15 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/babylon/controller/scene-manager.ts | 31 +++++++++++++++++--
.../babylon/model/data/mark/mark-property.ts | 2 +-
src/app/babylon/tool/gizmo-tool.ts | 21 +++++++++----
.../view/building-window/building-window.ts | 29 ++++++++++++++++-
.../babylon/view/mark-window/mark-window.ts | 22 +++++++------
5 files changed, 86 insertions(+), 19 deletions(-)
diff --git a/src/app/babylon/controller/scene-manager.ts b/src/app/babylon/controller/scene-manager.ts
index 1d4ffa9..b78552e 100644
--- a/src/app/babylon/controller/scene-manager.ts
+++ b/src/app/babylon/controller/scene-manager.ts
@@ -15,8 +15,6 @@ import {
Mesh,
MeshBuilder,
Observable,
- Observer,
- PBRMaterial,
PickingInfo,
PointerEventTypes,
Quaternion,
@@ -108,11 +106,37 @@ export class SceneManager {
SceneManager.instance.scene = scene;
SceneManager.instance.canvas = canvas;
+ scene.onBeforeRenderObservable.add(() => {
+ if (SceneManager.instance != null) {
+ SceneManager.instance.onUpdate();
+ }
+
+ });
+
}
return SceneManager.instance;
}
//#endregion
+ onUpdate() {
+ if (SceneManager.s_openSkyBox && this.skyBox != null) {
+ let skyMat = this.skyBox.material;
+ let skyTexture = ((skyMat as StandardMaterial).reflectionTexture as CubeTexture);
+ if (skyTexture != null) {
+
+ let addSpeed = SceneManager.instance.scene.deltaTime * 0.001 * 0.003;//天空盒旋转速度
+ if (addSpeed > 0) {
+ skyTexture.rotationY += addSpeed;
+ }
+
+ while (skyTexture.rotationY > Math.PI * 2) {
+ skyTexture.rotationY -= Math.PI * 2;
+ }
+
+ }
+ }
+ }
+
dispose() {
SceneManager.instance = null;
}
@@ -334,11 +358,14 @@ export class SceneManager {
skyboxMaterial.backFaceCulling = false;
skyboxMaterial.reflectionTexture = new CubeTexture("assets/skybox/default/default", this.scene);
skyboxMaterial.reflectionTexture.coordinatesMode = Texture.SKYBOX_MODE;
+ (skyboxMaterial.reflectionTexture as CubeTexture).rotationY = 0;
skyboxMaterial.diffuseColor = new Color3(0, 0, 0);
skyboxMaterial.specularColor = new Color3(0, 0, 0);
skyboxMaterial.disableLighting = true;
this.skyBox.material = skyboxMaterial;
this.skyBox.renderingGroupId = -1;
+
+
}
else {
this.skyBox.setEnabled(true);
diff --git a/src/app/babylon/model/data/mark/mark-property.ts b/src/app/babylon/model/data/mark/mark-property.ts
index caf0fb0..f36b9ce 100644
--- a/src/app/babylon/model/data/mark/mark-property.ts
+++ b/src/app/babylon/model/data/mark/mark-property.ts
@@ -30,7 +30,7 @@ export class MarkProperty {
*/
description: string;
- constructor(taskType?: MarkTask, institution: string = "辖区中队", index: number = 1, task: string = "待命", description?: string) {
+ constructor(taskType?: MarkTask, institution: string = "未命名", index: number = 1, task: string = "待命", description?: string) {
this.taskType = taskType
this.institution = institution
this.index = index
diff --git a/src/app/babylon/tool/gizmo-tool.ts b/src/app/babylon/tool/gizmo-tool.ts
index 0ebea4d..f6fe954 100644
--- a/src/app/babylon/tool/gizmo-tool.ts
+++ b/src/app/babylon/tool/gizmo-tool.ts
@@ -1,6 +1,6 @@
import { AbstractMesh, ArcRotateCamera, BoundingBoxGizmo, Color3, EventState, GizmoManager, Mesh, Observable, PickingInfo, PointerEventTypes, PointerInfo, Quaternion, Scene, UtilityLayerRenderer, Vector3 } from "@babylonjs/core";
import { AdvancedDynamicTexture, Button, Container, InputText, Rectangle, StackPanel, TextBlock } from "@babylonjs/gui";
-import { ModeManager, ModeType } from "../controller/mode-manager";
+import { ModeManager } from "../controller/mode-manager";
import { SceneManager } from "../controller/scene-manager";
import { Game } from "../game";
import { ModelInfo } from "../model/info/model/model-info";
@@ -33,6 +33,8 @@ export class GizmoTool {
static s_btn_rotation: Button;
static s_btn_scaling: Button;
+ static s_isOpen: boolean = true;//是否开启gizmo
+
static init(scene: Scene, uiRoot: AdvancedDynamicTexture, camera: ArcRotateCamera) {
GizmoTool.s_camera = camera;
GizmoTool.s_boundingBoxGizmo = new BoundingBoxGizmo();
@@ -147,6 +149,13 @@ export class GizmoTool {
}
}
+ /**
+ * gizmo开关
+ * @param open
+ */
+ static changeGizmoOpen(open: boolean) {
+ GizmoTool.s_isOpen = open;
+ }
/**
* 替换选中
@@ -187,7 +196,7 @@ export class GizmoTool {
GizmoTool.changeGizmoAim(mesh);
- if (ModeManager.currentMode == ModeType.Edit) {
+ if (GizmoTool.s_isOpen) {
GizmoTool.s_boundingBoxGizmo.attachedMesh = mesh;
}
@@ -409,21 +418,21 @@ export class GizmoTool {
// }
transformUIInfo.root.isVisible = ModeManager.isDebug;//先隐藏,因为效果图中没有
- let isEditMode = ModeManager.currentMode == ModeType.Edit;
+ let isOpen = GizmoTool.s_isOpen;
- let isPosition = uiType == TransformUIType.Position && isEditMode;
+ let isPosition = uiType == TransformUIType.Position && isOpen;
GizmoTool.s_btn_poisition.background = isPosition
? UIBase.color_yellow
: UIBase.color_null;
GizmoTool.s_gizmoManager.positionGizmoEnabled = isPosition;
- let isRotation = uiType == TransformUIType.Rotation && isEditMode;
+ let isRotation = uiType == TransformUIType.Rotation && isOpen;
GizmoTool.s_btn_rotation.background = isRotation
? UIBase.color_yellow
: UIBase.color_null;
GizmoTool.s_gizmoManager.rotationGizmoEnabled = isRotation;
- let isScaling = uiType == TransformUIType.Scale && isEditMode;
+ let isScaling = uiType == TransformUIType.Scale && isOpen;
GizmoTool.s_btn_scaling.background = isScaling
? UIBase.color_yellow
: UIBase.color_null;
diff --git a/src/app/babylon/view/building-window/building-window.ts b/src/app/babylon/view/building-window/building-window.ts
index f0208e4..8e285bf 100644
--- a/src/app/babylon/view/building-window/building-window.ts
+++ b/src/app/babylon/view/building-window/building-window.ts
@@ -1,5 +1,5 @@
-import { AbstractMesh, Material, Mesh, PBRMaterial, Texture } from "@babylonjs/core";
+import { AbstractMesh, GizmoManager, Material, Mesh, PBRMaterial, Texture } from "@babylonjs/core";
import { PlanComponent } from "src/app/pages/plan/plan.component";
import { ConfigManager } from "../../controller/config-manager";
import { DataManager } from "../../controller/data-manager";
@@ -22,6 +22,7 @@ import { BuildingInfo_Normal } from "../../model/info/building/building-info-nor
import { ModelInfo_building } from "../../model/info/model/model-info-building";
import { FacilityInfoByType, ModelInfo_facility } from "../../model/info/model/model-info-facility";
import { BabylonTool } from "../../tool/babylon-tool";
+import { GizmoTool } from "../../tool/gizmo-tool";
import { TsTool } from "../../tool/ts-tool";
import { FacilityInfoInSceneWindow } from "../facilityinfoinscene-window/facilityinfoinscene-window";
import { MarkWindow } from "../mark-window/mark-window";
@@ -299,6 +300,7 @@ export class BuildingWindow extends UIBase {
//#region 生命周期
onInit() {
super.onInit();
+ GizmoTool.changeGizmoOpen(ModeManager.s_isMakeMode); //内部模式才默认打开gizmo
this.buldingStatus = StatusManager.getStatus(BuildingStatus);
@@ -741,6 +743,10 @@ export class BuildingWindow extends UIBase {
return;
}
+ if (show) {
+ this.updateGizmoType(type);
+ }
+
if (type == JYZInfoMoudleType.YJCZ) {
if (show) {
console.log("进入应急处置");
@@ -818,6 +824,27 @@ export class BuildingWindow extends UIBase {
}
+ /**
+ * 根据各个模块,更新gizmo状态
+ * @param type
+ */
+ updateGizmoType(type: JYZInfoMoudleType) {
+ let open = false;
+
+ if (ModeManager.currentMode == ModeType.Edit) {
+ switch (type) {
+ case JYZInfoMoudleType.JBXX:
+ case JYZInfoMoudleType.YJCZ: open = true; break;
+ }
+ }
+
+ if (ModeManager.s_isMakeMode) {
+ open = true;
+ }
+
+ GizmoTool.changeGizmoOpen(open);
+ }
+
/**
* 根据功能模块,获取所需的设备类型
* @param moudleType 功能模块
diff --git a/src/app/babylon/view/mark-window/mark-window.ts b/src/app/babylon/view/mark-window/mark-window.ts
index a63925d..c449522 100644
--- a/src/app/babylon/view/mark-window/mark-window.ts
+++ b/src/app/babylon/view/mark-window/mark-window.ts
@@ -1,4 +1,3 @@
-
import { AbstractMesh, Vector3 } from "@babylonjs/core";
import { PointerEventTypes, PointerInfo } from "@babylonjs/core/Events/pointerEvents";
import { EventState, Observer } from "@babylonjs/core/Misc/observable";
@@ -11,13 +10,12 @@ import { Event_KeyboardInput } from "../../controller/event-manager/events/event
import { Event_MarkInfoChange, MarkInfoChangeType } from "../../controller/event-manager/events/event-mark-info-change";
import { InputController } from "../../controller/inputController";
import { SceneManager } from "../../controller/scene-manager";
-import { ServeManager } from "../../controller/serve-manager";
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 { ArcRotateCameraData } from "../../model/data/camera-data";
-import { MarkData, MarkTagPos, MarkType } from "../../model/data/mark/mark-data";
+import { MarkData, MarkKindType, MarkTagPos, MarkType } from "../../model/data/mark/mark-data";
import { AllMarkPlanData, MarkNodeData, MarkPlanData, WeatherType, WindDirectionType, EnvironmentData, NatureData } from "../../model/data/mark/mark-plan-data";
import { ModelType } from "../../model/data/model-data/model-data";
import { FacilityType } from "../../model/data/model-data/model-data-facility";
@@ -26,7 +24,6 @@ import { MarkNodeInfo } from "../../model/info/mark/mark-plan-info";
import { ModelInfo_mark } from "../../model/info/mark/model-info-mark";
import { ModelInfo_building } from "../../model/info/model/model-info-building";
import { ModelInfo_facility } from "../../model/info/model/model-info-facility";
-import { BabylonTool } from "../../tool/babylon-tool";
import { LoadTool } from "../../tool/load-tool";
import { MeshPool, MeshPoolInfo } from "../../tool/mesh-pool";
import { ParticleSystemTool } from "../../tool/particle-system-tool";
@@ -842,18 +839,21 @@ export class MarkWindow extends UIBase {
break;
}
- //创建标绘物
- if (readyCreateMark) {
- instance.createNewMark(pickPos, instance.currentMarkDataPrefab, true);
- }
- else if (pickMesh != null) {
+
+ if (pickMesh != null) {
//是标绘物
let l_markInfo = instance.getMarkInfoFromMesh(eventData.pickInfo.pickedMesh);
if (l_markInfo != null) {
+ if (instance.currentMarkDataPrefab != null && instance.currentMarkDataPrefab.markKindType != MarkKindType.Effect) //特效可以放在标绘物上
+ {
+ readyCreateMark = false;
+ }
+
if (eventData.type == PointerEventTypes.POINTERDOUBLETAP) {
//双击标绘物,打开任务界面
console.log("打开属性面板");
instance.openProperty(l_markInfo);
+ readyCreateMark = false; //双击,必然不创建标绘物
}
else if (eventData.type == PointerEventTypes.POINTERDOWN) {
if (eventData.event.button == 0)//左键
@@ -887,6 +887,10 @@ export class MarkWindow extends UIBase {
}
}
+ //创建标绘物
+ if (readyCreateMark) {
+ instance.createNewMark(pickPos, instance.currentMarkDataPrefab, true);
+ }
}