水库大坝三维模型开发bim篇

效果图
在这里插入图片描述

在这里插入图片描述

开发过程

  • 使用了bimface 插件
  • 上传做好rvt模型到bimface
  • 工程引入bimface相关的插件代码
  • 加载模型
  • 自定义目录树
  • 定位构件
  • 闪烁构件
  • 展示构件信息

代码 技术交流加V:bloxed
appKey 和appSecret 换成自己的就行

<template><div class="box-bim w100" ref="bimBoxRef"><div class="bim-tree"><el-card class="custom-card"  header="目录树"><el-treeclass="app-tree":data="treeData":props="defaultProps"autoExpandParent@node-click="handleNodeClick"/></el-card></div><div class="toolTip" v-if="toolTipVisible"><div class="tooltip-item">仪器名称:{{ itemData.stnm }}</div><div class="tooltip-item">监测数据:{{ itemData.dataValue }}</div><div class="tooltip-item">数据时间:{{ itemData.dataTime }}</div></div><div id="bimId" class="h100 w100"></div></div>
</template>
<script setup lang="ts">import {getTreeData,getTooltipData} from "../index.api"const treeData = ref<any[]>([])
const props = defineProps({fileId:{type:Number,default:10000894857430},damId:{type:Number,default:1},epcId:{type:String,default:""}
})
let viewer3D:any;
let app:any;
let loaderConfig:any = new BimfaceSDKLoaderConfig();
let viewToken= ref<any>('');
loaderConfig.viewToken = "";
const bimBoxRef = ref<any>()
import axios from 'axios';
const appKey  = 'xxxxxxxxxx';
const appSecret  = 'xxxxxxxxxxxxxxxx';
const inputText =  appKey + ":" + appSecret
const encodedText = ref<any>('')
const defaultProps = {children: 'child',label: 'name',
}
const tooltipData = ref<any>([])
const itemData = ref<any>({stnm: "B03",dataValue: "0.5mm",dataTime: "2024-12-22 12:00:00"
})
const toolTipVisible = ref(false)
const encodeText = () => {try {// If the input text contains only ASCII characters, this will work fineencodedText.value = btoa(inputText);} catch (e) {// If the input text contains non-ASCII characters, you might need a polyfill or a custom function// Here's a simple custom function using TextEncoder and a Blob to handle UTF-8 stringsconst encoder = new TextEncoder();const uint8Array = encoder.encode(inputText);let binaryString:any = '';let len = uint8Array.byteLength;for (let i = 0; i < len; i++) {binaryString += String.fromCharCode(uint8Array[i]);}encodedText.value = btoa(binaryString); // This will now work with UTF-8 strings}
}
const getToken = async () =>{const res = await axios.post('/bim/oauth2/token',{},{headers:{'Content-Type': 'application/json','Authorization': 'Basic ' + encodedText.value}});const  accessToken = res.data.data.tokenconst res1 = await axios.get('/bim/view/token',{headers:{'Content-Type': 'application/json','Authorization': 'Bearer ' + accessToken},params:{fileId:props.fileId}});viewToken.value = res1.data.data;loaderConfig.viewToken = viewToken.value;initBim();
}
const initBim = () =>{BimfaceSDKLoader.load(loaderConfig, successCallback, failureCallback);function successCallback(viewMetaData:any) {let domShow = document.getElementById('bimId');let webAppConfig = new Glodon.Bimface.Application.WebApplication3DConfig();webAppConfig.domElement = domShow;  webAppConfig.Toolbars = ["MainToolbar"];    app = new Glodon.Bimface.Application.WebApplication3D(webAppConfig);    app.addView(viewToken.value);viewer3D = app.getViewer();  viewer3D.addEventListener(Glodon.Bimface.Viewer.Viewer3DEvent.ToolbarHomeClick, function (event) {toolTipVisible.value = false;});};function failureCallback(error) {console.log(error);};}
const getItemTreeData = async()=>{const res = await getTreeData({treeType:"ITEM",damId:props.damId,epcId:props.epcId})treeData.value = res;getItemData();
}
const getItemData = async()=>{const res = await getTooltipData({damId:props.damId,epcId:props.epcId})tooltipData.value = res;}
const handleNodeClick =(data) =>{if(data.elementId){viewer3D.getModel().addSelectedComponentsById([data.elementId]);// 定位到选中的构件viewer3D.getModel().zoomToSelectedComponents();// 清除构件选中状态viewer3D.getModel().clearSelectedComponents();// ************************** 构件闪烁 **************************let blinkColor = new Glodon.Web.Graphics.Color("#f30b49", 0.9);// 打开构件强调开关viewer3D.enableBlinkComponents(true);// 给需要报警的构件添加强调状态viewer3D.getModel().addBlinkComponentsById([data.elementId]);// 设置强调状态下的颜色viewer3D.getModel().setBlinkColor(blinkColor);// 设置强调状态下的频率viewer3D.getModel().setBlinkIntervalTime(200);//添加弹窗显示数据// itemData.value = tooltipData.value.find((item)=>{//     return item.elementId === data.elementId// })setTimeout(()=>{toolTipVisible.value = true;},1000)}   
}
//销毁模型,同时切换模型
function changeview(){viewer3D.removeView(viewToken);viewer3D.render();}
onMounted(()=>{encodeText();getToken();getItemTreeData();
})
watch(()=>props.fileId,()=>{getToken();
})
</script>
<style scoped lang="scss">
.box-bim{height: calc(100% - 60px);position: relative;
}
.bim-tree{position: absolute;top: -1px;left: 0;bottom: 0;width: 180px;height: 400px;z-index: 999;
}
.toolTip{position: absolute;top: 20%;left: 55%;bottom: 0;height: 100px;width: 250px;z-index: 999;padding: 10px;border-radius: 5px;background-color: rgba(17,17,17,0.88);.tooltip-item{height: 30px;line-height: 28px;}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java预加载

预加载&#xff08;Preload&#xff09;是一种在程序运行之前预先加载所需资源或对象的优化技术&#xff0c;旨在提高程序的性能和响应速度。以下是对预加载的详细解释&#xff1a; 一、预加载的定义 预加载是指在程序实际运行之前&#xff0c;将预计会频繁使用的资源&#x…

CSharp: Oracle Stored Procedure query table

存储过程查询postgreSQL,Oracle 和sql server,Mysql 有区别。程序调用也是有区别。 oracle sql script: CREATE OR REPLACE PROCEDURE procSelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId p…

C语言基础——指针(4)

一&#xff0e; 字符指针变量 字符指针变量的使用和整型指针变量的使用方法相似&#xff0c;以下是其基本使用方法的例子&#xff1a; &#xff08;1&#xff09;字符指针变量还有一种使用方法&#xff1a; const char* p "abcd" 需…

学习笔记(C#基础书籍)-- C#基础篇

&#xff08;12.24&#xff09; C#介绍&#xff1a;《第一章》 特点&#xff1a;语法简洁&#xff0c;面向对象&#xff0c;支持绝大部分的web标准&#xff0c;强大的安全机制&#xff08;垃圾回收器&#xff09;&#xff0c;兼容性好&#xff08;遵循.NET的公共语言规范【CL…

在 CentOS 上安装 MySQL 8

在 CentOS 上安装 MySQL 8 您可以按照以下步骤操作&#xff1a; 1. 更新系统 首先&#xff0c;更新系统软件包以确保安装的最新版本。 sudo yum update -y 2. 安装 MySQL 8 安装 MySQL 存储库 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.r…

Net9解决Spire.Pdf替换文字后,文件格式乱掉解决方法

官方文档 https://www.e-iceblue.com/Tutorials/Spire.PDF/Program-Guide/Text/Find-and-replace-text-on-PDF-document-in-C.html C# 在 PDF 中查找替换文本 原文件如下图&#xff0c;替换第一行的新编码&#xff0c;把41230441044替换为41230441000 替换代码如下&#xff…

Timsort算法

Timsort算法是一种混合、稳定且高效的排序算法&#xff0c;源自归并排序和插入排序。它通过将已识别的子序列&#xff08;称为“run”&#xff09;与现有run合并直到满足某些条件来完成排序。以下是对Timsort算法的详细解释及举例说明&#xff1a; Timsort算法概述 混合性&…

Squeeze-and-Excitation (SE) 模块

Squeeze-and-Excitation (SE) 模块是一种神经网络架构中的注意力机制&#xff0c;旨在通过学习每个通道的重要性来增强网络的表示能力。这种机制最早由 Jie Hu 等人在 2017 年的论文《Squeeze-and-Excitation Networks》中提出。SE 模块通过全局信息的“挤压”&#xff08;sque…

shell 编程(五)

shell 环境的配置文件 df 命令 df 命令时unix 和类unix系统中用于显示文件系统磁盘空间使用情况的命令&#xff0c;df 是disk free的缩写&#xff0c;它可以显示磁盘上每个挂载点的使用情况&#xff0c;包括总容量&#xff0c;已用空间&#xff0c;可用空间以及挂载点信息。 基…

Merry Christmas HTML

简单分享 Merry Christmas HTML 设计的核心代码 HTML: <body class"card"> <div class"dialog"><div class"dialog-in"><div class"dialog-msg"><div class"heading">Youve got a post card!…

【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 1、输入数值 2、选择结构语句 3、计算结果并输出 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&#xff1a;编写一个程序&#xff0c;该程序需输入个人数据&#xff0c;进而预测其成年后的身高。 相关知识 为了完成本…

【自动化测试】windows下安装Selenium浏览器界面测试工具

Date: 2024.12.23 10:15:53 author: lijianzhan 简述&#xff1a;这篇教程详细介绍了如何在Windows环境下安装selenium&#xff0c;并设置Chrome浏览器驱动。什么是Selenium&#xff1f;Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端…

前端网络之【浏览器跨域问题分析与解决方案】

文章目录 同源策略同源与异源跨域的限制场景解决方案 CORS 请求分类 简单请求预检请求 注意点一 【关于Cookie】注意点二 【关于跨域获取响应头】 JSONP 基本流程 代理服务器 如何选择对应方案 同源策略 **同源策略是一套浏览器的安全策略机制&#xff0c;当一个源的文档和脚…

SSE 流式场景应用 及 方案总结

文章目录 SSE 流式场景前端流式解码应用JavaScript中的EventSource APISSE 与 Axios应用SSE 与 fetch 应用fetch 自己的流式响应代码解释 SSE 流式场景 股票行情实时推送 背景&#xff1a;在金融领域&#xff0c;股票价格是实时变化的。投资者和交易员需要及时获取最新的股票行…

老旧小区用电安全保护装置#限流式防火保护器参数介绍#

摘要 随着居民住宅区用电负荷的增加&#xff0c;用电安全问题日益突出&#xff0c;火灾隐患频繁发生。防火限流式保护器作为一种新型电气安全设备&#xff0c;能够有效预防因电气故障引发的火灾事故。本文介绍了防火限流式保护器的工作原理、技术特点及其在居民住宅区用电系统…

【ES6复习笔记】集合Set(13)

ES6 提供了新的数据结构 Set&#xff08;集合&#xff09;。它类似于数组&#xff0c;但成员的值都是唯一的&#xff0c;集合实现了iterator接口&#xff0c;所以可以使用『扩展运算符』和『for…of…』进行遍历。 集合的属性和方法 size&#xff1a;返回集合的元素个数。add…

whisper.cpp: PC端测试 -- 电脑端部署音频大模型

whisper.cpp: PC端测试 1.环境需要2.构建项目3.PC测试 1.环境需要 以下是经实验验证可行的环境参考&#xff0c;也可尝试其他版本。 &#xff08;1&#xff09;PC&#xff1a;Ubuntu 22.04.4 &#xff08;2&#xff09;软件环境&#xff1a;如下表所示 工具版本安装Anacond…

NAT的工作原理

NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;的工作原理主要是通过修改网络数据包中的IP地址信息来实现的。它允许内部网络使用私有IP地址&#xff0c;同时通过一个或少数几个公共IP地址来接入外部网络&#xff08;通常是Internet&#xf…

安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析

在信息技术迅猛发展的今天&#xff0c;企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具&#xff0c;其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术&#xff0c;正逐渐成为提升运维管理效率和安全性的重要…

论文复刻:ESG表现对企业价值的影响机制研究——A股上市公司证据(2009-2023年)

参照王波&#xff08;2022&#xff09;的做法&#xff0c;对来自软科学《ESG表现对企业价值的影响机制研究——来自我国A股上市公司的经验证据》一文中的基准回归部分进行复刻 以中国2009-2023年A股上市公司为研究样本考察企业的环境、社会和治理&#xff08;ESG&#xff09;表…