当前位置: 首页 > news >正文

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模型&#xff0c;提供了强大的并发抽象和工具&#xff0c;适用于各种业务场景。以下是一些使用AKKA框架的常见业务场景的示例&#xff1a; 实时数据…...

什么是Service Worker?它在PWA中的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Service Worker的作用是什么&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前…...

【算法深入浅出】字符串匹配之 KMP 算法

KMP 算法是一种字符串匹配算法。字符串匹配算法的目标是&#xff1a;在字符串 s 中找到与模式串 p 相等的子串&#xff0c;输出其位置。例如&#xff1a;s “abcdef”&#xff0c;p “cdef”&#xff0c;p 在 s 中的位置是 2&#xff08;从 0 开始计数&#xff09;。 容易想到…...

放弃webstrom转战vscode

本来是webstrom的忠实用户&#xff0c;无奈webstrom要么需要在网上找一个破解版或者不断的去找激活码&#xff0c;且破解版和激活码的文章总是很多&#xff0c;但是要找到真正有效的却总是要花费不少功夫。终于忍无可忍&#xff0c;转战vscode。&#xff08;注&#xff1a;文中…...

VSCode 和 CLion

文章目录 一、VSCode1、文档2、插件3、智能编写4、VSCode 与 C&#xff08;1&#xff09;安装&#xff08;2&#xff09;调试&#xff08;a&#xff09;使用 CMake 进行跨平台编译与调试&#xff08;b&#xff09;launch.json&#xff08;c&#xff09;传参 &#xff08;3&…...

Learn Prompt- Midjourney Prompt:Prompt 提示语

基础结构​ 一个基本的提示可以简单到一个单词、短语或表情符号。非常短的提示将在很大程度上依赖于 Midjourney 的默认样式。 完整 prompt&#xff1a;可以包括一个或多个图像链接、多个文本短语或单词&#xff0c;以及一个或多个后缀参数 Image Prompts: 可以将图像 URL 添加…...

uvm白皮书练习_ch2_ch223_加入objection机制

UVM中通过objection机制来控制验证平台的关闭。 在每个phase中&#xff0c;UVM会检查是否有objection被提起&#xff08;raise_ objection&#xff09;&#xff0c;如果有&#xff0c;那么等待这个objection被撤销&#xff08;drop_objection&#xff09;后停止仿真&#xff1b…...

利用C++开发一个迷你的英文单词录入和测试小程序-增强功能

小玩具基本完成之后&#xff0c;在日常工作中&#xff0c;记录一些单词&#xff0c;然后定时再复习下&#xff0c;还真的有那么一点点用&#xff08;毕竟自己做的小玩具&#xff09;。 在使用过程中&#xff0c;遇到不认识的单词&#xff0c;总去翻译软件翻译&#xff0c;然后…...

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 代码&#xff1a; App.vue <template><div><button click"myFn" style"width: 200px; height: 200px;"></button><home v-if"ishow"></hom…...

【LeetCode-简单题】501. 二叉搜索树中的众数

文章目录 题目方法一&#xff1a;暴力哈希方法二&#xff1a;利用二叉搜索树的特性&#xff08;递归双指针&#xff09; 题目 方法一&#xff1a;暴力哈希 这是针对于普通二叉树的解法 统计number出现次数 然后将次数最大的众数集 取出来 Map<Integer , Integer > map …...

MAC word 如何并列排列两张图片

系统&#xff1a;MAC os 参考博客 https://baijiahao.baidu.com/s?id1700824516945958911&wfrspider&forpc 步骤1 新建一个word文档和表格 修改表格属性 去掉自动重调尺寸以适应内容 插入图片 在表格的位置插入对应的图片如下 去除边框 最终结果如下...

PTA第三章作业题

文章目录 前言7-1 比较大小Ⅰ. 方法一 &#xff1a;直接判断法Ⅱ. 方法二&#xff1a;交换法 7-2 比较两个数的大小Ⅰ. 方法 &#xff1a;直接判断法 7-3 成绩等级Ⅰ. 方法 &#xff1a;直接判断法 7-4 打鱼晒网Ⅰ. 方法 &#xff1a;直接判断法 7-5 计算奖金Ⅰ. 方法 &#xf…...

vscode vue html 快捷键

css文件 选择多行 按下ctrl不放 按下鼠标滚轮不放&#xff08;鼠标中键&#xff09; 鼠标向下移动 同时修改多个相同的字符串 <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 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…...

docker-compose搭建的mysql,如何定时备份数据

一、前言 使用docker-compose搭建的mysql中自带了mysqldump&#xff0c;所以在服务器上如何使用容器中的mysqldump命令是实现备份的原理&#xff0c;下面是主要实现的命令 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 默认配置会在出口目录中&#xff08;通过output.path选项配置&#xff09;生成一个index.html文件&#xff1b; 生成的index.html文件将会…...

如何两个不同的脚本文件之间传递参数

两个不同的Shell脚本之间如何访问传递的参数取决于它们是如何调用的。如果一个Shell脚本1调用另一个Shell脚本2并且想要将参数传递给被调用的脚本2&#xff0c;可以使用以下方法&#xff1a; 方法1&#xff1a;通过位置参数传递参数 这是一种常见的方法&#xff0c;其中一个脚…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...