水库大坝三维模型开发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,一经查实,立即删除!

相关文章

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" 需…

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…

【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;当一个源的文档和脚…

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

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

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

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

小程序租赁系统开发指南与实现策略

内容概要 在如今这个快节奏的时代&#xff0c;小程序租赁系统的开发正逐渐成为许多商家提升服务质量与效率的重要选择。在设计这样一个系统时&#xff0c;首先要明白它的核心目标&#xff1a;便捷、安全。用户希望在最短的时间内找到需要的物品&#xff0c;而商家则希望通过这…

[2003].第2-01节:关系型数据库表及SQL简介

所有博客大纲 后端学习大纲 MySQL学习大纲 1.数据库表介绍&#xff1a; 1.1.表、记录、字段 1.E-R&#xff08;entity-relationship&#xff0c;实体-联系&#xff09;模型中有三个主要概念是&#xff1a; 实体集 、 属性 、 联系集2.一个实体集&#xff08;class&#xff09…

git推送本地仓库到远程(Gitee)

目录 一、注册创建库 二、创建仓库 三、推送本地仓库到远程 1.修改本地仓库用户名和邮箱 2.本地库关联远程仓库 3.拉取远程仓库的文件 4.推送本地库的文件 5.查看远程仓库 四、远程分支查看 1.查看远程分支 2.修改test.txt文件 一、注册创建库 Gitee官网&#xff1…

GoZero框架接入数据库引擎Gorm 并实战:构建简单的 CRUD 业务API

GoZero 是一个高性能的微服务框架&#xff0c;它基于 Go 语言开发&#xff0c;提供了丰富的工具支持&#xff0c;能够帮助开发者快速构建可扩展、易维护的应用。Gorm 是 Go 语言中常用的 ORM 库&#xff0c;它帮助我们简化数据库操作&#xff0c;使用面向对象的方式进行增删改查…

KNN分类算法 HNUST【数据分析技术】(2025)

1.理论知识 KNN&#xff08;K-Nearest Neighbor&#xff09;算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类&#xff0c;也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想&#xff1a; 对于任意n维输入向量&#xff0c;分别对应于特征…

探索Flink动态CEP:杭州银行的实战案例

摘要&#xff1a;本文撰写自杭州银行大数据工程师唐占峰、欧阳武林老师。将介绍 Flink 动态 CEP的定义与核心概念、应用场景、并深入探讨其技术实现并介绍使用方式。主要分为以下几个内容&#xff1a; Flink动态CEP简介 Flink动态CEP的应用场景 Flink动态CEP的技术实现 Flin…

打造高效租赁小程序让交易更便捷

内容概要 在如今节奏飞快的商业世界里&#xff0c;租赁小程序如同一只聪明的小狐狸&#xff0c;迅速突围而出&#xff0c;成为商家与消费者之间的桥梁。它不仅简化了交易流程&#xff0c;还在某种程度上将传统租赁模式带入了互联网时代。越来越多的企业意识到&#xff0c;这种…

【MinIO系列】MinIO Client (mc) 完全指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Jmeter录制https请求

jmeter 5.5版本&#xff0c;chrome浏览器 1、首先添加Test Plan-Thread Group-HTTP(S) Test Script Recorder 2、设置HTTP(S) Test Script Recorder界面的Port&#xff08;监听端口&#xff0c;设置浏览器代理时需要与这里保持一致&#xff09;、HTPS Domains&#xff08;录制…

前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!

Vue 快速上手 Vue概念 Vue 是一个用于构建用户界面的渐进式框架 构建用户界面&#xff1a;基于数据渲染出用户看到的页面 渐进式&#xff1a;循序渐进 框架&#xff1a;一套完整的项目解决方案 Vue 的两种使用方式: ① Vue 核心包开发 场景:局部 模块改造 ② Vue 核心包 &am…

基于Spring Boot的高校请假管理系统

一、系统背景与意义 随着高校规模的扩大和学生数量的增加&#xff0c;传统的请假管理方式已经难以满足高校管理的需求。人工请假流程繁琐、耗时长&#xff0c;且容易出现信息错误或遗漏。因此&#xff0c;开发一套基于Spring Boot的高校请假管理系统具有重要意义&#xff0c;它…

Gate.io 平台通证 GT:持续赋能与销毁、财富效应显著

在瞬息万变的加密市场中&#xff0c;每一轮牛熊转换都在加速 CEX 市场的一轮又一轮洗牌&#xff0c;这也使得该赛道的格局始终处于动态的变化。而在本轮牛市中&#xff0c;CEX 赛道也正在从最初的三大领衔变成了多强角逐&#xff0c;而 Gate.io 作为创立 11 余年的老牌交易平台…