diff --git a/src/app/babylon/controller/data-manager.ts b/src/app/babylon/controller/data-manager.ts index a68495e..4b8f0c6 100644 --- a/src/app/babylon/controller/data-manager.ts +++ b/src/app/babylon/controller/data-manager.ts @@ -1,6 +1,7 @@ import { HttpErrorResponse } from '@angular/common/http'; import { Quaternion, Vector3 } from '@babylonjs/core'; import { plainToClass } from 'class-transformer'; +import { PlanComponent } from 'src/app/pages/plan/plan.component'; import { BuildingData, BuildingData_ChemicalPlant, @@ -85,10 +86,11 @@ export class DataManager { } console.error("获取单位信息失败,本地捏造数据"); - DataManager.initDebugData_institution(); - if (onSuccess) { - onSuccess(key); - } + PlanComponent.instance.openSnackBar("获取单位失败,请刷新重试"); + // DataManager.initDebugData_institution(); + // if (onSuccess) { + // onSuccess(key); + // } }); } else { @@ -322,7 +324,7 @@ export class DataManager { */ static initDebugData_mark() { DataManager.allMarkData = AllMarkData.CreateAllMarkData(); - console.log(DataManager.allMarkData, "态势标会"); + // console.log(DataManager.allMarkData, "态势标会"); } static init(simpleData: InsitutionDataSimple, onSuccess?: (key: string) => void) { diff --git a/src/app/babylon/controller/info-manager.ts b/src/app/babylon/controller/info-manager.ts index c6beb2c..17073ea 100644 --- a/src/app/babylon/controller/info-manager.ts +++ b/src/app/babylon/controller/info-manager.ts @@ -177,6 +177,7 @@ export class InfoManager { mesh = buildingInfo.ModelInfo.getChildrenByName(facilityData.resName); } + FacilityWindow.instance.createFacility( modelEditData.facilities[i].facilities[j], false, @@ -188,6 +189,7 @@ export class InfoManager { if (ModeManager.currentMode == ModeType.Look) { modelInfo.setIconEnable(false);//查看模式下隐藏所有设备ui } + } ); } diff --git a/src/app/babylon/controller/scene-manager.ts b/src/app/babylon/controller/scene-manager.ts index ed25a86..fed7287 100644 --- a/src/app/babylon/controller/scene-manager.ts +++ b/src/app/babylon/controller/scene-manager.ts @@ -133,9 +133,10 @@ export class SceneManager { Vector3.Zero(), //目标位置 this.scene //定义摄像机所属的场景 ); + camera.minZ = 0;//最近拍摄距离 camera.maxZ = 6000; //摄像机拍摄的最远距离 // camera.upperBetaLimit = 1.5; //beta方向上的旋转限制(防止看到模型底面) - camera.lowerRadiusLimit = 3; //相机距离拍摄目标的最小距离(防止穿插) + camera.lowerRadiusLimit = 1; //相机距离拍摄目标的最小距离(防止穿插) camera.setTarget(Vector3.Zero()); //设置拍摄目标 camera.attachControl(this.canvas, true); //把相机连接到画布 this.defaultCamera = camera; diff --git a/src/app/babylon/controller/serve-manager.ts b/src/app/babylon/controller/serve-manager.ts index 92e0415..dc50523 100644 --- a/src/app/babylon/controller/serve-manager.ts +++ b/src/app/babylon/controller/serve-manager.ts @@ -34,7 +34,7 @@ export class ServeManager { ) => void, onError?: (key: string, error: any) => void) { this.buildingBISrv.getBuildingBasicInfos(key) .subscribe(data => { - console.log("得到单位信息" + key, data); + //console.log("得到单位信息" + key, data); if (onSuccess) { onSuccess(key, JSON.parse((data as any).result)); } 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 2e50775..337a043 100644 --- a/src/app/babylon/model/info/model/model-info-building.ts +++ b/src/app/babylon/model/info/model/model-info-building.ts @@ -48,8 +48,9 @@ export class ModelInfo_building extends ModelInfo { if (this.neiRoot == null) { for (let i = 0; i < allTransformNode.length; i++) { - if (TsTool.stringContain(allTransformNode[i].name, "wai")) { + if (TsTool.stringContain(allTransformNode[i].name, "WAI")) { this.neiRoot = allTransformNode[i]; + console.log("找到关键节点wai"); break; } } diff --git a/src/app/babylon/model/info/model/model-info-facility.ts b/src/app/babylon/model/info/model/model-info-facility.ts index f39a964..1725414 100644 --- a/src/app/babylon/model/info/model/model-info-facility.ts +++ b/src/app/babylon/model/info/model/model-info-facility.ts @@ -1,8 +1,9 @@ -import { AbstractMesh, EventState } from "@babylonjs/core"; +import { AbstractMesh, Color3, EventState, Mesh } from "@babylonjs/core"; import { Button, Control, Ellipse, Rectangle, Vector2WithInfo } from "@babylonjs/gui"; import { ConfigManager } from "src/app/babylon/controller/config-manager"; import { SceneManager } from "src/app/babylon/controller/scene-manager"; import { BabylonUIStyleTool } from "src/app/babylon/tool/babylon-ui-style-tool"; +import { TsTool } from "src/app/babylon/tool/ts-tool"; import { FacilityWindow } from "src/app/babylon/view/facility-window/facility-window"; import { FacilityInfoInSceneWindow } from "src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window"; import { PropertyBaseWindow } from "src/app/babylon/view/property-window/property-base-window"; @@ -157,6 +158,36 @@ export class ModelInfo_facility extends ModelInfo { } } + /** + * 播放展示动画(高亮) + * @param play false表示停止,并恢复正常 + */ + playShowAnim(play: boolean) { + this.showFollowUI(play); + if (this.modelBox != null) { + if (play) { + SceneManager.Instance.addToHighLight(this.modelBox as Mesh, Color3.Yellow()); + } + else { + SceneManager.Instance.removeFromHighLight(this.modelBox as Mesh); + } + + let facilityData = this.modelData as ModelData_facility; + + if (facilityData.facilityType == FacilityType.JY_SYGX || facilityData.facilityType == FacilityType.JY_YQHSGX) { + + let allChildren = this.modelBox.getChildMeshes(); + for (let i = 0; i < allChildren.length; i++) { + if (TsTool.stringContain(allChildren[i].name, "UV")) { + allChildren[i].setEnabled(play); + } + } + } + + } + } + + dispose(disposeMesh?: boolean) { if (this.areaInfo != null) { this.areaInfo.dispose(); diff --git a/src/app/babylon/model/info/model/model-info.ts b/src/app/babylon/model/info/model/model-info.ts index 227a539..9a28a13 100644 --- a/src/app/babylon/model/info/model/model-info.ts +++ b/src/app/babylon/model/info/model/model-info.ts @@ -136,21 +136,6 @@ export class ModelInfo { } } - /** - * 播放展示动画(高亮) - * @param play false表示停止,并恢复正常 - */ - playShowAnim(play: boolean) { - this.showFollowUI(play); - if (this.modelBox != null) { - if (play) { - SceneManager.Instance.addToHighLight(this.modelBox as Mesh, Color3.Yellow()); - } - else { - SceneManager.Instance.removeFromHighLight(this.modelBox as Mesh); - } - } - } /** * 克隆 diff --git a/src/app/babylon/tool/gizmo-tool.ts b/src/app/babylon/tool/gizmo-tool.ts index 25b6d3d..199d4e2 100644 --- a/src/app/babylon/tool/gizmo-tool.ts +++ b/src/app/babylon/tool/gizmo-tool.ts @@ -96,6 +96,8 @@ export class GizmoTool { GizmoTool.s_camera.panningSensibility = speed;//动态修改平移灵敏度 + GizmoTool.s_camera.wheelDeltaPercentage = 0.005; + if (SceneManager.Instance.cameraMode_Is2D) { let camera = SceneManager.Instance.defaultCamera; camera.beta = 0; diff --git a/src/app/babylon/tool/measure-tool.ts b/src/app/babylon/tool/measure-tool.ts index 67b0c28..c47ff70 100644 --- a/src/app/babylon/tool/measure-tool.ts +++ b/src/app/babylon/tool/measure-tool.ts @@ -105,7 +105,6 @@ export class MeasureTool { * 添加测量点 */ addMeasurePoint(pickInfo: PickingInfo) { - console.log("测量", pickInfo); if (this.currentMeasureInfo != null) { this.currentMeasureInfo.addPoint(pickInfo.pickedPoint); } 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 f38a4f1..d7ab98e 100644 --- a/src/app/babylon/view/building-window/building-ui-item.ts +++ b/src/app/babylon/view/building-window/building-ui-item.ts @@ -212,6 +212,14 @@ export class BuildingUIItem { } + /** + * 从模型中创建安全疏散 + * @param mesh + */ + createAQSSFromMesh(mesh: AbstractMesh) { + FacilityWindow.instance.createAQSSFromMesh(mesh); + } + /** * 从模型中创建加油站相关信息 * @param mesh diff --git a/src/app/babylon/view/building-window/building-window.ts b/src/app/babylon/view/building-window/building-window.ts index ccc6d04..9478575 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 } from "@babylonjs/core"; +import { AbstractMesh, Material, Mesh, PBRMaterial, Texture } from "@babylonjs/core"; import { PlanComponent } from "src/app/pages/plan/plan.component"; import { DataManager } from "../../controller/data-manager"; import { InfoManager } from "../../controller/info-manager"; @@ -276,7 +276,10 @@ export class BuildingWindow extends UIBase { this.three = PlanComponent.instance; this.three.buildingUIItems = this.buildingUIItems this.buildingUIItems.length ? this.three.beforeOneBuildingID = this.three.buildingUIItems[0].getBuildingID() : null - + let instance = this; + SceneManager.Instance.scene.onBeforeRenderObservable.add(() => { + instance.onUpdate(); + }) } onShow() { @@ -289,6 +292,11 @@ export class BuildingWindow extends UIBase { super.onHide(); } + onUpdate() { + this.updateUVAnim(); + } + + //#endregion @@ -335,6 +343,8 @@ export class BuildingWindow extends UIBase { console.log("选中建筑", modelInfo); this.showJYZModules(JYZInfoMoudleType.AQSS, false); + this.showJYZModules(JYZInfoMoudleType.YQHSGX, false); + this.showJYZModules(JYZInfoMoudleType.YQHSGX, false); //this.onChangeCurrentBuildingItem(item); @@ -573,6 +583,11 @@ export class BuildingWindow extends UIBase { */ readonly c_xiaoFang = "XF_"; + /** + * 安全疏散 + */ + readonly c_shuSan = "AQSS_"; + /** * 加油站相关 */ @@ -629,6 +644,9 @@ export class BuildingWindow extends UIBase { { this.currentBuidngItem.createFacilityByMesh(allNode[i]); } + else if (TsTool.stringContain(nodeName, this.c_shuSan)) { + this.currentBuidngItem.createAQSSFromMesh(allNode[i]);//安全疏散 + } else if (TsTool.stringContain(nodeName, this.c_jiaYou))//加油站 { this.currentBuidngItem.createOilingByMesh(allNode[i]); @@ -647,6 +665,11 @@ export class BuildingWindow extends UIBase { //#region 加油站基本信息模块的显隐表现 + /** + * 箭头UV动画速度 + */ + readonly c_uvAnimSpeed = 0.001; + /** * 当前查看的加油站信息模块类型 */ @@ -672,6 +695,8 @@ export class BuildingWindow extends UIBase { */ currentZPShow: boolean = true; + + /** * 展示加油站信息模块 * @param type @@ -702,17 +727,12 @@ export class BuildingWindow extends UIBase { } - - - //阻挡类物体 let zdByType: FacilityInfoByType[] = []; if (this.zdByMoudle.has(type)) { zdByType = this.zdByMoudle.get(type); - console.log("查找阻挡物", type, zdByType); } else { - console.log("没找到阻挡物", type, zdByType); } for (let i = 0; i < zdByType.length; i++) { let infos = zdByType[i].facilityInfo; @@ -722,6 +742,7 @@ export class BuildingWindow extends UIBase { } } } + if (show) { this.currentJYZInfoMoudleType = type; } @@ -841,6 +862,7 @@ export class BuildingWindow extends UIBase { if (!isRepeat)//不重复,就添加进去 { this.mat_UV.get(moudleType).push(l_mat); + console.log("找到uv", l_mat); } } } @@ -859,18 +881,39 @@ export class BuildingWindow extends UIBase { for (let i = 0; i < childMesh.length; i++) { let mat = childMesh[i].material; if (TsTool.stringContain(mat.name, this.c_MAT_UV)) { - // for(let j =0;j< result.length;j++) - // { - // if(mat != result[j]) - // { result.push(mat); - // } - // } } } return result; } + + /** + * uv动画 update + */ + updateUVAnim() { + // console.log("uv", this.mat_UV); + if (this.mat_UV == null || this.currentJYZInfoMoudleType == null) { + return; + } + + let mats = this.mat_UV.get(this.currentJYZInfoMoudleType); + if (mats == null) { + return; + } + + for (let i = 0; i < mats.length; i++) { + let mat = mats[i]; + if (mat instanceof PBRMaterial) { + + (mat.albedoTexture as Texture).vOffset += SceneManager.Instance.scene.deltaTime * this.c_uvAnimSpeed; + } + } + } + + + + /** * 保存展示模块当前数据 */ diff --git a/src/app/babylon/view/facility-window/facility-window.ts b/src/app/babylon/view/facility-window/facility-window.ts index fafdc00..d511de0 100644 --- a/src/app/babylon/view/facility-window/facility-window.ts +++ b/src/app/babylon/view/facility-window/facility-window.ts @@ -587,12 +587,6 @@ export class FacilityWindow extends UIBase { else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHT)) { this.createNewFacilityByMesh(mesh, FacilityType.XF_MHT); } - else if (TsTool.stringContain(mesh.name, FacilityType.AQSS_SSD)) { - this.createNewFacilityByMesh(mesh, FacilityType.AQSS_SSD); - } - else if (TsTool.stringContain(mesh.name, FacilityType.AQSS_TSLX)) { - this.createNewFacilityByMesh(mesh, FacilityType.AQSS_TSLX); - } else if (TsTool.stringContain(mesh.name, FacilityType.XF_XFCM)) { this.createNewFacilityByMesh(mesh, FacilityType.XF_XFCM); } @@ -610,6 +604,19 @@ export class FacilityWindow extends UIBase { } } + /** + * 从模型中创建安全疏散相关信息 + * @param mesh + */ + createAQSSFromMesh(mesh: AbstractMesh) { + if (TsTool.stringContain(mesh.name, FacilityType.AQSS_SSD)) { + this.createNewFacilityByMesh(mesh, FacilityType.AQSS_SSD); + } + else if (TsTool.stringContain(mesh.name, FacilityType.AQSS_TSLX)) { + this.createNewFacilityByMesh(mesh, FacilityType.AQSS_TSLX); + } + } + /** * 从模型中创建加油站相关信息 * @param mesh diff --git a/src/app/pages/plan/plan.component.ts b/src/app/pages/plan/plan.component.ts index 2bd0841..6b7eeaa 100644 --- a/src/app/pages/plan/plan.component.ts +++ b/src/app/pages/plan/plan.component.ts @@ -59,10 +59,10 @@ export class PlanComponent implements OnInit { loginStatus.getInstitutionListFromServe((result: InsitutionDataSimple[], data: any) => { if (ModeManager.institutionDemoKey == ModeManager.c_demoKey_null) { //无指定测试单位,则为正式启动,根据当前单位key寻找 let key = 'ceshi'; - console.log("获取数据", data); + // console.log("获取数据", data); let find = data.find(item => { return item.key === key }) if (find) { //如果在data中找到了对应的单位key,则表示已经有三维数据,直接进入 - console.log("找到已有单位" + key); + // console.log("找到已有单位" + key); this.beforeOneSatus = StatusManager.getStatus(LoginSatus); this.beforeOneSatus.onSelectInsSuccess(find) } else { //如果没有找到对应的单位key,则调用新建单位