VUE使用DXFParser组件解析dxf文件生成图片
<template><div><input type="file" @change="handleFileChange" /></div><el-table :data="tableData" style="width: 100%"><el-table-column prop="Control_No" label="序号" width="180" /><el-table-column prop="Index" label="编号" width="180" /><el-table-column prop="ID" label="ID" width="180" /><el-table-column prop="BH" label="编号" width="180" /><el-table-column prop="Piece_Name" label="部位名称" width="180" /><el-table-column prop="data" label="日期" />'<el-table-column label="精品图片"><template v-slot="scope"><!-- 在这里访问tableData.vertices中的数据 --><div id="imageContainer"><!-- 使用scope.row来获取当前行的数据 --><img :src="generateCanvasImage(scope.row.vertices)" alt="精品图片" /></div></template></el-table-column></el-table>
</template><script>
import DXFParser from 'dxf-parser';export default {data() {return {tableData: [],}},methods: {handleFileChange(event) {const file = event.target.files[0];const reader = new FileReader();reader.onload = (e) => {const contents = e.target.result;// const decoder = new TextDecoder('utf-8');// const decodedContents = decoder.decode(contents);const parser = new DXFParser();const dxf = parser.parseSync(contents);// 处理解析后的DXF数据this.processDXF(dxf);// console.log(this.processDXF(dxf))};reader.readAsText(file);// reader.readAsArrayBuffer(file)},processDXF(dxf) {// 在这里处理解析后的DXF数据console.log(dxf);this.tableData.splice(0, this.tableData.length);// 示例:绘制一些图形到canvas上console.log(dxf.blocks)// dxf.blocks.forEach((e)=>{// console.log(e)// })var Control_No = 1;for (var key in dxf.blocks) {if ('entities' in dxf.blocks[key]) {// console.log(dxf.blocks[key].entities[0].type)for (var i in dxf.blocks[key].entities) {if ("TEXT" === dxf.blocks[key].entities[i].type) {var ver = [];for (var w = 4; w < dxf.blocks[key].entities.length; w++) {if (dxf.blocks[key].entities[w].vertices) {dxf.blocks[key].entities[w].vertices[0].new = truever = ver.concat(dxf.blocks[key].entities[w].vertices);}}console.log(ver.concat(dxf.blocks[key].entities[5].vertices))var newItem = {Control_No: Control_No++,Index: key,ID: dxf.blocks[key].entities[0].text,BH: dxf.blocks[key].entities[1].text,Piece_Name: dxf.blocks[key].entities[2].text,vertices: ver,data: dxf.blocks[key].entities[3].text};this.tableData.push(newItem); // 将新对象添加到tableData数组中break;}}}}},generateCanvasImage(vertices) {// 获取Canvas元素var canvas = document.createElement("canvas");var ctx = canvas.getContext("2d");// 设置多边形的颜色var color = "#FF0000"; // 十六进制颜色值,例如 16711680 对应的颜色为红色// 顶点坐标列表// 计算图形的包围框var minX = Number.MAX_VALUE;var minY = Number.MAX_VALUE;var maxX = Number.MIN_VALUE;var maxY = Number.MIN_VALUE;for (var i = 0; i < vertices.length; i++) {var vertex = vertices[i];minX = Math.min(minX, vertex.x);minY = Math.min(minY, vertex.y);maxX = Math.max(maxX, vertex.x);maxY = Math.max(maxY, vertex.y);}// 计算缩放因子var width = maxX - minX;var height = maxY - minY;var scale = Math.min(canvas.width / width, canvas.height / height);// 绘制多边形ctx.beginPath();ctx.strokeStyle = color; // 设置描边颜色ctx.lineWidth = 1; // 设置线宽// 移动到第一个顶点ctx.moveTo((vertices[0].x - minX) * scale, (vertices[0].y - minY) * scale);// 依次连接顶点for (var e = 1; e < vertices.length; e++) {if (vertices[e].new === true) {console.log("true");// 如果条件成立,移动到当前顶点位置,不连接上一次的顶点ctx.moveTo((vertices[e].x - minX) * scale, (vertices[e].y - minY) * scale);} else {// 否则继续连接顶点ctx.lineTo((vertices[e].x - minX) * scale, (vertices[e].y - minY) * scale);}}// 关闭多边形路径ctx.closePath();// 绘制多边形ctx.stroke();// 将Canvas内容转换为图片路径var imgDataURL = canvas.toDataURL("image/png");// 在HTML页面上显示图片var imgElement = document.createElement("img");imgElement.src = imgDataURL;return imgElement.src// 将图片元素添加到页面中的图片容器// var container = document.getElementById("imageContainer");// container.appendChild(imgElement);}}
}
</script>

大致效果图如果大家有疑问欢迎评论我将在更新问题解析!
相关文章:
VUE使用DXFParser组件解析dxf文件生成图片
<template><div><input type"file" change"handleFileChange" /></div><el-table :data"tableData" style"width: 100%"><el-table-column prop"Control_No" label"序号" width…...
SpringBoot 集成 AKKA
文章目录 应用场景与 SpringBoot 集成示例 应用场景 AKKA 是一个用于构建高并发、分布式和容错应用程序的开源框架。它基于Actor模型,提供了强大的并发抽象和工具,适用于各种业务场景。以下是一些使用AKKA框架的常见业务场景的示例: 实时数据…...
什么是Service Worker?它在PWA中的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Service Worker的作用是什么?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前…...
【算法深入浅出】字符串匹配之 KMP 算法
KMP 算法是一种字符串匹配算法。字符串匹配算法的目标是:在字符串 s 中找到与模式串 p 相等的子串,输出其位置。例如:s “abcdef”,p “cdef”,p 在 s 中的位置是 2(从 0 开始计数)。 容易想到…...
放弃webstrom转战vscode
本来是webstrom的忠实用户,无奈webstrom要么需要在网上找一个破解版或者不断的去找激活码,且破解版和激活码的文章总是很多,但是要找到真正有效的却总是要花费不少功夫。终于忍无可忍,转战vscode。(注:文中…...
VSCode 和 CLion
文章目录 一、VSCode1、文档2、插件3、智能编写4、VSCode 与 C(1)安装(2)调试(a)使用 CMake 进行跨平台编译与调试(b)launch.json(c)传参 (3&…...
Learn Prompt- Midjourney Prompt:Prompt 提示语
基础结构 一个基本的提示可以简单到一个单词、短语或表情符号。非常短的提示将在很大程度上依赖于 Midjourney 的默认样式。 完整 prompt:可以包括一个或多个图像链接、多个文本短语或单词,以及一个或多个后缀参数 Image Prompts: 可以将图像 URL 添加…...
uvm白皮书练习_ch2_ch223_加入objection机制
UVM中通过objection机制来控制验证平台的关闭。 在每个phase中,UVM会检查是否有objection被提起(raise_ objection),如果有,那么等待这个objection被撤销(drop_objection)后停止仿真;…...
利用C++开发一个迷你的英文单词录入和测试小程序-增强功能
小玩具基本完成之后,在日常工作中,记录一些单词,然后定时再复习下,还真的有那么一点点用(毕竟自己做的小玩具)。 在使用过程中,遇到不认识的单词,总去翻译软件翻译,然后…...
kibana启动报错
1.响应 超过时间30000ms (1) docker rm elasticsearch #从docker中删除es docker rm kibana #从docker中删除kibana (2)重新安装启动es加大最大运行内存 :1024M docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.typesingle-node" \ -…...
排查内存泄露
1 通过Performance确认是否存在内存泄露 一个存在内存泄露的 DEMO 代码: App.vue <template><div><button click"myFn" style"width: 200px; height: 200px;"></button><home v-if"ishow"></hom…...
【LeetCode-简单题】501. 二叉搜索树中的众数
文章目录 题目方法一:暴力哈希方法二:利用二叉搜索树的特性(递归双指针) 题目 方法一:暴力哈希 这是针对于普通二叉树的解法 统计number出现次数 然后将次数最大的众数集 取出来 Map<Integer , Integer > map …...
MAC word 如何并列排列两张图片
系统:MAC os 参考博客 https://baijiahao.baidu.com/s?id1700824516945958911&wfrspider&forpc 步骤1 新建一个word文档和表格 修改表格属性 去掉自动重调尺寸以适应内容 插入图片 在表格的位置插入对应的图片如下 去除边框 最终结果如下...
PTA第三章作业题
文章目录 前言7-1 比较大小Ⅰ. 方法一 :直接判断法Ⅱ. 方法二:交换法 7-2 比较两个数的大小Ⅰ. 方法 :直接判断法 7-3 成绩等级Ⅰ. 方法 :直接判断法 7-4 打鱼晒网Ⅰ. 方法 :直接判断法 7-5 计算奖金Ⅰ. 方法 …...
vscode vue html 快捷键
css文件 选择多行 按下ctrl不放 按下鼠标滚轮不放(鼠标中键) 鼠标向下移动 同时修改多个相同的字符串 <style> .base-goods-item li {width: 304px;height: 404px;background-color: #eef9f4; } .base-goods-item li {display: block; } .base-…...
mysql锁相关的总结
1、参考文章 MySQL 主键索引在 RR 和 RC 隔离级别下的加锁情况总结_51CTO博客_mysql二级索引加锁 2、 show OPEN TABLES where In_use > 0; -- 类似rc的需求 show variables like innodb_locks_unsafe_for_binlog; SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; -- …...
计算机竞赛 深度学习乳腺癌分类
文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…...
docker-compose搭建的mysql,如何定时备份数据
一、前言 使用docker-compose搭建的mysql中自带了mysqldump,所以在服务器上如何使用容器中的mysqldump命令是实现备份的原理,下面是主要实现的命令 docker exec -it mysql mysqldump -u root -p$mysql_password $database_name > $backup_file二、备…...
webpack:关于处理html文件的插件html-webpack-plugin、add-asset-html-webpack-plugin
简介 add-asset-html-webpack-plugin 将 JavaScript或CSS文件添加到由html-webpack-plugin插件生成的HTML中去。 html-webpack-plugin 默认配置会在出口目录中(通过output.path选项配置)生成一个index.html文件; 生成的index.html文件将会…...
如何两个不同的脚本文件之间传递参数
两个不同的Shell脚本之间如何访问传递的参数取决于它们是如何调用的。如果一个Shell脚本1调用另一个Shell脚本2并且想要将参数传递给被调用的脚本2,可以使用以下方法: 方法1:通过位置参数传递参数 这是一种常见的方法,其中一个脚…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
